设计

来源:互联网 发布:域名是什么意思 编辑:程序博客网 时间:2024/04/27 18:58

  n =num*quanty

   open = history_bars(stock,n,'1m', 'open')

   close = history_bars(stock,n,'1m', 'close')

   high = history_bars(stock,n,'1m', 'high')

   low = history_bars(stock,n,'1m', 'low')

   df = DataFrame(index=('open', 'close', 'high','low'))

   for i in range(num):

       openprice = open[i*quanty]

       closeprice = close[(i+1)*quanty-1]

       lowprice = np.min(low[i*quanty:(i+1)*quanty-1])

       highprice = np.max(high[i*quanty:(i+1)*quanty-1])

       df[i] =pd.Series({'open':openprice,'close':closeprice,'high':highprice,'low':lowprice})

   df = df.T

   return df

大致设计:

 

目前代码设计比较松散,很多接口都没考虑清楚,暂时大致参考的是华西期货的一个接口,将系统大致定义为下面几个模块:

 

 Api - >Trader ->Strategy ->StrategyExe -> Api

 Api - >InstrumentMgr

 

 1.每个Trader,会唯一创建一个Api实例(置于ApiInfo 这个对象里).

 2.Api 收到回报(行情回报和交易回报), 会把回报转发给Trader.

 3.Trader 负责把消息 转发给Strategy.

 4.Strategy 需要下订单,或者取消订单的时候,生成 Signal(信号) 把消息发送给StrategyExe.

 5.StrategyExe负责 订单的重发和追单的逻辑。 StrategyExe执行完后,回报Signal 消息 给 Strategy.

 6.indexCal:(指标计算,未实现)

 

 系统虽然是按消息设计的,但是每个对象之间又是很紧的耦合, 从上面任何一个对象,可以通过指针指到另外的对象。。。。

 这一块到时候统一处理。稳定后会把 消息的架构去掉,进一步提高性能。

 

 系统每一个Trader ,有一个线程,每一个Strategy,会有一个线程负责执行。以后可能会改为更灵活的形式,把Trader,和

 Strategy都抽象为状态机。由统一的计算资源负责计算。

 

 

 

代码目录结构:

instrument_info.cpp:InstrumentMgR  : 合约管理。提供合约相关的信息查询,包括行情数据(api回报 像 InstrumentMgr 推送数据)

position.cpp       : PositonMgr     : 策略持仓管理。应该是一个Trader 拥有一个PositionMgr.(多个策略,会有自己的持仓管理)

message_pool.cpp                    : 由于消息在对个执行对象中传递,目前还没有去free消息。 到时候所有的消息,全部由message_pool自动清理。

ordertrack.cpp                      : 跟踪一个订单状态的结构

Signal.cpp                          : 策略,或者指标 负责生成信号。给*策略执行,和策略之间,抽象了一个信号,用于将来解耦和 strategyExe<->signal<->strategy

api_trade.cpp                       : 交易接口的封装,负责吧交易回报转发给Trader;

api_quote.cpp                       : 行情接口的封装,负责吧行情回报转发给Trader;       

global.cpp                          : 系统的一些全局变量。将来都要解耦处理,暂时编程方便,都放这里。

conf.json                           : 代码的配置文件,配置分为离线,和在线。默认运行离线的测试账号

 


0 0
原创粉丝点击