请问MT5的保本止盈怎么写?

 

大家好,我是小白,以下是赵老师写的移动止损函数代码,这个函数修改的止损价格,

平仓时止损价格有时候大于设置的移动止损点数,有时候小于。

如果我想平仓时要大于或者等于设置的 移动止损点数应该如何写?

是修改止损价格还是止盈价格呢?

void yidong(int yidongdian,string symbol,ENUM_POSITION_TYPE type,int magic)  // yidong就是移动止损的意思,yidongidan就是移动点数的意思
 {
   int t=PositionsTotal();
   for(int i=t-1;i>=0;i--)
     {
       if(PositionGetTicket(i)>0)
        {
          if(PositionGetString(POSITION_SYMBOL)==symbol)
           {
             double bid=SymbolInfoDouble(symbol,SYMBOL_BID);
             double ask=SymbolInfoDouble(symbol,SYMBOL_ASK);
             double dig=SymbolInfoInteger(symbol,SYMBOL_DIGITS);
             double pot=SymbolInfoDouble(symbol,SYMBOL_POINT);
             double op=PositionGetDouble(POSITION_PRICE_OPEN);
             double sl=PositionGetDouble(POSITION_SL);
             double tp=PositionGetDouble(POSITION_TP);  
             if(type==POSITION_TYPE_BUY)
              {
                if((bid-op)>=pot*yidongdian && (sl<(bid-pot*yidongdian) || (sl==0)))
                 {
                   if(magic==0)
                    {
                       MqlTradeRequest request={};
                       MqlTradeResult  result={};
                       request.action=TRADE_ACTION_SLTP;
                       request.position=PositionGetTicket(i);
                       request.symbol=symbol;
                       request.sl=bid-pot*yidongdian;
                       request.tp=tp;
                       if(!OrderSend(request,result))
                       PrintFormat("OrderSend error %d",GetLastError()); 
                    }
                   else
                    {
                       if(PositionGetInteger(POSITION_MAGIC)==magic)
                       {
                          MqlTradeRequest request={};
                          MqlTradeResult  result={};
                          request.action=TRADE_ACTION_SLTP;
                          request.position=PositionGetTicket(i);
                          request.symbol=symbol;
                          request.sl=bid-pot*yidongdian;
                          request.tp=tp;
                          if(!OrderSend(request,result))
                          PrintFormat("OrderSend error %d",GetLastError()); 
                       }
                    } 
                 }
              }
              if(type==POSITION_TYPE_SELL)
              {
                 if((op-ask)>=pot*yidongdian && ((sl>(ask+pot*yidongdian)) || (sl==0)))
                  {
                    if(magic==0)
                     {
                       MqlTradeRequest request={};
                       MqlTradeResult  result={};
                       request.action=TRADE_ACTION_SLTP;
                       request.position=PositionGetTicket(i);
                       request.symbol=symbol;
                       request.sl=ask+pot*yidongdian;
                       request.tp=tp;
                       if(!OrderSend(request,result))
                       PrintFormat("OrderSend error %d",GetLastError()); 
                    }
                    else
                    {
                       if(PositionGetInteger(POSITION_MAGIC)==magic)
                       {
                          MqlTradeRequest request={};
                          MqlTradeResult  result={};
                          request.action=TRADE_ACTION_SLTP;
                          request.position=PositionGetTicket(i);
                          request.symbol=symbol;
                          request.sl=ask+pot*yidongdian;
                          request.tp=tp;
                          if(!OrderSend(request,result))
                          PrintFormat("OrderSend error %d",GetLastError()); 
                       }
                    }
                  }
              }
           } 
        }
     }
 }
原因: