先做简单版本,再一步步增加功能

1、简单目的:要实现这样一个功能,能够连接服务器,登录账号,查询账号委托信息,如果有委托信息,撤销委托。

属性(不同账户之间差别):账户,密码

方法(不同账户之间都要用到功能):连接服务器、登录账号、查询委托信息、撤销委托

问题1、如何在类方法中写类方法?A类有方法a、b,如何在方法b下面使用方法a呢?

classA:defa(self):print('abcd')defb(self):

self.a()

yq=A()

yq.b()#abcd

可见在方法前加入self即可。

脚本文件一:

importpy_t2sdkclassStockTrade:def __init__(self,fund_account,password,connect=None):

self.fund_account=fund_account

self.password=password

self.connect=connectdefStockEntrustPack(self):

pStockEntrustPack=py_t2sdk.pyIF2Packer()

pStockEntrustPack.BeginPack()

pStockEntrustPack.AddField("op_entrust_way", 'C', 1)

pStockEntrustPack.AddField("op_station", 'S', 255)

pStockEntrustPack.AddField("client_id", 'S', 15)

pStockEntrustPack.AddField("input_content", 'C', 1)

pStockEntrustPack.AddField("account_content", 'S', 30)

pStockEntrustPack.AddField("fund_content", 'S', 30)

pStockEntrustPack.AddField("fund_account", 'S', 11)

pStockEntrustPack.AddField("stock_code", 'S', 6)

pStockEntrustPack.AddField("entrust_amount", 'I', 10)

pStockEntrustPack.AddField("entrust_price", 'F', 10, 3)

pStockEntrustPack.AddField("entrust_bs", 'S', 1)

pStockEntrustPack.AddField("entrust_prop", 'S', 3)

pStockEntrustPack.AddField("content_type", 'S', 6)

pStockEntrustPack.AddField("password", 'S', 10)

pStockEntrustPack.AddField("password_type", 'C')

pStockEntrustPack.AddField("exchange_type", 'S', 4)

pStockEntrustPack.AddStr('Z') #op_entrust_way

pStockEntrustPack.AddStr('123456') #op_station

pStockEntrustPack.AddStr('10080156') #client_id

pStockEntrustPack.AddStr('1') #input_content

pStockEntrustPack.AddStr('10080156') #account_content

pStockEntrustPack.AddStr('10080156') #fund_content

pStockEntrustPack.AddStr(self.fund_account) #fund_account

pStockEntrustPack.AddStr('601398') #stock_code

pStockEntrustPack.AddStr('100') #entrust_amount

pStockEntrustPack.AddStr('7.50') #entrust_price

pStockEntrustPack.AddStr('1') #1买入 2 卖出 #entrust_bs

pStockEntrustPack.AddStr('0') #entrust_prop

pStockEntrustPack.AddStr('0') #content_type

pStockEntrustPack.AddStr(self.password) #password

pStockEntrustPack.AddStr('2') #password_type

pStockEntrustPack.AddStr('1') #exchange_type 0资金 1上海 2深圳

pStockEntrustPack.EndPack()returnpStockEntrustPackdefConnectServer(self):

config=py_t2sdk.pyCConfigInterface()

config.Load('t2sdk.ini')

self.connect=py_t2sdk.pyConnectionInterface(config)

pCallBack= py_t2sdk.pyCallbackInterface('pyCallBack', 'pyCallBack')

pCallBack.InitInstance()

ret=self.connect.Create2BizMsg(pCallBack)#ret = connect.Create(pCallBack)

if ret !=0:print('creat faild!!')

exit()

ret= self.connect.Connect(9000)if ret !=0:print('connect faild:')

ErrMsg=self.connect.GetErrorMsg(ret)print(ErrMsg)

exit()print('YES')defLogin(self):#pLoginPack = GetLoginPack()

#pAccountPack = GetAccountPack()

pLoginPack =self.StockEntrustPack()

pBizMsg=py_t2sdk.pyIBizMessage()#pBizMsg.SetFunction(10001)

pBizMsg.SetFunction(332255)#pBizMsg.SetFunction(333002)

iPacklen =pLoginPack.GetPackLen()

iPackBuff=pLoginPack.GetPackBuf()

pBizMsg.SetPacketType(0)

pBizMsg.SetContent(iPackBuff, iPacklen)#ret = connect.SendBiz(10001,pLoginPack,1)

ret = self.connect.SendBizMsg(pBizMsg, 1)print(ret)defQueryEntrust(self):pass

defCheckEntrust(self):pass

defQueryAccountCash(self):pass

defGetEntrustInfo(self):pass

defStockEntrust(self):pass

defStockTrade(self):pass

#报错 注册超时。

解决:应该是连接多了,第一次连接上了,继续第二次再连接会报注册超时,连接一次就好了,不能多连。此外,应该说如果连接断了,t2sdk会自动连接上去。

#问题:没有触发回调

解决:因为主程序在触发回调之前进程结束了,可以在主程序后面加上sleep(100)

2、增加功能:

原来:要实现这样一个功能,能够连接服务器,登录账号,查询账号委托信息,如果有委托信息,撤销委托。

新增:查询账户资金、查询账户持仓

思考:1、我看登录账号不是必须流程,连接服务器后可以直接查询账号信息、或查询持仓等操作(不用先登录账号)

可以直接查询,这个可以在后台设置。

2、有很多功能之间的差别在于功能号不同,可以设置不同功能号为类中方法的参数,一个类方法即可解决。

3、原来想用字典来存储数据,估计不行。因为有些数据是重复的,但是字典只保留一个。

因为字典中键值对是一一对应的。

下面是字典保留信息:

{'init_date': '20180124', 'fund_account': '10080156', 'batch_no': '700011', 'entrust_no': '700011', 'exchange_type': '1', 'stock_account': 'S010080156', 'stock_code': '601398', 'entrust_bs': '1', 'entrust_price': '7.380', 'entrust_amount': '100.00', 'business_amount': '0.00', 'business_price': '0.000', 'report_no': '700011', 'report_time': '155330', 'entrust_type': '0', 'entrust_status': '2', 'entrust_time': '155330', 'entrust_date': '20180124', 'entrust_prop': '0', 'stock_name': '工商银行', 'position_str': '000000004', 'entrust_price2': '7.380', 'cancel_info': '', 'entrust_way': '7', 'business_balance': '0.00', 'withdraw_amount': '0.00', 'curr_milltime': '155330129', 'report_milltime': '155330135', 'order_id': '700011', 'orig_order_id': '700011'}

------------------------------------------------------------

认真研究后发现可以通过字典加DataFrame格式来保存数据,现在有个问题如下:多结果集?该如何处理?

咨询后:现在这边产品暂时没有多结果集,恒生资管部门那边会用到。

4、存储在DataFrame中打印不出来,不知道是不是设置缓存不够原因?

5、在交易类中写解包功能函数,用来存储服务器返回数据,是否可以在回调函数中使用主函数中的交易类的函数?

不这样做呢?还有哪些方法?我现在的问题是主函数如何获得回调函数中返回数据?以前是在回调函数中直接打印出来,没有传到主函数。

6、运行时回调函数没有打印出DataFrame,什么原因?

代码一:在回调函数中打印

#coding=utf-8

importpy_t2sdkimportpandas as pdfrom pandas importSeries,DataFramedefPrintUnpack(lpUnpack):

iDataSetCount=lpUnpack.GetDatasetCount()

index=0while index

lpUnpack.SetCurrentDatasetByIndex(index)

iRowCount=lpUnpack.GetRowCount()

RowIndex=0while RowIndex

iColCount=lpUnpack.GetColCount()

iColIndex=0while iColIndex

ColType=lpUnpack.GetColType(iColIndex)if ColType == 'S':print(lpUnpack.GetColName(iColIndex) + ':' +lpUnpack.GetStrByIndex(iColIndex))elif ColType == 'I':print(lpUnpack.GetColName(iColIndex) + ':' +str(lpUnpack.GetIntByIndex(iColIndex)))elif ColType == 'C':print(lpUnpack.GetColName(iColIndex) + ':' +lpUnpack.GetCharByIndex(iColIndex))elif ColType == 'F':print(lpUnpack.GetColName(iColIndex) + ':' +str(lpUnpack.GetDoubleByIndex(iColIndex)))

iColIndex+= 1lpUnpack.Next()

RowIndex+= 1index+= 1

defStoreUnpack(lpUnpack):

iDataSetCount= lpUnpack.GetDatasetCount();print('iDataSetCount:',iDataSetCount)

index=0while index

StoreUnpackDataFrame=DataFrame()

lpUnpack.SetCurrentDatasetByIndex(index)

iRowCount= lpUnpack.GetRowCount();print('iRowCount:',iRowCount)

RowIndex=0while RowIndex

StoreUnpack= {} #存放一列的数据

iColCount = lpUnpack.GetColCount();print('iColCount:',iColCount)

iColIndex=0while iColIndex

ColType=lpUnpack.GetColType(iColIndex)if ColType == 'S':print(lpUnpack.GetColName(iColIndex) + ':' +lpUnpack.GetStrByIndex(iColIndex))

StoreUnpack.update({lpUnpack.GetColName(iColIndex):lpUnpack.GetStrByIndex(iColIndex)})elif ColType == 'I':print(lpUnpack.GetColName(iColIndex) + ':' +str(lpUnpack.GetIntByIndex(iColIndex)))

StoreUnpack.update({lpUnpack.GetColName(iColIndex): lpUnpack.GetStrByIndex(iColIndex)})elif ColType == 'C':print(lpUnpack.GetColName(iColIndex) + ':' +lpUnpack.GetCharByIndex(iColIndex))

StoreUnpack.update({lpUnpack.GetColName(iColIndex): lpUnpack.GetStrByIndex(iColIndex)})elif ColType == 'F':print(lpUnpack.GetColName(iColIndex) + ':' +str(lpUnpack.GetDoubleByIndex(iColIndex)))

StoreUnpack.update({lpUnpack.GetColName(iColIndex): lpUnpack.GetStrByIndex(iColIndex)})

iColIndex+= 1StoreUnpackRow= DataFrame(StoreUnpack, index=RowIndex)

StoreUnpackDataFrame=pd.concat((StoreUnpackDataFrame,StoreUnpackRow))

lpUnpack.Next()

RowIndex+= 1index+= 1

print(StoreUnpackDataFrame)returnStoreUnpackDataFrameclasspyCallBack:def __init__(self):print('init')defOnConnect(self):print('OnConnect')defOnSafeConnect(self):print('OnSafeConnect')defOnRegister(self):print('OnRegister')defOnSent(self):print('OnSent')defOnClose(self):print('OnClose')defOnReceivedBiz(self,hResult,hSend,sBuff,iLenght):print('OnReceivedBiz')if hResult == 0 or hResult == 1:

lppUnpack=py_t2sdk.pyIF2UnPacker()

lppUnpack.SetPackBuff(sBuff,iLenght)

PrintUnpack(lppUnpack)else:print(sBuff)defOnReceivedBizEx(self,hResult,hSend,sBuff,iLenght):print('OnReceivedBizEx')if hResult == 0 or hResult == 1:

lppUnpack=py_t2sdk.pyIF2UnPacker()

lppUnpack.SetPackBuff(sBuff,iLenght)

PrintUnpack(lppUnpack)else:print(sBuff)defOnReceivedBizMsg(self,hResult,hSend,sBuff,iLenght):print('OnReceivedBizMsg')if hResult == 0 or hResult == 1:

lpBizMsg=py_t2sdk.pyIBizMessage()

lpBizMsg.SetBuff(sBuff,iLenght)print('funcid:',lpBizMsg.GetFunction())

lppUnpack=py_t2sdk.pyIF2UnPacker()

iPackBuff,iPackLen=lpBizMsg.GetContent()

lppUnpack.SetPackBuff(iPackBuff,iPackLen)#PrintUnpack(lppUnpack)

StoreUnpack(lppUnpack)print('------------------------------------------------------------')#StoreUnpack=StoreUnpack(lppUnpack)

#print('StoreUnpack:',StoreUnpack)

else:print(sBuff)

D:\Anaconda3\python.exe E:/UFXAPIForPython0119/demo/strategy_test.py

init

OnSafeConnect!

OnRegister!

OnConnect

OnSafeConnect

OnRegister

YES

1

OnReceivedBizMsg!

Process finished with exit code 0

代码二:在主函数中打印

#def PrintUnpack(lpUnpack):

#iDataSetCount = lpUnpack.GetDatasetCount()

#index = 0

#while index < iDataSetCount:

#lpUnpack.SetCurrentDatasetByIndex(index)

#iRowCount = lpUnpack.GetRowCount()

#RowIndex = 0

#while RowIndex < iRowCount:

#StoreUnpack = {} # 存放一列的数据

#iColCount = lpUnpack.GetColCount()

#iColIndex = 0

#while iColIndex < iColCount:

#ColType = lpUnpack.GetColType(iColIndex)

#if ColType == 'S':

#print(lpUnpack.GetColName(iColIndex) + ':' + lpUnpack.GetStrByIndex(iColIndex))

#StoreUnpack.update({lpUnpack.GetColName(iColIndex): lpUnpack.GetStrByIndex(iColIndex)})

#elif ColType == 'I':

#print(lpUnpack.GetColName(iColIndex) + ':' + str(lpUnpack.GetIntByIndex(iColIndex)))

#StoreUnpack.update({lpUnpack.GetColName(iColIndex): lpUnpack.GetStrByIndex(iColIndex)})

#elif ColType == 'C':

#print(lpUnpack.GetColName(iColIndex) + ':' + lpUnpack.GetCharByIndex(iColIndex))

#StoreUnpack.update({lpUnpack.GetColName(iColIndex): lpUnpack.GetStrByIndex(iColIndex)})

#elif ColType == 'F':

#print(lpUnpack.GetColName(iColIndex) + ':' + str(lpUnpack.GetDoubleByIndex(iColIndex)))

#StoreUnpack.update({lpUnpack.GetColName(iColIndex): lpUnpack.GetStrByIndex(iColIndex)})

#iColIndex += 1

#print(StoreUnpack)

#lpUnpack.Next()

#RowIndex += 1

#index += 1

D:\Anaconda3\python.exe E:/UFXAPIForPython0119/demo/strategy_test.py

init

OnSafeConnect!

OnRegister!

OnConnect

OnSafeConnect

OnRegister

YES

1

OnReceivedBizMsg!

OnReceivedBizMsg

funcid: 333101

init unpacker,591

iDataSetCount: 1

index: 0

iRowCount: 0

Empty DataFrame

Columns: []

Index: []

------------------------------------------------------------

Process finished with exit code 0

这两个是什么原因造成的?

python mount回调函数_python类(4)——自己造第一个轮子相关推荐

  1. python mount回调函数_python requests模块中返回时间elapsed解析

    一.问题: Python 中requests库在发送http请求时相当方便好用,但在使用时一直受一个问题困扰,怎么才能查看请求时长呢? 自己写时间函数再相减?NO,这个方法肯定不行. 二.解决: 好吧 ...

  2. python 匿名回调函数_Python面试题之回调函数

    编程分为两类:系统编程(system programming)和应用编程(application programming).所谓系统编程,简单来说,就是编写库:而应用编程就是利用写好的各种库来编写具某 ...

  3. python asyncio回调函数_python回调函数用法实例分析

    python回调函数用法实例分析 本文实例讲述了python回调函数用法.分享给大家供大家参考.具体分析如下: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步 ...

  4. python mount回调函数_为python回调函数设置argtype

    我对Python很在行,所以希望我能正确地表达这个问题.在 整个问题涉及从Python调用C例程.我可以通过把一些相关的问题/答案凑在一起来接近,但我似乎不能把事情安排得很好.有两个方面:第一个是用指 ...

  5. python ctypes 回调函数_Python ctypes中具有自定义类型的回调

    那里有一些错误,有些是基本的Python错误: from ctypes import * class A(Structure): _fields_ = [ ("a1", c_cha ...

  6. python mount回调函数_让Python脚本暂停执行的几种方法(小结)

    1.time.sleep(secs) 参考文档原文: Suspend execution for the given number of seconds. The argument may be a ...

  7. 【Python面试】 说说Python变量、函数、类的命名规则?

    往期面试题: 谈谈对 Python 和其他语言的区别? 说说4种常用编码的区别? 说说Python面向对象三大特性? 说说Python中有几种数据类型? 废话不多说,开始今天的题目: 问:Python ...

  8. python中延时函数_python中实现延时回调普通函数示例代码

    python中实现延时回调普通函数示例代码 这篇文章主要给大家介绍了关于python中实现延时回调普通函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的 ...

  9. python如何定义自定义函数_python类中系统自定义函数

    标签: python类 双下划线特殊函数 今天遇到python类内部系统以双下划线开头和结尾的情况,特去学习一部分的应用情况,顺便记录一下.python 的OOP编程中,每个类拥有一些系统特殊定义的函 ...

  10. python线程池回调函数_python回调函数中使用多线程的方法

    下面的demo是根据需求写的简单测试脚本 #!/usr/bin/env python # coding: utf-8 # 第一个列表为依赖组件和版本号,后面紧跟负责人名称 # 接着出现第二个以来组建列 ...

最新文章

  1. 按下开机键,计算机背后的故事
  2. 500行代码写一个俄罗斯方块游戏
  3. c++ fstream用得多不?_自动挡中的“手自一体”,其实很好用,但真正会用的不多...
  4. 「Self-driving: Perception」多传感器融合之Camera、Lidar 雷达融合
  5. 31、JAVA_WEB开发基础之servlet(2)
  6. 明明不胖,为什么你一直都喊着要减肥?
  7. ADO.NET_05_OracleDataReader
  8. 报错:‘nodemon‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  9. java怎么让遮罩层下面滚动_vue项目弹出层后禁止body底层的滚动事件
  10. Crystal Report在.net中的两种显示方式
  11. Java泛型通配符T,E,K,V
  12. python chardet_【已解决】windows下,安装python的chardet
  13. 点击开始十秒倒计时html,十秒倒计时案例.html
  14. 【学习笔记】傅里叶变换: 方形函数,三角函数
  15. GTP-3算法是一种“暴力美学”的胜利
  16. PPT居然还可以一键换色!学会这4招再也不怕色了……
  17. MySQL查询——为表和字段取别名
  18. C语言 入门教程||C语言 指针||C语言 字符串
  19. 华为数通笔记-ISIS基础
  20. 洛谷三月月赛——P5238 整数校验器

热门文章

  1. 测试自动化普遍存在的问题
  2. 5.微服务设计 --- 分解单块系统
  3. 1.Linux性能诊断 --- 入门命令100条
  4. 35. 后台模块开发(2)
  5. css3中transform-style的用法
  6. 【专家访谈】测试专家 - 陈林钧 访谈记录整理汇总
  7. 对web应用构成安全威胁的错误漏洞
  8. java 面试基础总结(二)---多线程
  9. 令前端工程师追捧的一款前端开发IDE工具WebStorm
  10. 20/23种设计模式---C++实现