欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件金字塔软件问题提交 → [求助]信号失效问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有4682人关注过本帖树形打印复制链接

主题:[求助]信号失效问题

帅哥哟,离线,有人找我吗?
wenarm
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26631 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2016/8/11 16:00:48 [显示全部帖子]

a:CROSS(EXITPRICE,C) AND FLAG=1

通过这个方式输出你的条件,看是否成立,成立是1,不成立是0.

不成立的话,将条件拆分后输出,看具体是哪一项条件不成立

进一步去分析自己的代码



编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26631 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2016/8/11 16:24:38 [显示全部帖子]

这个一个调试方法。不符合,你就接着找上面的条件。找的具体想进行分析判断。

或者你贴出完整的代码。



编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26631 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2016/8/12 9:04:05 [显示全部帖子]

作为标志位的flag。一般都是全局变量,你在代码的开头将其声明为全局变量就可以了。

VARIABLE:flag=2;//由于你的源码中flag的状态是在一定条件下的。所以未将其初始化为0,防止对代码起到影响。给其一个其他值



编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26631 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2016/8/12 12:27:12 [显示全部帖子]

你的条件恒不成立、

KDYL:HHV(H,ENTERBARS)-ENTERPRICE;
KKYL:ENTERPRICE-LLV(L,ENTERBARS);
KDZY:FLOOR(KDYL*(1-P/100));

KKZY:CEILING(KKYL*(1-P/100));

上面4个变量和cond:ENTERPRICE*0.05;比较。使用都是不成立,你自己输出你的变量,比较看下。



编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26631 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2016/8/16 15:18:20 [显示全部帖子]

首先你要先理解你的代码逻辑。并且需要具备调试的方法。

你上面的问题中,如果你触发了条件,那么在后面的语句中,flag是会被修改的。

你自己尝试使用debugfile进行调试你的代码。



编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26631 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2016/8/16 17:15:06 [显示全部帖子]

IF HOLDING<0 AND ENTERBARS>0 AND 开空最大盈利>0 AND C>开空止盈点位 THEN //开空移动止损
   BEGIN
      //SELLSHORT(1,手数,LIMITR,ENTERPRICE-KKZY);
      平空1:SELLSHORT(1,手数,MARKET);
      FLAG := 1;
   END
   ELSE
   BEGIN
      平空0:SELLSHORT(平空条件 AND HOLDING<0,手数,LIMITR,MA1);//SELLSHORT(平空条件 AND HOLDING<0,手数,MARKET);
      FLAG:=0;
   END
IF HOLDING>0 AND ENTERBARS>0 AND 开多最大盈利>0 AND C<开多止盈点位 THEN  //开多移动止损
   BEGIN
      //SELL(1,手数,LIMITR,KDZY+ENTERPRICE);
      平多1:SELL(1,手数,MARKET);
      FLAG:=1;
   END
   ELSE
   BEGIN
      平多0:SELL(平多条件 AND HOLDING>0,手数,MARKET);
      FLAG:=0;
   END

 

你上面的代码中IF HOLDING<0 AND ENTERBARS>0 AND 开空最大盈利>0 AND C>开空止盈点位 条件正常并且flag为1。

但是到IF HOLDING>0 AND ENTERBARS>0 AND 开多最大盈利>0 AND C<开多止盈点位 THEN  //开多移动止损

这个条件不成立时,执行你的这个else语段,那么久是黄色标注的位置,又将其置为0

     



编程无捷径,技巧靠积累。
 回到顶部