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

[文华源码] 下单组件"挂价发出委托,3秒不成交的话撤单,以对价再发出委托" 源码[文华财经公式]

[文华源码] 下单组件"挂价发出委托,3秒不成交的话撤单,以对价再发出委托" 源码[文华财经公式]

下面这个下单组件,目的是实现“挂价发出委托,3秒不成交的话撤单,以对价再发出委托”,半年前我曾经发过到论坛,经过一个多星期的讨论和更新,最后文华员工的答复是软件存在BUG,没法实现~

现在不知道能不能实现,上星期再次测试,结果是模型可以发出开、平仓信号,但是没有发出任何具体委托。

因为,我这个下单组件,估计80%用文华实盘的人都会用到,到时候正常使用的话可以写到文华下单组件的示范里面供更多人使用~

源码如下:

  1. VAR Price,M,N;
  2. VAR BKID,SKID,BPID,SPID,SPKID1,BPKID1,SPKID2,BPKID2;//定义BKID,SKID,BPID,SPID
  3. VAR LastWithDrawFinsh;
  4. VAR LastState;
  5. VAR KNALL;//目标总开仓数
  6. VOID MAIN() //
  7. {
  8. //KPN设为按照模型信号
  9. M=0;//发出信号时,0为挂价委托,1为对价委托,>=2为超价委托
  10. N=1;//再委托的委托价参数,0为挂价委托,1为对价委托,>=2为超价委托
  11. Price=Price(F_DealCode());//
  12. BKID=ReadGlobalStr("BKID");
  13. SKID=ReadGlobalStr("SKID");
  14. BPID=ReadGlobalStr("BPID");
  15. SPID=ReadGlobalStr("SPID");
  16. BPKID1=ReadGlobalStr("BPKID1");
  17. SPKID1=ReadGlobalStr("SPKID1");
  18. BPKID2=ReadGlobalStr("BPKID2");
  19. SPKID2=ReadGlobalStr("SPKID2");
  20. KNALL=ReadGlobal("KNALL");
  21. //下面是3秒没有成交,撤单。
  22. LastWithDrawFinsh=ReadGlobal("LASTWITHDRAW");
  23. IF(T_IsNoOrder()!=1 ) //有挂单的情况
  24. {
  25. //查询挂单然后进行撤单
  26.   IF(CurrentTime()-LastOrderTime()==3 && LastWithDrawFinsh==1) //如果3秒有委托未成交,全撤,下次进入会重新下委托
  27.   {
  28.    IF(F_Sig()==BK) //如果取出的信号为BP
  29.    {
  30.     IF(T_IsNoOrder()==0)
  31.     {
  32.      MessageOut("BK撤单到了!");
  33.      T_DeleteOrder(BKID);
  34.      LastState=0;
  35.     //
  36.     }
  37.    }
  38.    IF(F_Sig()==SK) //如果取出的信号为SP
  39.    {
  40.     IF(T_IsNoOrder()==0)
  41.     {
  42.      MessageOut("SK撤单到了!");
  43.      T_DeleteOrder(SKID);
  44.      LastState=0;
  45.     }
  46.    }
  47.    IF(F_Sig()==BP) //如果取出的信号为BP
  48.    {
  49.     IF(T_SellPosition(F_DealCode())>0&&T_IsNoOrder()==0)
  50.     {
  51.      MessageOut("BP撤单到了!");
  52.      T_DeleteOrder(BPID);
  53.      LastState=0;
  54.     //
  55.     }
  56.    }
  57.    IF(F_Sig()==SP) //如果取出的信号为SP
  58.    {
  59.     IF(T_BuyPosition(F_DealCode())>0&&T_IsNoOrder()==0)
  60.     {
  61.      MessageOut("SP撤单到了!");
  62.      T_DeleteOrder(SPID);
  63.      LastState=0;
  64.     }
  65.    }


  66.    IF(F_Sig()==SPK) //如果取出的信号为SP
  67.    {
  68.     IF(T_IsNoOrder()==0)
  69.     {
  70.      MessageOut("SPK撤单到了!");
  71.      T_DeleteOrder(SPKID1);
  72.      T_DeleteOrder(SPKID2);
  73.      LastState=0;
  74.     }
  75.    }
  76.    IF(F_Sig()==BPK) //如果取出的信号为BP
  77.    {
  78.     IF(T_IsNoOrder()==0)
  79.     {
  80.      MessageOut("BPK撤单到了!");
  81.      T_DeleteOrder(BPKID1);
  82.      T_DeleteOrder(BPKID2);
  83.      LastState=0;
  84.     //
  85.     }
  86.    }



  87.    LastWithDrawFinsh=0;
  88.   }
  89. WriteGlobal("LASTWITHDRAW", LastWithDrawFinsh);
  90. RETURN;
  91. }
  92. LastWithDrawFinsh=1;
  93. IF(F_FreshSig()==1)//刷新现有的信号,有新信号
  94. {
  95.   SEND();
  96. }
  97. ELSE IF(F_FreshSig()==0)//如果是处理过的信号
  98. {
  99.   IF((T_OrderState(BKID)==2||T_OrderState(SKID)==2||T_OrderState(BPID)==2||T_OrderState(SPID)==2||T_OrderState(BPKID1)==2||T_OrderState(SPKID1)==2||T_OrderState(BPKID2)==2||T_OrderState(SPKID2)==2||T_OrderState(BKID)==3||T_OrderState(SKID)==3||T_OrderState(BPID)==3||T_OrderState(SPID)==3||T_OrderState(BPKID1)==3||T_OrderState(SPKID1)==3||T_OrderState(BPKID2)==3||T_OrderState(SPKID2)==3)&&LastState==0)//如果委托撤单
  100.   {
  101.    RESEND();
  102.    LastState=1;
  103.   }
  104. }
  105. WriteGlobalStr("BKID",BKID);
  106. WriteGlobalStr("SKID",SKID);
  107. WriteGlobalStr("BPID",BPID);
  108. WriteGlobalStr("SPID",SPID);
  109. WriteGlobalStr("BPKID1",BPKID1);
  110. WriteGlobalStr("SPKID1",SPKID1);
  111. WriteGlobalStr("BPKID2",BPKID2);
  112. WriteGlobalStr("SPKID2",SPKID2);
  113. WriteGlobal("LASTSTATE", LastState);
  114. WriteGlobal("LASTWITHDRAW", LastWithDrawFinsh);
  115. WriteGlobal("KNALL",KNALL);

  116. }

  117. VOID SEND()
  118. {
  119. IF(F_Sig()==BPK && F_SigValid()==1) //如果取出的信号为BPK 且信号不是消失状态
  120. {
  121.   IF(F_SellPosition()!=0)
  122.   {
  123.    MessageOut("信号BPK生效,平掉所有卖仓");
  124.    BPKID1=T_ReduceSellOpiTo(F_DealCode(), Offers(F_DealCode(),"bid1")+MinPrice(F_DealCode())*M,0); //平掉所有空头持仓
  125.   }
  126.   IF(F_BuyPosition()>=0)//
  127.   {
  128.    MessageOut("信号BPK生效,开仓");
  129.                   KNALL=F_SigVol()+F_BuyPosition();
  130.    BPKID2=T_AddBuyOpiTo(F_DealCode(), Offers(F_DealCode(),"bid1")+MinPrice(F_DealCode())*M,F_SigVol()+F_BuyPosition()); //补充持仓
  131.                  
  132.   }
  133. }
  134. IF(F_Sig()==SPK && F_SigValid()==1) //如果取出的信号为SPK 且信号不是消失状态
  135. {
  136.   IF(F_BuyPosition()!=0)
  137.   {
  138.    SPKID1=T_ReduceBuyOpiTo(F_DealCode(), Offers(F_DealCode(),"ask1")-MinPrice(F_DealCode())*M,0); //平掉所有多头持仓
  139.   }
  140.   IF(F_SellPosition()>=0) //如果买仓为0,不存在止赢止损问题,直接开仓
  141.   {
  142.                   KNALL=F_SigVol()+F_SellPosition();
  143.    SPKID2=T_AddSellOpiTo(F_DealCode(), Offers(F_DealCode(),"ask1")-MinPrice(F_DealCode())*M,F_SigVol()+F_SellPosition()); //补充空头持仓
  144.   }  
  145. }
  146. IF(F_Sig()==BP && F_SigValid()==1) //如果取出的信号为BP 且信号不是消失状态
  147. {
  148.   IF(F_SellPosition()!=0)
  149.   {
  150.    MessageOut("信号BP生效,平掉所有卖仓");
  151.    BPID=T_ReduceSellOpiTo(F_DealCode(), Offers(F_DealCode(),"bid1")+MinPrice(F_DealCode())*M,0); //平掉所有空头持仓
  152.   }
  153. }

  154. IF(F_Sig()==SP && F_SigValid()==1) //如果取出的信号为SP 且信号不是消失状态
  155. {
  156.   IF(F_BuyPosition()!=0)
  157.   {
  158.    SPID=T_ReduceBuyOpiTo(F_DealCode(), Offers(F_DealCode(),"ask1")-MinPrice(F_DealCode())*M,0); //平掉所有多头持仓
  159.   }
  160. }


  161. IF(F_Sig()==BK && F_SigValid()==1) //如果取出的信号为BK 且信号不是消失状态
  162. {
  163.   
  164.   IF(F_BuyPosition()>=0 && F_SellPosition()==0)//判断是不是部分成交
  165.   {
  166.    MessageOut("信号BK生效,开仓");
  167.                   KNALL=F_SigVol()+F_BuyPosition();
  168.    BKID=T_AddBuyOpiTo(F_DealCode(), Offers(F_DealCode(),"bid1")+MinPrice(F_DealCode())*M,F_SigVol()+F_BuyPosition()); //
  169.   }
  170. }

  171. IF(F_Sig()==SK && F_SigValid()==1) //如果取出的信号为SK 且信号不是消失状态
  172. {
  173.   
  174.   IF(F_SellPosition()>=0 && F_BuyPosition()==0) //如果买仓为0,不存在止赢止损问题,直接开仓
  175.   {
  176.                   KNALL=F_SigVol()+F_SellPosition();
  177.    SKID=T_AddSellOpiTo(F_DealCode(), Offers(F_DealCode(),"ask1")-MinPrice(F_DealCode())*M,F_SigVol()+F_SellPosition()); //
  178.   }  
  179. }
  180. }


  181. VOID RESEND()
  182. {
  183. IF(F_Sig()==BPK && F_SigValid()==1) //如果取出的信号为BPK 且信号不是消失状态
  184. {
  185.   IF(F_SellPosition()!=0)
  186.   {
  187.    MessageOut("信号BPK生效,平掉所有卖仓");
  188.    BPKID1=T_ReduceSellOpiTo(F_DealCode(), Offers(F_DealCode(),"bid1")+MinPrice(F_DealCode())*N,0); //平掉所有空头持仓
  189.   }
  190.   IF(F_BuyPosition()<=KNALL)//判断是不是部分成交
  191.   {
  192.    MessageOut("信号BPK生效,开仓");
  193.    BPKID2=T_AddBuyOpiTo(F_DealCode(), Offers(F_DealCode(),"bid1")+MinPrice(F_DealCode())*N,KNALL); //补充持仓
  194.   }
  195. }
  196. IF(F_Sig()==SPK && F_SigValid()==1) //如果取出的信号为SPK 且信号不是消失状态
  197. {
  198.   IF(F_BuyPosition()!=0)
  199.   {
  200.    SPKID1=T_ReduceBuyOpiTo(F_DealCode(), Offers(F_DealCode(),"ask1")-MinPrice(F_DealCode())*N,0); //平掉所有多头持仓
  201.   }
  202.   IF(F_SellPosition()<=KNALL) //如果买仓为0,不存在止赢止损问题,直接开仓
  203.   {
  204.    SPKID2=T_AddSellOpiTo(F_DealCode(), Offers(F_DealCode(),"ask1")-MinPrice(F_DealCode())*N,KNALL); //补充空头持仓
  205.   }  
  206. }
  207. IF(F_Sig()==BP && F_SigValid()==1) //如果取出的信号为BP 且信号不是消失状态
  208. {
  209.   IF(F_SellPosition()!=0)
  210.   {
  211.    MessageOut("信号BP生效,平掉所有卖仓");
  212.    BPID=T_ReduceSellOpiTo(F_DealCode(), Offers(F_DealCode(),"bid1")+MinPrice(F_DealCode())*N,0); //平掉所有空头持仓
  213.   }
  214. }

  215. IF(F_Sig()==SP && F_SigValid()==1) //如果取出的信号为SP 且信号不是消失状态
  216. {
  217.   IF(F_BuyPosition()!=0)
  218.   {
  219.    SPID=T_ReduceBuyOpiTo(F_DealCode(), Offers(F_DealCode(),"ask1")-MinPrice(F_DealCode())*N,0); //平掉所有多头持仓
  220.   }
  221. }


  222. IF(F_Sig()==BK && F_SigValid()==1) //如果取出的信号为BK 且信号不是消失状态
  223. {
  224.   
  225.   IF(F_BuyPosition()<=KNALL && F_SellPosition()==0)//判断是不是部分成交
  226.   {
  227.    MessageOut("信号BK生效,开仓");
  228.    BKID=T_AddBuyOpiTo(F_DealCode(), Offers(F_DealCode(),"bid1")+MinPrice(F_DealCode())*N,KNALL); //补多仓
  229.   }
  230. }

  231. IF(F_Sig()==SK && F_SigValid()==1) //如果取出的信号为SK 且信号不是消失状态
  232. {
  233.   
  234.   IF(F_SellPosition()<=KNALL && F_BuyPosition()==0) //如果买仓为0,不存在止赢止损问题,直接开仓
  235.   {
  236.    SKID=T_AddSellOpiTo(F_DealCode(), Offers(F_DealCode(),"ask1")-MinPrice(F_DealCode())*N,KNALL); //补空仓
  237.   }  
  238. }
  239. }
复制代码

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   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

返回列表