3评论

1收藏

移动止损方法

 

avatar 老周 | 3529 人阅读 | 3 人评论 | 2016-11-08

不同的策略对移动止损的要求不尽相同,因此本节以第一章“移动止损”定义内容来描述实现“方法” 。


“移动止损” 是指成交持仓单盈利且当前报价与该单开仓价超过预设移动止损间距点数而执行的一个不断向盈利方向调整订单止损价位的过程。该订单被止损后利润≥0。


假设移动止损(TrallingStop)间距为 50 点,我们针对订单号为 921795 的成交持仓单进行移动止损操作。执行前预定义一个移动止损价位变量(myTrallingStopPrice) ,首先选中该订单,其次判断该订单类型(买入/卖出) ,第三步计算移动止损价位,第四步比较订单止损价是否可以执行移动止损,第五步执行移动止损。


  1. int TrallingStop=50; //预定义移动止损间距
  2. double myTrallingStopPrice=0; //预定义移动止损价位
  3. if (OrderSelect(921795,SELECT_BY_TICKET,MODE_TRADES)) //选中订单号为 921795 的成交持仓单
  4. {
  5. if (OrderType()==OP_BUY) //判断订单为买入类型
  6. {
  7. myTrallingStopPrice=Bid-TrallingStop*Point; //计算移动止损价位
  8. if (myTrallingStopPrice>OrderStopLoss()) //比较订单止损价是否可以执行移动止损
  9. {
  10. iWait;
  11. OrderModify(OrderTicket(),OrderOpenPrice(),myTrallingStopPrice,OrderTakeProfit(),0);
  12. }
  13. }
  14. if (OrderType()==OP_SELL) //判断订单为卖出类型
  15. {
  16. myTrallingStopPrice=Ask+TrallingStop*Point; //计算移动止损价位
  17. if (myTrallingStopPrice<OrderStopLoss()) //比较订单止损价是否可以执行移动止损
  18. {
  19. iWait;
  20. OrderModify(OrderTicket(),OrderOpenPrice(),myTrallingStopPrice,OrderTakeProfit(),0);
  21. }
  22. }
  23. }
复制代码

细心的读者会发现在针对卖出单执行第一次移动止损时, 假设卖出单没有设置止损价位,那么按照代码中的条件就不会执行,因为计算出来的 myTrallingStopPrice 永远大于 0,而OrderStopLoss()等于 0,解决办法是增加一段给卖出单设置初始止损的代码即可



""
还没有人打赏,支持一下

评论|共 3 个

detian

发表于 2017-1-16 21:45:36 | 显示全部楼层

"iWait"是什么函数?什么功能?

detian

发表于 2017-1-16 21:46:33 | 显示全部楼层

在MT4编译器里并不认识。

A启门科技

发表于 2017-3-10 09:30:36 | 显示全部楼层

移动止损方法 [修改]

您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则