Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Нашел ошибку в наших продуктах? Смело пиши в Сервисдеск!
falmera
120
falmera 2010.11.14 16:20 
Ситуация такая! Мой эксп использует скальпинг! открывает ордера через step. Хочу воспользоваться данной функцией для закрытия всех ордеров в профит n. Подскажите как реализовать это?
Роман
7939
Роман 2010.11.14 19:24  
Falmera:
Ситуация такая! Мой эксп использует скальпинг! открывает ордера через step. Хочу воспользоваться данной функцией для закрытия всех ордеров в профит n. Подскажите как реализовать это?


    Циклом проходите по всем рыночным ордерам накапливая общий профит по каждому, при достижении заданного уровня n - закрываете все.

    У меня подобная конструкция реализована следующим образом:

    Замечания: по стратегии одновременно в рынке только один ордер, закрытие по достижению общего лосса. Думаю, труда переделать не составит...

   

extern int MaxLoss = 90;          // Максимально допустимая просадка в процентах от баланса

int start()    // -----------------------СТАРТ ЭКСПЕРТА--------------- 
{
   // ------------------------------------------------Ищем наш ордер---------------------------------

   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))
      {
         continue;
      }

      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))
      {
         continue;
      }

      orderType = OrderType();
      if ((orderType != OP_BUY) && (orderType != OP_SELL))
      {
         continue;
      }
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          orderProfit = OrderProfit() + OrderSwap();       // Profit
          Price = OrderOpenPrice();                        // Цена открытия рыночного ордера
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера
          
             if (ticket>0)                                               // Если позиция открылась
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  double OpenPrice=OrderOpenPrice();
                     }
         
          
      
    
     // Проверка на предельную просадку
      
      double loss = - ((orderProfit * 100.0) / AccountBalance());
      if (loss > MaxLoss)
      {
         Print ("MaxLoss");
         CloseAllOrders(MagicNumber);
         IsExpertFailed = true;
         return (0);
      }

   }
}
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий