此主题相关图片如下:ad.png

如图所示,移动止损点,以多头为例,,,,策略进场就挂A点位止损, 当利润大于80 ,则止损点往上 移动到 A+40点 ,, 当利润大于130 则,止损点为 进场 + 100 点, 价格破止损点,则平仓出局!
另外我需要在图上绘制出止损线来, 当进场的那一刻开始绘制,,, 直到 离场之后, 也就是说,止损线只有在持仓的时候显示出来!
h_profit:=HHV(H,ENTERBARS)-AvGENTERPRICE;//最大盈利
ZS0:=h_profit<80*MINDIFF AND c<=A;
ZS1:=h_profit>=80*MINDIFF and h_profit<130 and c<=A+40*MINDIFF;
ZS2:=h_profit>=130*MINDIFF and c<=A+100*MINDIFF;
if (zs0 or zs1 or zs2) and holding>0 then sell(holding>0,holding,market);
画线参考这样的写法
DRAWSL(h_profit<80*MINDIFF and holding>0, A,0 ,0 ,2);
[此贴子已经被作者于2019/8/26 9:13:54编辑过]
止损线是要求这样画的,,, 以 空头为例! 进场之后,,开始绘制止损线,, 止损点随利润变化而变化,,,平仓之后, 停止绘制,止损线也小说
此主题相关图片如下:as.png

另外,,对于 移动止损
按照老师的代码,应用到当中确实不大稳妥!
以螺纹钢为例
2019-08-09 的行情, 60分钟对应的 进场位置是 3651, 然后设定 利润 大于 100个点之后,,止损点位 移动为 进场点 3651 - 34 个点 , 等于 3617 点,, 平仓 按对手价 发单, 最后成交是 3618 !
按照这个逻辑, 这样推算也是对的,, 但是 但是 ,,,,但是,,,, 切换 到 5 分钟的 走势,你会 发现,,,,策略回撤过程中,,,是 不 严 谨 的! 利润 大于 100 点 之后,,回撤 最高 位置是 3609 .。。远没有 满足 条件出场,,,可 60 分钟就在这个时间段給平了!
也就是说,,,,在60分钟回撤计算中,,,是按 当根 K 最高 ---- 最低来进行算的,,,这样回撤不科学( 希望后期软件能升级改进这个问题,做到回撤 和 实盘 贴近一些 )!
所以 按照这个思路来进行移动止损,是不行的 ( 因为 5分钟周期,,出现利润大于100 之后 ,回调最高是 3609,显然在出现前就平仓了 ) !
具体,,如下图 所示!
此主题相关图片如下:02.png

多头最高盈利那个的确是按照最高价计算的。(空头按照最低价)
h_profit:=HHV(H,ENTERBARS)-AvGENTERPRICE;//最大盈利
但是回撤用的是收盘价。
用最高价肯定有合理的地方的。实际上最高价在行情上肯定也是出现过的最高价,也就是最高赢利点。这个是合理的。
你那个情况是出现了一个盈利回撤导致的平仓吧。所以就等不到盈利100点那个位置了吧。因为前面还有几个盈利回撤的一定点数的平仓代码的。
// 序
runmode : 0 ;
//--------------------- 策 略 指 标 ---------------------------------------------------------------
diff := ema( close,12 ) - ema( close,26 ) ;
dea := ema( diff,9 ) ;
macd := 2 * ( diff - dea ) ;
//--------------------- 进 场 条 件 ---------------------------------------------------------
Scond := ref( cross( dea,diff ),1 ) ,tfilter ;
//------------ 空 平 仓
if ref( cross( diff,dea ),1 ) then sellshort( holding < 0, holding, limitr, open + 1 * mindiff ), ignorecheckprice ;
//--------------------- 空 头 进 场 ------------
if holding = 0 and Scond then buyshort( 1, 6, limitr, open - 1 * mindiff ), ignorecheckprice ;
// 利润超过 100 点,回撤到34个价位的时候离场
SellHc := enterprice - 34 * mindiff ;
Lprice := enterprice - llv( low,barslast( Scond )) ;
if ( range( TYPEBAR( 1,3 ),1,6 ) and Lprice > 100 * mindiff ) and ref( high > SellHc,1 ) then 空 离 : sellshort ( holding < 0, holding, limitr, max( open + 1 * mindiff, SellHc+ 1 * mindiff ) ), ignorecheckprice ;
[此贴子已经被作者于2019/8/26 13:18:12编辑过]
代码是这样的,,,
前面没有其他的盈利回撤平仓 代码,,麻烦老师对照一下
确实这个回撤止盈 ,,,不科学,,,,因为 5分钟周期,,从利润最高100点, 回调回来的价位最高才是 3609, 远没有达到平仓 的点位!
但是 60 分钟确实 平仓掉了,,,那这样会造成 回测 和 实盘 脱离 甚远! 不科学的!
因为平仓 前 加了个 K线 6 根K 以内, 这样 如果 大于6根K之后,就失效! 所以 回测 的 计算逻辑 有问题!
[此贴子已经被作者于2019/8/26 13:22:42编辑过]
if ( range( TYPEBAR( 1,3 ),1,6 ) and Lprice > 100 * mindiff ) and high > SellHc then 空 离 : sellshort ( holding < 0, holding, limitr, max( open + 1 * mindiff, SellHc+ 1 * mindiff ) ), ignorecheckprice ;
即便 把上面 改为 红色 字体的那样,也是一样的效果
SellHc := enterprice - 34 * mindiff ;
Lprice :enterprice - llv( low,barslast( Scond )) ;
你的思路是从最高盈利位置 回落到盈利34个点位置 平仓。是这样思路吧。
[此贴子已经被作者于2019/8/26 14:09:15编辑过]