设为首页 收藏本站 切换语言

10H币帮忙修改一个移动止盈的函数

| 发表于 2023-12-31 15:19:14 | 显示全部楼层 |复制链接
任务编号:99113 悬赏任务10H币 悬赏任务 : 按雇主需求进行任务后提交稿件,被采纳后即获得佣金。

距截止: 任务已圆满完成 雇主已托管赏金:10 H币
雇主发布需求23.12.31 雇主托管佣金23.12.31 投稿者投稿 雇主开始选稿 任务完成24.01.11

任务大厅共需1个合格投稿 | 每稿将获得10 H币 | 每人交稿次数不限 可多次任务

投诉举报 联系Ta 我来承接 已有0 个投稿 | 已采纳0 稿 | 拒绝0 稿 | 还需要1 稿

任务需求:
此函数的目的是:使用一次一单的策略时,当行情一直往盈利方向走,将利润最大化。
逻辑是分区间修改止损点止盈点。

例如 开仓时将单子的止损点设置为1500毫点,止盈点设置为6000毫点.

1. 当单子向盈利方向走,盈利大于或等于1000毫点, 且小于1100毫点这个区间时
   将原来的止损点的价格修改为盈利1000毫点时的价格,也就是新的止损点价格是盈利1000毫点时的价格.
   将原来的止盈点的价格修改为盈利1100毫点时的价格 ,也就是新的止盈点价格是盈利1100毫点时的价格.

这样修改的目的是当行情达到盈利1000毫点时,如果行情回调,回调到盈利1000毫点时就止损平仓,如果行情继续向盈利方向走,达到盈利1100毫点时就止盈平仓。


2. 当单子盈利大于或等于1100毫点, 且小于1200毫点这个区间时
   将原来的止损点修改为 1100毫点, 原来的止盈点修改为1200毫点 .

3. 当单子盈利大于或等于1200毫点, 且小于1300毫点这个区间时
   将原来的止损点修改为 1200毫点, 原来的止盈点修改为1300毫点 .

以此类推.


下面这个函数已经实现这个功能,但是有时候需要修改几次价格才能修改成功,日志显示 4756 Invalid stops 用MT5的“1分钟OHLC”模式回测时,一切正常,但用“每个点基于实时点”回测时,日志就显示4756错误代码 .

任务:反这个函数修改为一个,真正起效的,没有4756 Invalid stops这些错误的。

函数代码如下:

  1. void yidong (double tppoint1,double tppoint2,double tppoint3,double tppoint4,string symbol,ENUM_POSITION_TYPE type,int magic,string comment)
  2. {

  3. if(PositionsTotal()>0)
  4. for(int i= PositionsTotal() -1 ; i>=0 ; i--)
  5. {

  6. if(PositionGetTicket(i)>0 && PositionGetString(POSITION_SYMBOL)==symbol)

  7. {
  8. double op=PositionGetDouble(POSITION_PRICE_OPEN);
  9. double sl=PositionGetDouble(POSITION_SL);
  10. double tp=PositionGetDouble(POSITION_TP);
  11. double ask=SymbolInfoDouble(symbol,SYMBOL_ASK);
  12. double bid=SymbolInfoDouble(symbol,SYMBOL_BID);
  13. double point=SymbolInfoDouble(symbol,SYMBOL_POINT);


  14. //修改多单的止盈止损价格 开始

  15. if(
  16.    POSITION_TYPE_BUY==type &&
  17.    PositionGetInteger(POSITION_MAGIC)==magic &&
  18.    PositionGetString(POSITION_COMMENT)==comment
  19.   )

  20. {

  21. if (bid-op>=tppoint1*point && bid-op<tppoint2*point && sl< op+tppoint1*point && tp>op+tppoint2*point)

  22. {
  23. MqlTradeRequest request={};
  24. MqlTradeResult  result={};
  25. request.action = TRADE_ACTION_SLTP ;
  26. request.type_filling=ORDER_FILLING_IOC;
  27. request.position=PositionGetTicket(i);
  28. request.symbol=symbol;
  29. request.magic=magic;
  30. request.comment=comment;
  31. request.sl= NormalizeDouble( op+tppoint1*point,Digits()) ;
  32. request.tp= NormalizeDouble(op+tppoint2*point,Digits()) ;

  33.   //--- 发送请求
  34. if(!OrderSend(request,result))
  35. PrintFormat("OrderSend error %d",GetLastError());  // 如果不能发送请求,输出错误代码

  36. }

  37. if (bid-op>=tppoint2*point && bid-op<tppoint3*point && sl< op+tppoint2*point && tp>op+tppoint3*point)

  38. {
  39. MqlTradeRequest request={};
  40. MqlTradeResult  result={};
  41. request.action = TRADE_ACTION_SLTP ;
  42. request.type_filling=ORDER_FILLING_IOC;
  43. request.position=PositionGetTicket(i);
  44. request.symbol=symbol;
  45. request.magic=magic;
  46. request.comment=comment;
  47. request.sl= NormalizeDouble( op+tppoint2*point,Digits()) ;
  48. request.tp= NormalizeDouble(op+tppoint3*point,Digits()) ;

  49.   //--- 发送请求
  50. if(!OrderSend(request,result))
  51. PrintFormat("OrderSend error %d",GetLastError());  // 如果不能发送请求,输出错误代码

  52. }

  53. if (bid-op>=tppoint3*point && bid-op<tppoint4*point && sl< op+tppoint3*point && tp>op+tppoint4*point)

  54. {
  55. MqlTradeRequest request={};
  56. MqlTradeResult  result={};
  57. request.action = TRADE_ACTION_SLTP ;
  58. request.type_filling=ORDER_FILLING_IOC;
  59. request.position=PositionGetTicket(i);
  60. request.symbol=symbol;
  61. request.magic=magic;
  62. request.comment=comment;
  63. request.sl= NormalizeDouble( op+tppoint3*point,Digits()) ;
  64. request.tp= NormalizeDouble(op+tppoint4*point,Digits()) ;

  65.   //--- 发送请求
  66. if(!OrderSend(request,result))
  67. PrintFormat("OrderSend error %d",GetLastError());  // 如果不能发送请求,输出错误代码

  68. }





  69. }  
  70. // 修改多单的止盈止损价格 结束



  71. //修改空单的止盈止损价格 开始

  72. if(
  73.    POSITION_TYPE_SELL==type &&
  74.    PositionGetInteger(POSITION_MAGIC)==magic &&
  75.    PositionGetString(POSITION_COMMENT)==comment
  76.   )
  77.   
  78. {

  79. if (op-ask>=tppoint1*point && op-ask<tppoint2*point && op-tppoint1*point<sl && op-tppoint2*point>tp)


  80. {
  81. MqlTradeRequest request={};
  82. MqlTradeResult  result={};
  83. request.action = TRADE_ACTION_SLTP ;
  84. request.type_filling=ORDER_FILLING_IOC;
  85. request.position=PositionGetTicket(i);
  86. request.symbol=symbol;
  87. request.magic=magic;
  88. request.comment=comment;
  89. request.sl= NormalizeDouble( op-tppoint1*point,Digits()) ;
  90. request.tp= NormalizeDouble(op-tppoint2*point,Digits()) ;

  91.   //--- 发送请求
  92. if(!OrderSend(request,result))
  93. PrintFormat("OrderSend error %d",GetLastError());  // 如果不能发送请求,输出错误代码

  94. }


  95. if (op-ask>=tppoint2*point && op-ask<tppoint3*point && op-tppoint2*point<sl && op-tppoint3*point>tp )


  96. {
  97. MqlTradeRequest request={};
  98. MqlTradeResult  result={};
  99. request.action = TRADE_ACTION_SLTP ;
  100. request.type_filling=ORDER_FILLING_IOC;
  101. request.position=PositionGetTicket(i);
  102. request.symbol=symbol;
  103. request.magic=magic;
  104. request.comment=comment;
  105. request.sl= NormalizeDouble( op-tppoint2*point,Digits()) ;
  106. request.tp= NormalizeDouble(op-tppoint3*point,Digits()) ;

  107.   //--- 发送请求
  108. if(!OrderSend(request,result))
  109. PrintFormat("OrderSend error %d",GetLastError());  // 如果不能发送请求,输出错误代码

  110. }


  111. if (op-ask>=tppoint3*point && op-ask<tppoint4*point && op-tppoint3*point<sl && op-tppoint4*point>tp)


  112. {
  113. MqlTradeRequest request={};
  114. MqlTradeResult  result={};
  115. request.action = TRADE_ACTION_SLTP ;
  116. request.type_filling=ORDER_FILLING_IOC;
  117. request.position=PositionGetTicket(i);
  118. request.symbol=symbol;
  119. request.magic=magic;
  120. request.comment=comment;
  121. request.sl= NormalizeDouble( op-tppoint3*point,Digits()) ;
  122. request.tp= NormalizeDouble(op-tppoint4*point,Digits()) ;

  123.   //--- 发送请求
  124. if(!OrderSend(request,result))
  125. PrintFormat("OrderSend error %d",GetLastError());  // 如果不能发送请求,输出错误代码

  126. }


  127. }
  128. //修改空单的止盈止损价格 结束



  129. }



  130. }



  131. }
复制代码
举报

评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

简体中文
繁體中文
English(英语)
日本語(日语)
Deutsch(德语)
Русский язык(俄语)
بالعربية(阿拉伯语)
Türkçe(土耳其语)
Português(葡萄牙语)
ภาษาไทย(泰国语)
한어(朝鲜语/韩语)
Français(法语)