分享

CTP初次接触五:多合约多策略的DEMO

 禁忌石 2017-04-13

    作为一个退役的码农,老是BB这些东西,真是讨厌,即不专业,又不有趣,可是我还是勇往直前的记录到第5篇,脸皮之厚难以想象。
 
    这个DEMO同样是VC++的控制台程序,程序实现了20个品种、两个策略。
    总的数据处理在DataSniffer.h文件,总的交易处理在MyTrader.h文件,因为是多品种和多策略,增加了几个文件。每一个品种对应一个品种的数据处理文件DataSniffer_A.h和DataSniffer_B.h;每个策略对应一个策略文件strategy_A.h,strategy_B.h。
[转载]CTP初次接触五:多合约多策略的DEMO

一、在程序入口

在入口文件里,保存了我们要交易的品种

char *ppInstrumentID[] = {  "i1601", "jm1601", "j1601", "rb1601","rb1501", "TA601", "l1601","ru1601", "ru1501", "jd1601", "RM601", "m1601","y1501", "p1501","ag1506","ag1412","cu1408","cu1601","IF1601","IF1407"};//行情订阅列表

和前面demo提到的一样,建立连接后,OnRtnDepthMarketData函数进行保存数据。

OnRtnDepthMarketData在文件MdSpi.cpp里,这次系统不但有tick数据,还计算了分钟K线的数据,还计算了日线的数据。

系统建立了一个两维数组tick_data[20][10],保存20个品种的连续tick的数据,这个数组还记录其它一些重要信息。系统对tick数据进行了文件保存,在TickData目录下。

系统还有Mn_open[]等数据,保存1分钟K线的数据,共保存了60分钟。没有进行文件保存。

系统还有Day_open[]等数据,保存日K线的数据。没有进行文件保存。

二、接着进行行情监控和交易

 while(RunMode) //实盘
 {
  Sniffer();//数据
  Trading();//交易
  Sleep(050);
 }
 
三、数据处理
Sniffer函数DataSniffer.h文件里,他进行数据的计算和给出交易信号,针对每个品种,都计算了两个策略的信号。
 for (int i = 0; i < 20; i++)//他是每个品种,都调用一下两个策略
 {
    ......
    Sniffer_A12(i);  //针对品种i,进行策略A的计算
    Sniffer_B12(i);  //针对品种i,进行策略B的计算
    ......
 
策略A的计算函数Sniffer_A12在文件DataSniffer_A.h里,计算逻辑是这样的:当早上9:10的1分钟K线收阳时,他将标志为设为1,即是做多信号。Sniffer_dataA[i][0] = 1;如果收阴,则是做空信号。
 
策略B的计算函数Sniffer_B12在文件DataSniffer_B.h里,策略B是一个tick级别的信号,上次DEMO里讲过,不展开。
四、交易处理
Trading函数进行交易处理,他在文件MyTrader.h里。
它针对每个品种,进行两个策略的交易处理。
 for (int i = 0; i < 20; i++)
 {
  StopEndTime_A(tick_data[i][2],i);//策略A的收盘前平仓
  StopEndTime_B(tick_data[i][2],i);//策略B的收盘前平仓
......
    StopLossA12(tick_data[i][2],i);  //策略A先进行止赢止损
    TraderA12(tick_data[i][2],i);  //策略A进行委托交易
......
    StopLossA12(tick_data[i][2],i);  //策略B先进行止赢止损
    TraderA12(tick_data[i][2],i);  //策略B进行委托交易
......
 
1、它先判断当前是不是快收盘了,如果快收盘了,平掉所有仓位。StopEndTime里有,还有一个持仓超过10分钟,主动平仓的功能。
 
2、StopLossA12的逻辑是这样:当达到一定赢利点数,他做止赢利。当亏损达到一定点数,则做止损。他是根据1分钟的数据进行处理的,相当于1分钟K线走完进行处理。这个1分钟K线变量Mn_open。
 
3、TraderA12的逻辑是这样:先判断之前是做多还是做空信号,如果是做多的信号(Sniffer_dataA[i][0] = 1),有反向单则先平掉反向单,然后开仓(此时系统又增加了一些判断和过滤条件)。
 
策略B的逻辑StopLossB12和TraderB12和上一篇中的demo是类似的。
 
 
五:几个细节
1:系统记录每次开平时的价格,并计算了每次的赢亏情况,保存在Day_CloseProfit、Trade_CloseProfit这些变量里。如果有需要,策略回测时,计算绩效也可以沿用相同的计算逻辑。
2:系统启动时,有读本地配置文件,关闭时也会写本地配置文件。这个日志,可以进行功能拓展,帮助系统恢复上次关闭时的策略状态。
 
系统启动起来是这样
[转载]CTP初次接触五:多合约多策略的DEMO

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多