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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → [求助]如何实现在逐K线模式在1根K线内只执行一次符合条件的指令

   

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


  共有5320人关注过本帖平板打印复制链接

主题:[求助]如何实现在逐K线模式在1根K线内只执行一次符合条件的指令

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


加好友 发短信
等级:新手上路 帖子:25 积分:273 威望:0 精华:0 注册:2009/12/1 10:57:10
[求助]如何实现在逐K线模式在1根K线内只执行一次符合条件的指令  发帖心情 Post By:2011/12/30 10:08:56    Post IP:123.184.35.196[只看该作者]

求助,根据ADMIN的建议,写了如下测试用策略,

实现目的:要求逐K线模式下在符合条件的1根K线内只执行一次符合条件的指令

(符合条件的K线中,要求只执行一次报警声音)

程序中有一处不解:为何单步执行到VCountAlert:= barpos之后时,在调试窗口看此值仍为0,并未被赋值,

结果在当前K线一直符合条件的过程中,下一条件VCountAlert<>barpos也始终=1,接着就执行了下面的不停

报警声音的过程.

程序如下:请高手解答,或有其他方式实现.

 

 

//===========================================================
//测试用策略,分笔回放测试,在1分钟图表中,橡胶1205
//突破前10周期高点开多,突破前10周期低点开空
//===========================================================
GLOBALVARIABLE: VCountAlert=0;//申明一个全局变量,用于控制过滤
runmode:0;                               //逐K线模式
VOpenPrice:=open;                        //定义开仓价
VC:=ref(close,1);                        //定义前收盘
VH:=ref(hhv(high,10),2);                 //前10周期最高
VL:=ref(llv(low,10),2);                  //前10周期最低 
//===========================================================
//画高低线
ViewVH:VH,linethick1,coloryellow;
ViewVL:VL,linethick1,colorblue;
//===========================================================
//前收盘大于10周期高点则平空开多
if VC>VH then
begin
  if holding<0 then sellshort(1,0,limitr,VOpenPrice);{平空}
  if holding=0  then
  begin
    buy(1,1,limitr,VOpenPrice);                      {开多}
    if islastbar and VCountAlert<>barpos
    then
    begin
      //此处赋值语句在调试窗口单步执行完后看此值为0,不解,造成当前K线不能实现执行一次此过程的目的.
      VCountAlert:= barpos;
     //同上,在当前K线当中声音报警语句还是被不停在执行直到当前K线结束
      playsound(1,'.\Alarm.wav');
    end;
  end;
end;
//===========================================================
//前收盘小于10周期低点则平多开空
if VC<VL then
begin
  if holding>0 then sell(1,0,limitr,VOpenPrice);    {平多}
  if holding=0 then
  begin
    buyshort(1,1,limitr,VOpenPrice);                {开空}
    if islastbar and VCountAlert<>barpos
    then
    begin
      //此处赋值语句在调试窗口单步执行完后看此值为0,不解,造成当前K线不能实现执行一次此过程的目的.
      VCountAlert:= barpos;         
      //同上,在当前K线当中声音报警语句还是被不停在执行直到当前K线结束
      playsound(1,'.\Alarm.wav');    
    end; 
  end;
end;
//===========================================================
//显示计数器
ViewVCountAlert:VCountAlert,linethick0,coloryellow;

//===========================================================
 

[此贴子已经被作者于2011-12-30 10:14:08编辑过]

 回到顶部