关于tushare实盘操作的方法

2024-01-04 13:58
文章标签 方法 操作 tushare 实盘

本文主要是介绍关于tushare实盘操作的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

在学习tushare的用法中:发现无法登录实盘。主要由以下两种原因造成:

1、tushare中现有函数无法识别验证码

tushare/trader/utils.py模块中的get_vcode函数,是zxjt网站交易登录界面验证码识别函数。但由于网站改版等原因,该函数中的vcode=pytessoract.image_to_string(img),对zxjt登录界面的验证码并不能很好的识别。

建立svm机器学习识别验证模块(我创建的pdsi包,包含此模块).

引入该模块函数:from pdsi import cropimage,clrfiles,get_feature, svm_model_test,在get_vcode函数加入相应语句即可识别。见下面:

2、验证码与对应登录网站的地址不一致。

zxjt有两个交易登录界面:newetrade.csc108.com、https://newetradesh.csc108.com,分别对应两个验证码地址。现有的tushare中trade.py模块错位了:将https://newetrade.csc108.com登录界面,使用的却是https://newetradesh.csc108.com/commons/image.jsp的验证码。

以下语句中红色部分为改进代码:

#!/usr/bin/env python
# -*- coding:utf-8 -*- 
#--------------------这个是改后的tushare/trader/utils.py文件
'''
Created on 2016年10月1日
@author: Jimmy Liu
@group : waditu
@contact: jimmysoa@sina.cn
'''
import sys
sys.path.append(r"d:/pdsi")
from pdsi import cropimage,clrfiles,get_feature, svm_model_test
import os
import json
import time
import six
from tushare.trader import vars as vs
import pandas as pd
def nowtime_str():return time.time() * 1000def get_jdata(txtdata):txtdata = txtdata.contentif six.PY3:txtdata = txtdata.decode('utf-8')jsonobj = json.loads(txtdata)return jsonobjdef get_vcode(broker, res):from PIL import Imageimport pytesseract as ptimport ioif broker == 'csc':imgdata = res.content
        img = Image.open(io.BytesIO(imgdata)).convert("1")img.save(r'd:/pdsi/img/imgs/0image.png')#print(type(img),img)#vcode = pt.image_to_string(img)#print("vcodetype",vcode)clrfiles(r'./img/img_split/')cropimage(img,0,4)df_a=pd.DataFrame()for imgname in os.listdir('d:/pdsi/img/img_split/'):aa=get_feature(Image.open('d:/pdsi/img/img_split/'+str(imgname)))aa.insert(0,"2")df_a=df_a.append([aa])df_a.to_csv(r'./img/last_test_pix_xy_new.txt', index=False, sep=r' ', header=False)aaa=svm_model_test()print('验证码类型', type(aaa), aaa)vcode=aaareturn vcode

另外:tushare/trader/trader.py文件中也有误,

    def login(self):self.s.headers.update(vs.AGENT)self.s.get(vs.CSC_PREFIX % (vs.P_TYPE['https'], vs.DOMAINS['csc'],vs.PAGES['csclogin']))res = self.s.get(vs.V_CODE_URL%(vs.P_TYPE['https'],vs.DOMAINS['csc'],#原来的是cscsh,登录的是:newetrader.csc108.com网站,但取的图片却是newetrade.csc108sh.com页面的验证码,造成不能登录。vs.PAGES['vimg']))													if self._login(utils.get_vcode('csc', res)) is False:print('请确认账号或密码是否正确 ,或券商服务器是否处于维护中。 ')self.keepalive()
tushare软件包,trader/trader.py中,验证码图片地址的res语句中,因登录界面登录的是newetrader.csc108.com(不是另一个网站newetradersh.csc108.com),vs.DOMAINS['cscsh']必须改为vs.DOMAINS['CSC']。

特别注意:

如果登录的是newetradersh.csc108.com,那么对应的验证码地址也是:newetradersh.csc108.com/commons/image.jsp

http://blog.sina.com.cn/s/blog_512d07ad0102wwbn.html

这篇关于关于tushare实盘操作的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/569548

相关文章

MySQL批量替换数据库字符集的实用方法(附详细代码)

《MySQL批量替换数据库字符集的实用方法(附详细代码)》当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改,下面:本文主要介绍MySQL批量替换数据库字符集的实用方法... 目录前言为什么要批量修改字符集?整体脚本脚本逻辑解析1. 设置目标参数2. 生成修改表默认字符集的语句3

Oracle Scheduler任务故障诊断方法实战指南

《OracleScheduler任务故障诊断方法实战指南》Oracle数据库作为企业级应用中最常用的关系型数据库管理系统之一,偶尔会遇到各种故障和问题,:本文主要介绍OracleSchedul... 目录前言一、故障场景:当定时任务突然“消失”二、基础环境诊断:搭建“全局视角”1. 数据库实例与PDB状态2

Java 单元测试之Mockito 模拟静态方法与私有方法最佳实践

《Java单元测试之Mockito模拟静态方法与私有方法最佳实践》本文将深入探讨如何使用Mockito来模拟静态方法和私有方法,结合大量实战代码示例,带你突破传统单元测试的边界,写出更彻底、更独立... 目录Mockito 简介:为什么选择它?环境准备模拟静态方法:打破“不可变”的枷锁传统困境解法一:使用M

使用Go调用第三方API的方法详解

《使用Go调用第三方API的方法详解》在现代应用开发中,调用第三方API是非常常见的场景,比如获取天气预报、翻译文本、发送短信等,Go作为一门高效并发的编程语言,拥有强大的标准库和丰富的第三方库,可以... 目录引言一、准备工作二、案例1:调用天气查询 API1. 注册并获取 API Key2. 代码实现3

React 记忆缓存的三种方法实现

《React记忆缓存的三种方法实现》本文主要介绍了React记忆缓存的三种方法实现,包含React.memo、useMemo、useCallback,用于避免不必要的组件重渲染和计算,感兴趣的可以... 目录1. React.memo2. useMemo3. useCallback使用场景与注意事项在 Re

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Java中字符编码问题的解决方法详解

《Java中字符编码问题的解决方法详解》在日常Java开发中,字符编码问题是一个非常常见却又特别容易踩坑的地方,这篇文章就带你一步一步看清楚字符编码的来龙去脉,并结合可运行的代码,看看如何在Java项... 目录前言背景:为什么会出现编码问题常见场景分析控制台输出乱码文件读写乱码数据库存取乱码解决方案统一使

Java Stream流与使用操作指南

《JavaStream流与使用操作指南》Stream不是数据结构,而是一种高级的数据处理工具,允许你以声明式的方式处理数据集合,类似于SQL语句操作数据库,本文给大家介绍JavaStream流与使用... 目录一、什么是stream流二、创建stream流1.单列集合创建stream流2.双列集合创建str

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.