CTP: NET封装后接口中序列化数据的问题

如果你用的是经过封装成CTP.dll的C#接口,需要对Order, Trade, depthMarketData,inputOrder,orderAction,inputOrderAction等数据进行本地序列化到硬盘,在C++的CTP文件中,往往没有对这些结构文件打可序列化的标识,那么,你在C#中,就没办法直接进行序列化。
那么你要么有二种方法:
1、选择C#重新封装一个类,格式和你需要内容完全一样,相当于COPY,但相当麻烦,不建议。
2、到生成CTP.dll的C++文件中,找到这些结构文件,然后在这些内容上加上[ Serializable ]。这样,然后,重新编译成新的CTP.dll, 让C#项目引用。
这里举几个例子:
C++文件中(我这里是Struct.h):

    [ Serializable ]
    public ref struct ThostFtdcOrderActionField
    [ Serializable ]
    public ref struct ThostFtdcTradeField
    [ Serializable ]
   public ref struct ThostFtdcDepthMarketDataField

需要说明的是,C++的重新编译时间可能略长,不要误认没有编译成功,等一下即可。
程序为: import copy import csv import datetime import os import re import sys import time from threading import Thread import Global_param as g from CTP_API import thosttraderapi as tdapi from CTP_API import thostmduserapi as mdapi from UserStruct import * def init_subID(): # 遍历所有策略,将所有策略的合约进行合并 for strategy in g.strategy_map.values(): g.subID = list(set(g.subID + strategy.subID)) # 如果策略需要订阅K线,方式:判断接收K线形态是否为空 if strategy.subKlineType: # 订阅K线ID,用来判断哪些合约需要合并 g.subKlineID = list(set(g.subKlineID + strategy.subID)) g.subKlineType = list(set(g.subKlineType + strategy.subKlineType)) # print(g.subKlineID, g.subKlineType) for instrumentID in g.subKlineID: g.klineMin_map[instrumentID] = BarData() # print(g.klineMin_map) # 获取tick并传递 def get_tick(): while True: pDepthMarketData = g.tickQueue.get() # 订阅合约成功后会有几个合约名为空的合约,需清理掉 if str(pDepthMarketData.InstrumentID) == '': continue # 如果不是7*24小时数据,需要进行数据清理 if '7*24' not in g.broker_name: today = datetime.datetime.now().strftime('%Y-%m-%d') stamp = today + " " + pDepthMarketData.UpdateTime timeArray = time.strptime(stamp, "%Y-%m-%d %H:%M:%S") timeStamp = int(time.mktime(timeArray)) now = int(time.time()) now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 时间戳之差超过1分钟即认为是无效数据 if abs(now - timeStamp) > 60: print(f"marketdata delay : ID:{pDepthMarketData.InstrumentID}, Stamp:{stamp}, Now:{now_time}") continue # if pDepthMarketData.InstrumentID == 'FG209': # g.start = time.time() t3 = Thread(target=distribute_tick, args=(pDepthMarketData,)) # print(id(t3)) t3.start() # 判断需要给哪些策略传tick,以及哪些合约需要合成min1 K线 def distribute_tick(pDepthMarketData): # 交易账户登录成功后,传递数据 if not g.tdLogin_flag: return
最新发布
04-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值