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


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

   

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


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

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

帅哥哟,离线,有人找我吗?
wenarm
  21楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]


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


加好友 发短信
等级:论坛游侠 帖子:119 积分:0 威望:0 精华:0 注册:2017/9/30 17:54:43
  发帖心情 Post By:2017/12/7 10:56:51 [只看该作者]

非常感谢超级版主如此详尽的回复!

 回到顶部
帅哥哟,离线,有人找我吗?
server808
  23楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:119 积分:0 威望:0 精华:0 注册:2017/9/30 17:54:43
  发帖心情 Post By:2017/12/7 16:39:58 [只看该作者]

请帮忙检查以下止盈止损部份是否完善,谢谢指导!


平空:tsellshort(平空条件 and tholding<0, 手数,lmt,X周期高点);
平多:tsell(平多条件 and tholding>0,手数,lmt,X周期低点);
开空:tbuyshort(开空条件 and tholding=0,手数,lmt,X周期低点);
开多:tbuy(开多条件 and tholding=0, 手数,lmt,X周期高点);




//多头固定止盈条件判断*******
ZYCOND1:DYNAINFO(7)-TAVGENTERPRICEEX2( '','',0)>=50*MINDIFF;
//固定止损条件判断
ZSCOND1:TAVGENTERPRICEEX2('','' ,0)-DYNAINFO(7)>=20*MINDIFF;
//固定止损止盈下单
TSELL(ZYCOND1,TBUYHOLDINGEX( '','' ,1 ),MKT,0,'','');
TSELL(ZSCOND1,TBUYHOLDINGEX( '','' ,1 ),MKT,0,'','');

//空头固定止盈条件判断********
ZYCOND2:TAVGENTERPRICEEX2( '','',1)-DYNAINFO(7)>=500*MINDIFF;
//固定止损条件判断
ZSCOND2:DYNAINFO(7)-TAVGENTERPRICEEX2('','' ,1)>=20*MINDIFF;
//固定止损止盈下单
TSELLSHORT(ZYCOND2,TSELLHOLDINGEX( '','' ,1 ),MKT,0,'','');
TSELLSHORT(ZSCOND2,TSELLHOLDINGEX( '','' ,1 ),MKT,0,'','');
//**********************************************
  
  
//移动止损模块2*******************************  

//如果正常平掉全部持仓,需要将A置为0 。
if 平多条件 then begin
TSELL(1,TBUYHOLDINGEX( '',''  ,1),MKT);
EXTGBDATASET( 'aa',0); 
end;

if 平空条件 then begin
TSELLSHORT(1,TSELLHOLDINGEX( '',''  ,1),MKT);
EXTGBDATASET( 'aa',0); 
end;

//A有三种数值状态:1,0,最新价;
//当A=1时表示当前有持仓,A=0时表示移动止损执行完毕,A=最新价时用于比较价格是否回落
//将A赋值为1,表示当前有持仓

//多头移动止盈*********
IF TBUYHOLDINGEX( '','' ,1 )>0 AND EXTGBDATA('aa' )=0 THEN BEGIN
EXTGBDATASET( 'aa',1 );
END
//使A始终表示监控开始后的最高价
IF DYNAINFO(  7)>EXTGBDATA('aa' ) and EXTGBDATA('aa' )>0 THEN BEGIN
EXTGBDATASET( 'aa',DYNAINFO(  7));
END

//发现价格回落止损,并将A赋值为0表示移动止损动作完成
star:=EXTGBDATA('aa' )-TAVGENTERPRICEEX2( '','' ,0 );//多头持仓均价和开仓以来的记录的价格进行比较,用于判断是否满足获利超出50个变动价位。
IF star>=50*MINDIFF and EXTGBDATA('aa' )-DYNAINFO(  7)>=0.2*star  and EXTGBDATA('aa' )>0 THEN BEGIN
TSELL(1,1,MKT );
EXTGBDATASET( 'aa',0);
END


//空头移动止盈************

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

//发现价格回落止损,并将A赋值为0表示移动止损动作完成
star:=TAVGENTERPRICEEX2( '','' ,1 )-EXTGBDATA('aa' );//空头持仓均价和开仓以来的记录的价格进行比较,用于判断是否满足获利超出50个变动价位。
IF star>=50*MINDIFF and DYNAINFO(7)-EXTGBDATA('aa' )>=0.2*star  and EXTGBDATA('aa' )>0 THEN BEGIN
TSELLSHORT(1,1,MKT );
EXTGBDATASET( 'aa',0);
END

 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  24楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  25楼 | 信息 | 搜索 | 邮箱 | 主页 | 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);



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


加好友 发短信
等级:论坛游侠 帖子:119 积分:0 威望:0 精华:0 注册:2017/9/30 17:54:43
  发帖心情 Post By:2017/12/11 17:16:41 [只看该作者]

wenarm版主,我把代码发你的QQ吧,帮我全面检查一下,移动止损工作不正常

 回到顶部
帅哥哟,离线,有人找我吗?
server808
  27楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:119 积分:0 威望:0 精华:0 注册:2017/9/30 17:54:43
  发帖心情 Post By:2017/12/26 11:31:13 [只看该作者]

继续求助经验丰富的版主帮助,以下固定止盈止损和移动止盈在实际交易中都不正常:1、固定止损到点没有平仓动作;2、移动止盈的点位差别非常大。请帮忙检查修正,谢谢!

//固定止损
IF TAVGENTERPRICE-DYNAINFO(7)>80*MINDIFF THEN BEGIN
TSELL(1,THOLDING,MKT);
END

IF DYNAINFO(7)-TAVGENTERPRICE>80*MINDIFF THEN BEGIN
TSELLSHORT(1,THOLDING,MKT);
END

//移动止盈用于后台
GLOBALVARIABLE:maxprofit=0;
if tholding>0 and TENTERBARS>0 then
  begin
  win:=high-TAVGENTERPRICE;
  if win>maxprofit then maxprofit:=win;
  win2:=maxprofit-win;
  end
if tholding<0 and TENTERBARS>0 then
  begin
  win:=TAVGENTERPRICE-low;
  if win>maxprofit then maxprofit:=win;
  win2:=maxprofit-win;
  end 
 
if maxprofit>=50*mindiff  and win2>0.2*maxprofit then
   begin
   tsell(tholding>0,tholding,MKT);
   tsellshort(tholding<0,tholding,MKT);
   maxprofit:=0;
   end


 回到顶部
总数 27 上一页 1 2 3