Очень нужна ваша помощь в написании функции - страница 3

 
traderEvgen:

а это проблема. 

А при перезапуске терминала глобальные переменные сохраняются ?  Раньше на работал с ними ((

Сохраняются несколько недель от последнего обращения. 
 

1. не используйте глобальные переменные.

2. разделите открываемые ордера по разным меджикам например Magic, но второй меджик используйте на основании открытого первого (его тикета например)

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

а дальше уже ваша фантазия безгранична, можете строить любые правила.

 

зы. комментарии в ордерах брокеры могут затирать, sl,tp могут не ставить при их закрытии, затирать исходные. Меджик всегда остается не изменным на всем протяжении цикла позиции от открытия ордера до закрытия позиции. В отличии от других характеристик ордера.

 
Alexandr Gavrilin:

1. не используйте глобальные переменные.

2. разделите открываемые ордера по разным меджикам например Magic, но второй меджик используйте на основании открытого первого (его тикета например)

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

а дальше уже ваша фантазия безгранична, можете строить любые правила.

 

зы. комментарии в ордерах брокеры могут затирать, sl,tp могут не ставить при их закрытии, затирать исходные. Меджик всегда остается не изменным на всем протяжении цикла позиции от открытия ордера до закрытия позиции. В отличии от других характеристик ордера.

1. Просто так - не используйте и все, потому-что вы так решили? Смешнее не придумаешь.

 

Внутренние пометки ордеров через магик делает работу с советники громоздкой и неудобной. Нужно следить за диапазонами занимаемыми магиками, которые зависят от количества ордеров. Сразу возникают сложности при изменения параметров, надо иметь ввиду как съедут диапазоны магика.

В идеальном случае магик у советника должен быть один, исключительно для отделения его работы от работы других советников.

 
Alexandr Gavrilin:

1. не используйте глобальные переменные.

2. разделите открываемые ордера по разным меджикам например Magic, но второй меджик используйте на основании открытого первого (его тикета например)

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

а дальше уже ваша фантазия безгранична, можете строить любые правила.

 

зы. комментарии в ордерах брокеры могут затирать, sl,tp могут не ставить при их закрытии, затирать исходные. Меджик всегда остается не изменным на всем протяжении цикла позиции от открытия ордера до закрытия позиции. В отличии от других характеристик ордера.

cделал увеличении магина на 1 после каждого открытия 

magicCounter = magicNumber;

void OrderSendX(int cmd, double price, double stoploss, double takeprofit1, double takeprofit2)
{
   int count = 0;
   ticket1 = -1;
   ticket2 = -1;
   while(true)
   {
      if(ticket1 == -1 )
         ticket1 = OrderSend(Symbol(), cmd, lot, price, 3, stoploss, takeprofit1, "Order_1", magicCounter, 0, Red);
      if(ticket2 == -1 )
         ticket2 = OrderSend(Symbol(), cmd, lot, price, 3, stoploss, takeprofit2, "Order_2", magicCounter, 0, Green);
      
      if(ticket1==-1 || ticket2==-1)
      {  
         count++;
         Sleep(2000);
         RefreshRates();
      }
      if ((ticket1!=-1 && ticket2!=-1) || count>5)
      {
         magicCounter++;
         return;
      }
   }

   return;
}

 и получилась такая обработка

void OrdersModify()
{

   string sumbol = Symbol();
   int magic;
   double orderStopLoss;
   double orderOpenPrice;
   for (int i=0; i<OrdersHistoryTotal(); i++) 
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue; 
      if((OrderMagicNumber()< magicNumber && OrderMagicNumber()> magicCounter) || OrderSymbol()!= sumbol) continue;
      if(OrderProfit() > 0) //
      {
         magic = OrderMagicNumber();
 
         for(int j=0; j<OrdersTotal(); j++)
         {
            if(!OrderSelect(j,SELECT_BY_POS,MODE_TRADES)) continue;             
            if(OrderMagicNumber()== magic && OrderSymbol()== sumbol)
            {
            
               orderOpenPrice = NormalizeDouble(OrderOpenPrice(), Digits);
               orderStopLoss = NormalizeDouble(OrderStopLoss(), Digits);
               if(orderOpenPrice != orderStopLoss) // 
               {
                  OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Aqua);
               }
               else{
                  // 
                  if(условие закрытия)
                  {
                     if(OrderType()==OP_BUY)
                     {
                        OrderClose(OrderTicket(),lot,Bid,3,clrBlue);
                     }
                     if(OrderType()==OP_SELL)
                     {
                        OrderClose(OrderTicket(),lot,Ask,3,clrBlue);
                     }
                  }
               }
            }
         } 
      }
      orderOpenPrice = 0;
   }
}
 
traderEvgen:

cделал увеличении магина на 1 после каждого открытия 

 и получилась такая обработка

на истории работает, не знаю будет ли на счете работать
 
traderEvgen:
на истории работает, не знаю будет ли на счете работать
magicCounter = magicNumber;

Вот и все.

Надо в рынке искать занятые магики в определенном диапазоне.  

 
Dmitry Fedoseev:

Вот и все.

Надо в рынке искать занятые магики в определенном диапазоне.  

так и делаю

вот эта проверка

if((OrderMagicNumber()< magicNumber && OrderMagicNumber()> magicCounter) || OrderSymbol()!= sumbol) continue;
 
traderEvgen:

так и делаю

вот эта проверка

но глобальная переменная все ровно нужна для хранения magicCounter 
 
traderEvgen:

так и делаю

вот эта проверка

А я не про это, а про это:

magicCounter = magicNumber;

В случае перезапуска советника или терминала данные будут потеряны. 

Где сброс этого счетчика? До каких пор он будет увеличиваться? 

Причина обращения: