: | : | :期货量化学习 | :期货量化 |
返回列表 发帖

CTP示例程序下载地址【百度网盘】

CTP示例程序下载地址【百度网盘】

百度网盘链接:https://pan.baidu.com/s/16FC5BCnCkho24YiYQvozUg    提取码:8t1s

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

此C++实例程序的核心策略为网格策略,近期会增加策略说明及程序核心代码,希望大家来讨论一下,集思广益,提出您宝贵的意见。程序版本会不断更新,详见网盘中说明文档。

TOP

策略:(多方向)
1、快均线与慢均线金叉即做多方向。
2、首次开仓间隔15秒左右,即时价格小于15秒之前价格,开多仓,开仓头寸为配置文件中参数设置的一个基本持仓单元。
3、按照首次开仓价格向下铺设网格,网格大小固定,可以在配置文件中设定。首次开仓为1级持仓,增仓依次为2/3/4/5/6...级持仓,增仓不得大于设定的最大级数。
4、价格下滑至开仓级别对应的下一级网格线,即增开多仓,增仓头寸为配置文件中参数设置的一个基本持仓单元。
5、达到盈利目标即平仓,或者达到止损即平仓。

TOP

  1. /*网格策略入口*/
  2.         bool Entry(const CDataNodV2 & pData, CTradeInfo & OneTrade, bool bOnSimulation)
  3.         {
  4.                 /*1:OneTrade初始化*/
  5.                 OneTrade.Init();

  6.                 /*2:捕获该合约的最小变动和乘数*/
  7.                 m_MinMove = CCTPInfo::GetInstance().GetMinMove(pData.TypeIndex);
  8.                 if (m_MinMove <= 0.0)
  9.                 {
  10.                         CLogFile::DumpSystem("Error:The GetMinMove Function Does Not Capture The MinMove!");
  11.                         return false;
  12.                 }
  13.                 m_Multiple = CCTPInfo::GetInstance().GetMultiple(pData.TypeIndex);
  14.                 if (m_Multiple <= 0.0)
  15.                 {
  16.                         CLogFile::DumpSystem("Error:The GetMultiple Function Does Not Capture The Multiple!");
  17.                         return false;
  18.                 }

  19.                 /*3:获取策略计算需要数据和判断值*/
  20.                 CDataManager& pDataManager = CDataManager::GetInstance();
  21.                 CIndicatorContainer& pIndicators = pDataManager.m_ColumnData.m_Indicators;
  22.                 double MASlowValue = pIndicators.MA_Slow_Deque[pData.TypeIndex].back();
  23.                 double MAFastValue = pIndicators.MA_Fast_Deque[pData.TypeIndex].back();
  24.                 if (MASlowValue <= 0) return false;
  25.                 if (MAFastValue <= 0) return false;
  26.                 SegmentSize = CConfigFile::GetInstance().m_SegmentSize;
  27.                 Interval = CConfigFile::GetInstance().m_Interval * 2;
  28.                 ProfitTarget = CConfigFile::GetInstance().m_ProfitTarget;
  29.                 LossLimit = CConfigFile::GetInstance().m_LossLimit;

  30.                 CurrTradingDay = CTime(pData.Time).GetDay();
  31.                 bIsTradingDayChanged = (CurrTradingDay != PrevTradingDay);
  32.                 PrevTradingDay = CurrTradingDay;

  33.                 if (bIsTradingDayChanged) { Counter = 0; }
  34.                 if (Counter >= 10000) { Counter = 0; }
  35.                 PriceOfCounter[Counter] = pData.LastPrice;
  36.                 bIsCounterGreaterThanInterval = (Counter >= Interval);
  37.                 bIsThisPriceLessThanPrevPriceCanBuy = false;
  38.                 bIsThisPriceGreaterThanPrevPriceCanSell = false;
  39.                 if (bIsCounterGreaterThanInterval)
  40.                 {
  41.                         bIsThisPriceLessThanPrevPriceCanBuy = (PriceOfCounter[Counter] < PriceOfCounter[Counter - Interval]);
  42.                         bIsThisPriceGreaterThanPrevPriceCanSell = (PriceOfCounter[Counter] > PriceOfCounter[Counter - Interval]);
  43.                 }
  44.                 Counter++;

  45.                 /*4:检查持仓情况*/
  46.                 CHoldManager& pHoldManager = CHoldManager::GetInstance();
  47.                 map<int, CTradeInfo>& pHoldMap = pHoldManager.m_Hold;
  48.                 int Lots = CConfigFile::GetInstance().m_Lots;

  49.                 int HoldingIndex_buy = pData.TypeIndex * 10000 + buy;
  50.                 bIsHolding_buy = (pHoldMap.find(HoldingIndex_buy) != pHoldMap.end());
  51.                 HoldingLevel_buy = 0;
  52.                 CurrProfit_buy = 0.0;
  53.                 if (bIsHolding_buy)
  54.                 {
  55.                         HoldingLevel_buy = pHoldMap[HoldingIndex_buy].Volumn / Lots;
  56.                         CurrProfit_buy = (pData.LastPrice - pHoldMap[HoldingIndex_buy].Price)*pHoldMap[HoldingIndex_buy].Volumn*m_Multiple;
  57.                 }
  58.                 bIsAllowedLevel_buy = (HoldingLevel_buy <= CConfigFile::GetInstance().m_MaxLevelAllowed);

  59.                 int HoldingIndex_sell = pData.TypeIndex * 10000 + sell;
  60.                 bIsHolding_sell = (pHoldMap.find(HoldingIndex_sell) != pHoldMap.end());
  61.                 HoldingLevel_sell = 0;
  62.                 CurrProfit_sell = 0.0;
  63.                 if (bIsHolding_sell)
  64.                 {
  65.                         HoldingLevel_sell = pHoldMap[HoldingIndex_sell].Volumn / Lots;
  66.                         CurrProfit_sell = (pHoldMap[HoldingIndex_sell].Price - pData.LastPrice)*pHoldMap[HoldingIndex_sell].Volumn*m_Multiple;
  67.                 }
  68.                 bIsAllowedLevel_sell = (HoldingLevel_sell <= CConfigFile::GetInstance().m_MaxLevelAllowed);

  69.                 int Type = CStockBase::GetStockTypeFromIndex(pData.TypeIndex);
  70.                 bool bTypeIsHolding = pHoldManager.m_TypeIsHolding[Type]; /*此合约所在的品种是否持仓,开仓时检查此合约所在的品种是否持仓*/


  71.                 /*调试代码:策略的关键数据,和Tick数据对照*/
  72.                 if (CConfigFile::GetInstance().m_bRunTestCode)//&& !bOnSimulation)
  73.                 {
  74.                         printf("当前Tick:");
  75.                         pData.PrintDataNodV2ToScreen();
  76.                         printf("慢均线值(10D)[%.2f]", MASlowValue);
  77.                         printf("快均线值(5D)[%.2f]", MAFastValue);
  78.                         printf("是否是新的交易日[%2d]", bIsTradingDayChanged);
  79.                         printf("\n");
  80.                         printf("间隔期[%d]", Interval);
  81.                         printf("计数器[%d]", Counter - 1);
  82.                         printf("计数器对应的价格[%.2f]", PriceOfCounter[Counter - 1]);
  83.                         printf("间隔前价格[%.2f]", PriceOfCounter[Counter - 1 - Interval]);
  84.                         printf("计数器是否大于间隔[%2d]", bIsCounterGreaterThanInterval);
  85.                         printf("是否可买[%2d]", bIsThisPriceLessThanPrevPriceCanBuy);
  86.                         printf("是否可卖[%2d]", bIsThisPriceGreaterThanPrevPriceCanSell);
  87.                         printf("\n");
  88.                         printf("bIsHolding_buy[%2d]", bIsHolding_buy);
  89.                         printf("bIsHolding_sell[%2d]", bIsHolding_sell);
  90.                         printf("HoldingLevel_buy[%2d]", HoldingLevel_buy);
  91.                         printf("HoldingLevel_sell[%2d]", HoldingLevel_sell);
  92.                         printf("CurrProfit_buy[%.2f]", CurrProfit_buy);
  93.                         printf("CurrProfit_sell[%.2f]", CurrProfit_sell);
  94.                         printf("\n");
  95.                         system("pause");
  96.                 }


  97.                 /*BUY方向的首次开仓信号*/
  98.                 if (MAFastValue > MASlowValue && !bIsHolding_buy && bIsCounterGreaterThanInterval && bIsThisPriceLessThanPrevPriceCanBuy)
  99.                 {
  100.                         OneTrade.tradetype = buy;
  101.                         OneTrade.Price = pData.S1;/*用申卖价买入*/
  102.                         OneTrade.openclosetype = open;
  103.                         sprintf(OneTrade.m_Dptr, "SegmentStrategy:OpenBuy");
  104.                         WritePublicInfoToTradeInfo(pData, OneTrade);
  105.                         FirstOpenBuyPrice = OneTrade.Price;
  106.                         Counter = 0;
  107.                         return true;
  108.                 }
  109.                 /*SELL方向的首次开仓信号*/
  110.                 if (MAFastValue < MASlowValue && !bIsHolding_sell && bIsCounterGreaterThanInterval && bIsThisPriceGreaterThanPrevPriceCanSell)
  111.                 {
  112.                         OneTrade.tradetype = sell;
  113.                         OneTrade.Price = pData.B1;/*用申买价卖出*/
  114.                         OneTrade.openclosetype = open;
  115.                         sprintf(OneTrade.m_Dptr, "SegmentStrategy:OpenSell");
  116.                         WritePublicInfoToTradeInfo(pData, OneTrade);
  117.                         FirstOpenSellPrice = OneTrade.Price;
  118.                         Counter = 0;
  119.                         return true;
  120.                 }
  121.                 /*BUY方向的追仓信号*/
  122.                 if (HoldingLevel_buy != 0 && bIsAllowedLevel_buy && (pData.LastPrice < FirstOpenBuyPrice - SegmentSize * m_MinMove * HoldingLevel_buy))
  123.                 {
  124.                         OneTrade.tradetype = buy;
  125.                         OneTrade.Price = pData.S1;/*用申卖价买入*/
  126.                         OneTrade.openclosetype = open;
  127.                         sprintf(OneTrade.m_Dptr, "SegmentStrategy:AddBuy-%d", HoldingLevel_buy);
  128.                         WritePublicInfoToTradeInfo(pData, OneTrade);
  129.                         return true;
  130.                 }
  131.                 /*SELL方向的追仓信号*/
  132.                 if (HoldingLevel_sell != 0 && bIsAllowedLevel_sell && (pData.LastPrice > FirstOpenSellPrice + SegmentSize * m_MinMove * HoldingLevel_sell))
  133.                 {
  134.                         OneTrade.tradetype = sell;
  135.                         OneTrade.Price = pData.B1;/*用申买价卖出*/
  136.                         OneTrade.openclosetype = open;
  137.                         sprintf(OneTrade.m_Dptr, "SegmentStrategy:AddSell-%d", HoldingLevel_sell);
  138.                         WritePublicInfoToTradeInfo(pData, OneTrade);
  139.                         return true;
  140.                 }
  141.                 /*BUY方向的退出信号*/
  142.                 if (bIsHolding_buy && (CurrProfit_buy >= ProfitTarget * HoldingLevel_buy || CurrProfit_buy <= LossLimit * -1))
  143.                 {
  144.                         OneTrade.tradetype = sell;
  145.                         OneTrade.Price = pData.B1;/*用申买价卖出*/
  146.                         OneTrade.openclosetype = close;
  147.                         sprintf(OneTrade.m_Dptr, "SegmentStrategy:CloseSell");
  148.                         WritePublicInfoToTradeInfo(pData, OneTrade);
  149.                         return true;
  150.                 }
  151.                 /*SELL方向的退出信号*/
  152.                 if (bIsHolding_sell && (CurrProfit_sell >= ProfitTarget * HoldingLevel_sell || CurrProfit_sell <= LossLimit * -1))
  153.                 {
  154.                         OneTrade.tradetype = buy;
  155.                         OneTrade.Price = pData.S1;/*用申卖价买入*/
  156.                         OneTrade.openclosetype = close;
  157.                         sprintf(OneTrade.m_Dptr, "SegmentStrategy:CloseBuy");
  158.                         WritePublicInfoToTradeInfo(pData, OneTrade);
  159.                         return true;
  160.                 }
  161.                 /*策略未执行,返回false*/
  162.                 return false;
  163.         }
复制代码

TOP

虽然看不懂是很厉害的样子。
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

系统程序更新至20200306版本

BETA.V6.3.15.20200306.X86_64

TOP

返回列表