以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://www.weistock.com/bbs/list.asp?boardid=2)
----  有没有办法让策略等待成交回报后再继续下一行代码?  (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=183688)

--  作者:weishao
--  发布时间:2020/12/30 15:20:00
--  有没有办法让策略等待成交回报后再继续下一行代码?
策略运行于序列模式:
//代码如下:
//15多开仓:
L15D:=15SS;
//-------------添加K线未结束就-----开多仓---------语句开始:-----------//
//IF ISLASTBAR=1 THEN
BEGIN
IF (昨空头排列=1 AND 日EMA5>日EMA26) THEN 
BEGIN
多开仓次数:=IF(上穿转上叉位=1,EXTGBDATA(后名日BAR上叉多次),0);
IF 多开仓次数<1 AND 上穿转上叉位=1 THEN
BEGIN
转上叉时BUFF:=EXTGBDATA(后名日BAR上叉时);
IF 转上叉时BUFF=0 THEN 
BEGIN
EXTGBDATASET(后名日BAR上叉时,TIMETOT0(DYNAINFO(207))); //上穿时的时间
END
转上叉时:=EXTGBDATA(后名日BAR上叉时),COLORGRAY,NODRAW;
//信号出现后60秒且最新价超过转上叉位(即做多信号保持),开多:
开多价格条件:=DYNAINFO(7)>转上叉位;//上穿转上叉位=1;//CLOSE>转上叉位;//KD15=1变为价格条件
开多仓位条件:=(品种全买持=0 OR 品种全卖持>0);
开多时间条件:=多开仓次数<1 AND (TIMETOT0(DYNAINFO(207))-转上叉时>60 OR TIMETOT0(TIME)-TIMETOT0(DYNAINFO(207))<60);
15多开多条件:=开多价格条件=1 AND 开多仓位条件=1 AND 开多时间条件=1;
开前多持:=品种全买持;
开前空持:=品种全卖持;
15多:TBUY(15多开多条件=1,L15D,LMT,DYNAINFO(7)+MINDIFF,0);//发出开多指令
开后多持:=品种全买持;
开前空持:=品种全卖持;
IF 多开仓次数<1 AND 开后买持>开前买持 THEN //15多开多条件=1 THEN                                                                      
BEGIN                        
EXTGBDATASET(后名日BAR上叉多次,1);
EXTGBDATASET(后名日BAR上叉买价,DYNAINFO(7)+MINDIFF);
EXTGBDATASET(后名日BAR上叉成时,TIMETOT0(DYNAINFO(207)));
END
END
上买价:=EXTGBDATA(后名日BAR上叉买价),COLORRED,NODRAW;
上成时:=EXTGBDATA(后名日BAR上叉成时),COLORBROWN,NODRAW;
多开仓次数:=EXTGBDATA(后名日BAR上叉多次);
//当K线开多仓后,如果收盘后信号消失, 下根K线卖出平仓恢复仓位?
END
END

//交易日志如下:
2020-12-29 22:53:59.196    【后台】J05 TBuy 第 159 行 策略:<15M昨排叉分盈未.后台> 出现信号
2020-12-29 22:53:59.196    【后台】J05 TBuy 已成功触发下单操作 价格:2807.500000 数量:3 类型:0 账户: 品种:J05
2020-12-29 22:53:59.196    【后台】下单已发送
2020-12-29 22:53:59.218    【后台】J05 运行结束
2020-12-29 22:53:59.218    【下单】J05 价2807.500000 量3 买卖0 类型0 开平0 账户180655 Formula 1
2020-12-29 22:53:59.219    【下单】确认报单已发送 ID=751729192 RefID = 1460
2020-12-29 22:53:59.231    【指令】收到回报指令 ID = 751729192 RefID = 1460
2020-12-29 22:53:59.231    【回报】180655 : j2105 - 已报单 3 价格:2807.5 开 买
2020-12-29 22:53:59.231    【指令】收到回报指令 ID = 751729192 RefID = 1460
2020-12-29 22:53:59.263    【指令】收到成交回报指令 REFID = 1460 vol = 3
2020-12-29 22:53:59.263    【回报】180655 : j2105 - 已成交 3 价格:2807.0 开 买
//下面的语句没有执行是因为: 刚发单,策略已经运行结束了,多开仓次数=0,有没有办法让策略等待成交回报后再继续下一行代码?
IF 多开仓次数<1 AND 开后买持>开前买持 THEN //15多开多条件=1 THEN                                                                      
BEGIN                        
EXTGBDATASET(后名日BAR上叉多次,1);
EXTGBDATASET(后名日BAR上叉买价,DYNAINFO(7)+MINDIFF);
EXTGBDATASET(后名日BAR上叉成时,TIMETOT0(DYNAINFO(207)));
END




--  作者:banzhuan
--  发布时间:2020/12/30 15:32:39
--  
您是就运行单个策略,还是有多个策略同时运行呢?  函数中有个sleep 函数,可以延迟一定时间发单,缺点是对多个策略同时生效。
--  作者:weishao
--  发布时间:2020/12/30 16:31:31
--  
开发一个可以单策略sleep的或者成交回报的函数