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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件金字塔软件问题提交 → 请帮忙提供一个完整的移动止损代码

   

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


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

主题:请帮忙提供一个完整的移动止损代码

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


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

工作人员给你的4楼的代码逻辑上没有问题。如果你希望开仓当根k止盈有效,直接把TENTERBARS>0的限制,改成TENTERBARS>=0;
建议你对上面的代码加debugfile输出各项的具体值,建议你还是采用4楼的方式,因为你已经熟悉了那部分代码(而不是自己认为的手动算。)(图表和后台都采用debugfile这种方式进行跟踪调试输出)
GLOBALVARIABLE函数会在软件重启或者后台程序化重启时,从新初始计算。

下面另外一种写法,其核心处理方式和4楼中的采用的方式相同。唯一的区别是对EXTGBDATASET定义的全局变量的控制,以及ext定义的全局变量类似写文件记录的方式。。空头部分自行实现。
如果你正常平掉全部持仓,需要将A置为0 。
if 平多条件 then begin
TSELL(1,TBUYHOLDINGEX( '',''  ,1),MKT);
EXTGBDATASET( 'a',0); 
end
//移动止损模块部分*******************************
//A有三种数值状态:1,0,最新价;
//当A=1时表示当前有持仓,A=0时表示移动止损执行完毕,A=最新价时用于比较价格是否回落
//将A赋值为1,表示当前有持仓
IF TBUYHOLDINGEX( '','' ,0 )>0 AND EXTGBDATA('a' )=0 THEN BEGIN
EXTGBDATASET( 'a',1 );
END
//使A始终表示监控开始后的最高价
IF DYNAINFO(  7)>EXTGBDATA('a' ) and EXTGBDATA('a' )>0 THEN BEGIN
EXTGBDATASET( 'a',DYNAINFO(  7));
END

//发现价格回落止损,并将A赋值为0表示移动止损动作完成
star:=EXTGBDATA('a' )-TAVGENTERPRICEEX2( '','' ,0 );//多头持仓均价和开仓以来的记录的价格进行比较,用于判断是否满足活力超出50个变动价位。
IF star>=50*MINDIFF and EXTGBDATA('a' )-DYNAINFO(  7)>=0.2*star  and EXTGBDATA('a' )>0 THEN BEGIN
TSELL(1,1,MKT );
EXTGBDATASET( 'a',0);
END
[此贴子已经被作者于2017/12/6 19:36:39编辑过]


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


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

语法逻辑上没有问题。建议你针对各个模块独立测试,最后在合并、遵循迭代方式写代码。便于跟踪分析异常问题原因。
//空头固定止盈条件判断********
ZYCOND2:TAVGENTERPRICEEX2( '','',1)-DYNAINFO(7)>=500*MINDIFF;//写错了应该是50吧

移动止盈部分,如果多空同时使用。需要主要,全局变量记录不能一样,否者会互相干扰。你上面都是用aa表示的
还有这个中间变量多空也要区分开。分属不同代码段的变量尽量不要混在一起。
star:=TAVGENTERPRICEEX2( '','' ,1 )-EXTGBDATA('aa' );//







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


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

IF TSELLHOLDINGEX( '','' ,1 )>0 AND EXTGBDATA('aa' )=0 THEN BEGIN
EXTGBDATASET( 'aa',DYNAINFO(7));
END
//使A始终表示监控开始后的最高价
IF DYNAINFO(7)<EXTGBDATA('aa' ) and EXTGBDATA('aa' )>0 THEN BEGIN
EXTGBDATASET( 'aa',DYNAINFO(7));
END

//debugfile的两种方式,第二种是将数值转换为字符串组合到一起,适合一次输出多个变量结果

DEBUGFILE('D:\TEST.TXT','1当前持仓为%.2f',TSELLHOLDINGEX( '','' ,1 ));
DEBUGFILE('D:\TEST.TXT','2当前持仓为'&NUMTOSTR(TSELLHOLDINGEX( '','' ,1 ),0),0);



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