vypchela

 
Уровень 12

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2091



РЕКОМЕНДУЮ




Лучшее от vypchela



Советник по Фибоначчи Комментариев 8
2020-11-10 16:12:30Рейтинг 0

Советник для МТ5 Комментариев 17
2022-10-22 17:34:39Рейтинг 0

Переписать БУ для МТ5

Андрей прошу переписать код бу для МТ5. За ранее спасибо.
void BreakEven()
{
    double lots = 0;
    double leave = LeaveLots; // LeaveLots = 0.01
    
    for (int i=OrdersTotal()-1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
        {
            lots  = OrderLots() - leave;
            lots = NormalizeDouble(lots, NDigits);
            if (lots < MarketInfo(Symbol(), MODE_MINLOT))
            continue;
            
            if (OrderType() == OP_BUY && Ask - OrderOpenPrice() > BreakEvenPoint*Point)
            {
                // make sure lot is not smaller than allowed value
                if (leave < MarketInfo(Symbol(), MODE_MINLOT))
                Print("BreakEven block error - Leave Lots value is smaller than minimal allowed value by your broker.");
                else
                {
                    bool ret1 = OrderClose(OrderTicket(), lots, OrderClosePrice(), Slippage, White);
                    if (ret1 == false)
                    Print("OrderModify() error - ", (GetLastError()));
                }
            }
            if (OrderType() == OP_SELL && OrderOpenPrice() - Bid > BreakEvenPoint*Point)
            {
                // make sure lot is not smaller than allowed value
                if (leave < MarketInfo(Symbol(), MODE_MINLOT))
                Print("BreakEven block error - Leave Lots value is smaller than minimal allowed value by your broker.");
                else
                {
                    bool ret2 = OrderClose(OrderTicket(), lots, OrderClosePrice(), Slippage, White);
                    if (ret2 == false)
                    Print("OrderModify() error - ", (GetLastError()));
                }
            }
        }
    }
    else
    Print("OrderSelect() error - ", (GetLastError()));
    
}
  • 0
  • Просмотров: 1065
  • 2 февраля 2023, 05:39
  • vypchela
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Доработка индикатора
01 февраля 2023
02 февраля 2023

Комментарии (9)

+
0
у меня есть готовый. скинуть?
avatar

  34  AM2 Сообщений: 15901 - Андрей

  • 2 февраля 2023, 17:37
+
0
Скинь, если есть такой. БУ закрывает часть лота.
avatar

  12  vypchela Автор Сообщений: 112

  • 3 февраля 2023, 04:27
+
0
если часть писать надо будет. на 10-е
avatar

  34  AM2 Сообщений: 15901 - Андрей

  • 3 февраля 2023, 18:16
+
0
Спасибо. Ждем.
avatar

  12  vypchela Автор Сообщений: 112

  • 4 февраля 2023, 03:51
+
0
я переписал один в один, но у вас по коду будет закрывать до тех пор пока не закроет целиком. в вашем коде нет условия на частичное закрытие.


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU2()
  {
   double lots = 0;
   double leave = SymbolInfoDouble(NULL,SYMBOL_VOLUME_MIN); 
   double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);

   for(int i=PositionsTotal()-1; i >= 0; i--)
     {
      if(PositionSelect(_Symbol))
        {
         lots  = PositionGetDouble(POSITION_VOLUME) - leave;
         lots = NormalizeDouble(lots,2);
         if(lots < SymbolInfoDouble(NULL,SYMBOL_VOLUME_MIN))
            continue;

         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY && Ask - PositionGetDouble(POSITION_PRICE_OPEN) > BULevel*_Point)
           {
            // make sure lot is not smaller than allowed value
            if(leave < SymbolInfoDouble(NULL,SYMBOL_VOLUME_MIN))
               Print("BreakEven block error - Leave Lots value is smaller than minimal allowed value by your broker.");
            else
              {
               bool ret1 = trade.PositionClosePartial(PositionGetTicket(i),lots);
               if(ret1 == false)
                  Print("OrderModify() error - ", (GetLastError()));
              }
           }
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL && PositionGetDouble(POSITION_PRICE_OPEN) - Bid > BULevel*_Point)
           {
            // make sure lot is not smaller than allowed value
            if(leave < SymbolInfoDouble(NULL,SYMBOL_VOLUME_MIN))
               Print("BreakEven block error - Leave Lots value is smaller than minimal allowed value by your broker.");
            else
              {
               bool ret2 = trade.PositionClose(PositionGetTicket(i));
               if(ret2 == false)
                  Print("OrderModify() error - ", (GetLastError()));
              }
           }
        }
      else
         Print("OrderSelect() error - ", (GetLastError()));
     }
  }
avatar

  34  AM2 Сообщений: 15901 - Андрей

  • 4 февраля 2023, 09:59
+
0
написал свой код, т.к. в который раз убедился переписывать чужие каракули хуже нет:




//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU()
  {
   bool cl=0;
   double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);

   for(int i=PositionsTotal()-1; i >= 0; i--)
     {
      if(PositionSelect(_Symbol) && PositionGetDouble(POSITION_VOLUME)==Lots)
        {
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY && PositionGetDouble(POSITION_PRICE_OPEN) > BULevel*_Point)
           {
            cl = trade.PositionClosePartial(PositionGetTicket(i),0.1);
           }

         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL && PositionGetDouble(POSITION_PRICE_OPEN) - Bid > BULevel*_Point)
           {
            cl = trade.PositionClosePartial(PositionGetTicket(i),0.1);
           }
        }
     }
  }
avatar

  34  AM2 Сообщений: 15901 - Андрей

  • 4 февраля 2023, 10:11
+
0
Спасибо Андрей.
avatar

  12  vypchela Автор Сообщений: 112

  • 4 февраля 2023, 10:16
+
0
оформил все в виде советника: www.opentraders.ru/downloads/3515/

avatar

  34  AM2 Сообщений: 15901 - Андрей

  • 4 февраля 2023, 15:27
+
0
Еще раз спасибо. Затестил, оба кода работают отлично!
avatar

  12  vypchela Автор Сообщений: 112

  • 4 февраля 2023, 17:57

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари