MQL4 - установить шаг трейлинга в соответствии с разрешенным свопом ордера и минимальным стопом - PullRequest
0 голосов
/ 06 апреля 2020

Я использую стратегию обмена с двумя учетными записями у разных брокеров (хеджируемые счета). У меня есть код, который синхронизирует c между двумя счетами (через двух брокеров).

Когда я закрываю ордер BUY с брокером A, мой советник посылает сообщение Close Close и ордер SELL на брокере B закрывается. Я получаю прибыль от (своп-комиссии) на брокере B.

Что мне нужно, вместо того, чтобы закрывать ордер на брокере B, сделайте следующее:

  1. Получите общий своп Ордер SELL.
  2. Установите значение трейлинг-стопа по значению (своп-комиссия), например, если (своп-комиссия) составляет $ 50, установите стоп-лосс, чтобы при его попадании потеря составляла не более $ 50.
  3. Проверьте минимально допустимый стоп-лосс брокера и, если необходимый шаг (рассчитанный на шаге 2) выше, не устанавливайте трейлинг-стоп, просто закройте ордер с прибылью (своп-комиссия).

У меня есть функция трейлинг-стопа, которая срабатывает только при закрытии ордера BUY на брокере A:

//+------------------------------------------------------------------+
//| Trailing stop loss                                               |
//+------------------------------------------------------------------+
void Trail1()
{
double PointValue;
  for (int i = 0; i < OrdersTotal(); i++) 
  {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol()) continue; // Skipping positions in other currency pairs
      Print("Swap for the order #",OrderSwap());

      //Calculate the point value in case there are extra digits in the quotes
      if (MarketInfo(OrderSymbol(), MODE_POINT) == 0.00001) PointValue = 0.0001;
      else if (MarketInfo(OrderSymbol(), MODE_POINT) == 0.001) PointValue = 0.01;
      else PointValue = MarketInfo(OrderSymbol(), MODE_POINT);


      //Normalize trailing stop value to the point value
      double TSTP = TrailingStop * PointValue;

      if (OrderType() == OP_BUY)
      {
         if (OrderStopLoss() < Bid - TSTP)
         {
            if (!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSTP, OrderTakeProfit(), OrderExpiration(), clrNONE))
               Print("Error setting Buy trailing stop: ", GetLastError());
         }
      }
      else if (OrderType() == OP_SELL)
      {
         if ((OrderStopLoss() > Ask + TSTP) || (OrderStopLoss() == 0))
         {
            if (!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TSTP, OrderTakeProfit(), OrderExpiration(), clrNONE))
               Print("Error setting Sell trailing stop: ", GetLastError());
         }
      }
    }
    }
// --------------- ----------------------------------------------------------- ------------------------

Пожалуйста, помогите.

...