写了一个修改止盈止损的函数,但在执行中还是会有报错。

 
void mytrader::Modifytp(double my_slpoint,double my_tppoint) //修改止盈
{
   int total = PositionsTotal();
   for(int i = total - 1; i >= 0; i--)
   {
      if(PositionGetTicket(i) > 0)
      {
         if(PositionGetString(POSITION_SYMBOL) == symbol)
         {
            if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && (SymbolInfoDouble(symbol,SYMBOL_ASK) + my_tppoint * Point()) != PositionGetDouble(POSITION_TP))//主要是这句。我希望如果需要修改点位和现有的一致就不再修改,但是在执行过程中,始终报错。
            {
               MqlTradeRequest request = {};
               MqlTradeResult  result = {};
               request.action = TRADE_ACTION_SLTP;
               request.type_filling = ORDER_FILLING_IOC;
               request.position = PositionGetTicket(i);
               request.symbol = symbol;
               if(my_slpoint != 0)
               {
                  request.sl = PositionGetDouble(POSITION_PRICE_OPEN) - my_slpoint * Point();
               }
               if(my_tppoint != 0 )
               {
                  request.tp = SymbolInfoDouble(symbol,SYMBOL_ASK) + my_tppoint * Point();
               }
               if(!OrderSend(request,result))
                  PrintFormat("OrderSend 函数错误 %d",GetLastError());     // 如果不能发送请求,输出错误代码
            }
            if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && (SymbolInfoDouble(symbol,SYMBOL_BID) - my_tppoint * Point()) != PositionGetDouble(POSITION_TP))
            {
               MqlTradeRequest request = {};
               MqlTradeResult  result = {};
               request.action = TRADE_ACTION_SLTP;
               request.type_filling = ORDER_FILLING_IOC;
               request.position = PositionGetTicket(i);
               request.symbol = symbol;
               if(my_slpoint != 0)
               {
                  request.sl = PositionGetDouble(POSITION_PRICE_OPEN) + my_slpoint * Point();
               }
               if(my_tppoint != 0 )
               {
                  request.tp = SymbolInfoDouble(symbol,SYMBOL_BID) - my_tppoint * Point();
               }
               if(!OrderSend(request,result))
                  PrintFormat("OrderSend 函数错误 %d",GetLastError());     // 如果不能发送请求,输出错误代码
            }
         }
      }
   }
}


if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && (SymbolInfoDouble(symbol,SYMBOL_ASK) + my_tppoint * Point()) != PositionGetDouble(POSITION_TP))

我希望如果需要修改的点位和已有的一致就不再修改,但是在执行过程中,还是会继续执行,请问有没有朋友比较熟悉这方面的,其他的方面没有问题,这个也比较稳定,大家需要的可以直接拿来用。

把止盈止损点位my_tppoint、 my_slpoint 直接修改成自己需要的,比如200点、300点就可以了。

 
Blur Darkness:


if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && (SymbolInfoDouble(symbol,SYMBOL_ASK) + my_tppoint * Point()) != PositionGetDouble(POSITION_TP))

我希望如果需要修改的点位和已有的一致就不再修改,但是在执行过程中,还是会继续执行,请问有没有朋友比较熟悉这方面的,其他的方面没有问题,这个也比较稳定,大家需要的可以直接拿来用。

把止盈止损点位my_tppoint、 my_slpoint 直接修改成自己需要的,比如200点、300点就可以了。

感觉是逻辑问题:试着翻译下:如果是BUY单,当前ASK价+点值不等于止盈价,就修改止损,修改止盈。多读几遍试试?当前价+点值=?