任务编号: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这些错误的。
函数代码如下:
- void yidong (double tppoint1,double tppoint2,double tppoint3,double tppoint4,string symbol,ENUM_POSITION_TYPE type,int magic,string comment)
- {
- if(PositionsTotal()>0)
- for(int i= PositionsTotal() -1 ; i>=0 ; i--)
- {
- if(PositionGetTicket(i)>0 && PositionGetString(POSITION_SYMBOL)==symbol)
- {
- double op=PositionGetDouble(POSITION_PRICE_OPEN);
- double sl=PositionGetDouble(POSITION_SL);
- double tp=PositionGetDouble(POSITION_TP);
- double ask=SymbolInfoDouble(symbol,SYMBOL_ASK);
- double bid=SymbolInfoDouble(symbol,SYMBOL_BID);
- double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
- //修改多单的止盈止损价格 开始
- if(
- POSITION_TYPE_BUY==type &&
- PositionGetInteger(POSITION_MAGIC)==magic &&
- PositionGetString(POSITION_COMMENT)==comment
- )
- {
- if (bid-op>=tppoint1*point && bid-op<tppoint2*point && sl< op+tppoint1*point && tp>op+tppoint2*point)
- {
- MqlTradeRequest request={};
- MqlTradeResult result={};
- request.action = TRADE_ACTION_SLTP ;
- request.type_filling=ORDER_FILLING_IOC;
- request.position=PositionGetTicket(i);
- request.symbol=symbol;
- request.magic=magic;
- request.comment=comment;
- request.sl= NormalizeDouble( op+tppoint1*point,Digits()) ;
- request.tp= NormalizeDouble(op+tppoint2*point,Digits()) ;
-
- //--- 发送请求
- if(!OrderSend(request,result))
- PrintFormat("OrderSend error %d",GetLastError()); // 如果不能发送请求,输出错误代码
-
- }
- if (bid-op>=tppoint2*point && bid-op<tppoint3*point && sl< op+tppoint2*point && tp>op+tppoint3*point)
- {
- MqlTradeRequest request={};
- MqlTradeResult result={};
- request.action = TRADE_ACTION_SLTP ;
- request.type_filling=ORDER_FILLING_IOC;
- request.position=PositionGetTicket(i);
- request.symbol=symbol;
- request.magic=magic;
- request.comment=comment;
- request.sl= NormalizeDouble( op+tppoint2*point,Digits()) ;
- request.tp= NormalizeDouble(op+tppoint3*point,Digits()) ;
-
- //--- 发送请求
- if(!OrderSend(request,result))
- PrintFormat("OrderSend error %d",GetLastError()); // 如果不能发送请求,输出错误代码
-
- }
- if (bid-op>=tppoint3*point && bid-op<tppoint4*point && sl< op+tppoint3*point && tp>op+tppoint4*point)
- {
- MqlTradeRequest request={};
- MqlTradeResult result={};
- request.action = TRADE_ACTION_SLTP ;
- request.type_filling=ORDER_FILLING_IOC;
- request.position=PositionGetTicket(i);
- request.symbol=symbol;
- request.magic=magic;
- request.comment=comment;
- request.sl= NormalizeDouble( op+tppoint3*point,Digits()) ;
- request.tp= NormalizeDouble(op+tppoint4*point,Digits()) ;
-
- //--- 发送请求
- if(!OrderSend(request,result))
- PrintFormat("OrderSend error %d",GetLastError()); // 如果不能发送请求,输出错误代码
-
- }
-
- }
- // 修改多单的止盈止损价格 结束
- //修改空单的止盈止损价格 开始
- if(
- POSITION_TYPE_SELL==type &&
- PositionGetInteger(POSITION_MAGIC)==magic &&
- PositionGetString(POSITION_COMMENT)==comment
- )
-
- {
- if (op-ask>=tppoint1*point && op-ask<tppoint2*point && op-tppoint1*point<sl && op-tppoint2*point>tp)
- {
- MqlTradeRequest request={};
- MqlTradeResult result={};
- request.action = TRADE_ACTION_SLTP ;
- request.type_filling=ORDER_FILLING_IOC;
- request.position=PositionGetTicket(i);
- request.symbol=symbol;
- request.magic=magic;
- request.comment=comment;
- request.sl= NormalizeDouble( op-tppoint1*point,Digits()) ;
- request.tp= NormalizeDouble(op-tppoint2*point,Digits()) ;
-
- //--- 发送请求
- if(!OrderSend(request,result))
- PrintFormat("OrderSend error %d",GetLastError()); // 如果不能发送请求,输出错误代码
-
- }
- if (op-ask>=tppoint2*point && op-ask<tppoint3*point && op-tppoint2*point<sl && op-tppoint3*point>tp )
- {
- MqlTradeRequest request={};
- MqlTradeResult result={};
- request.action = TRADE_ACTION_SLTP ;
- request.type_filling=ORDER_FILLING_IOC;
- request.position=PositionGetTicket(i);
- request.symbol=symbol;
- request.magic=magic;
- request.comment=comment;
- request.sl= NormalizeDouble( op-tppoint2*point,Digits()) ;
- request.tp= NormalizeDouble(op-tppoint3*point,Digits()) ;
-
- //--- 发送请求
- if(!OrderSend(request,result))
- PrintFormat("OrderSend error %d",GetLastError()); // 如果不能发送请求,输出错误代码
-
- }
- if (op-ask>=tppoint3*point && op-ask<tppoint4*point && op-tppoint3*point<sl && op-tppoint4*point>tp)
- {
- MqlTradeRequest request={};
- MqlTradeResult result={};
- request.action = TRADE_ACTION_SLTP ;
- request.type_filling=ORDER_FILLING_IOC;
- request.position=PositionGetTicket(i);
- request.symbol=symbol;
- request.magic=magic;
- request.comment=comment;
- request.sl= NormalizeDouble( op-tppoint3*point,Digits()) ;
- request.tp= NormalizeDouble(op-tppoint4*point,Digits()) ;
-
- //--- 发送请求
- if(!OrderSend(request,result))
- PrintFormat("OrderSend error %d",GetLastError()); // 如果不能发送请求,输出错误代码
-
- }
- }
- //修改空单的止盈止损价格 结束
- }
- }
- }
复制代码
|