Помогите записать номер тикета в Массив

SolomatovS

Интересующийся
Здравствуйте.
Не получается записать номер ордера в массив...

Вот код:
Код:
   int         Ticket, Temp;
   int         _Ticket_buy[],       _Ticket_sell[],
               _Tipe_buy[],         _Tipe_sell[];
   double      _StopLoss_buy[],     _StopLoss_sell[],
               _TakeProfit_buy[],   _TakeProfit_sell[];
   for(i=0; i<OrdersTotal(); i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==_symbol && OrderMagicNumber()==_MagicNumber)
      {
         if(OrderType()==OP_BUY)
         {
            Temp                   = OrderTicket();   _Ticket_buy[buy]=Temp;   Print("Номер ордера = ", OrderTicket(), ", Temp = ", Temp, ", _Ticket_buy[", buy, "] = ", _Ticket_buy[buy]);
            _StopLoss_buy[buy]     = NormalizeDouble(OrderStopLoss(), Digits);
            _TakeProfit_buy[buy]   = NormalizeDouble(OrderTakeProfit(), Digits);
            _Tipe_buy[buy]         = OP_BUY;
             buy++;
         }
         if(OrderType()==OP_SELL)
         {
            Temp                   = OrderTicket();   _Ticket_sell[sell]=Temp;   Print("Номер ордера = ", OrderTicket(), ", Temp = ", Temp, ", _Ticket_sell[", sell, "] = ", _Ticket_sell[sell]);
            _StopLoss_sell[sell]   = NormalizeDouble(OrderStopLoss(), Digits);
            _TakeProfit_sell[sell] = NormalizeDouble(OrderTakeProfit(), Digits);
            _Tipe_sell[sell]       = OP_SELL;
             sell++;
         }
      }
   }

Отчет:
Код:
20:36:35 2008.11.20 20:37  EURUSD_m,H4: Номер ордера = 2, Temp = 2, _Ticket_sell[0] = 0
20:36:35 2008.11.20 20:37  EURUSD_m,H4: Номер ордера = 2, Temp = 2, _Ticket_sell[0] = 0
20:36:35 2008.11.20 20:37  EURUSD_m,H4: Номер ордера = 2, Temp = 2, _Ticket_sell[0] = 0
20:36:35 2008.11.20 20:37  EURUSD_m,H4: Номер ордера = 2, Temp = 2, _Ticket_sell[0] = 0
20:36:35 2008.11.20 20:37  EURUSD_m,H4: Номер ордера = 2, Temp = 2, _Ticket_sell[0] = 0
20:36:35 2008.11.20 20:37  EURUSD_m,H4: Номер ордера = 2, Temp = 2, _Ticket_sell[0] = 0

Вопрос собственно напрашивается сам по себе, почему в целочисленную переменную номер ордера записывается, а в элемент массива того-же типа присваивается ноль?
 

ale002

::: __,,,^._.^,,,__ :::
Наверно потому что массив у вас имеет неопределённый размер _Ticket_buy[]. Перед добавлением в него элемента нужно увеличивать размерчик на единицу ArrayResize(_Ticket_buy, buy + 1). Альтернатива - задать размер сразу, можно с запасом, int _Ticket_buy[100]. Тут вам не пхп, увы :)
 

SolomatovS

Интересующийся
Наверно потому что массив у вас имеет неопределённый размер _Ticket_buy[]. Перед добавлением в него элемента нужно увеличивать размерчик на единицу ArrayResize(_Ticket_buy, buy + 1). Альтернатива - задать размер сразу, можно с запасом, int _Ticket_buy[100]. Тут вам не пхп, увы :)



Спасибо БОЛЬШОЕ! Так и есть, нужно размерность менять.

Вот код:
Код:
   int         Ticket;
   int         _Ticket_buy[],       _Ticket_sell[],
               _Tipe_buy[],         _Tipe_sell[];
   double      _StopLoss_buy[],     _StopLoss_sell[],
               _TakeProfit_buy[],   _TakeProfit_sell[];


   for(i=0; i<OrdersTotal(); i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==_symbol && OrderMagicNumber()==_MagicNumber)
      {
         if(OrderType()==OP_BUY)
         {
            new_size = ArraySize(_Ticket_buy)+1;
            ArrayResize(_Ticket_buy, new_size);
            _Ticket_buy[buy]=OrderTicket();   Print("Номер ордера = ", OrderTicket(), ", _Ticket_buy[", buy, "] = ", _Ticket_buy[buy]);
            _StopLoss_buy[buy]     = NormalizeDouble(OrderStopLoss(), Digits);
            _TakeProfit_buy[buy]   = NormalizeDouble(OrderTakeProfit(), Digits);
            _Tipe_buy[buy]         = OP_BUY;
             buy++;
         }
         if(OrderType()==OP_SELL)
         {
            new_size = ArraySize(_Ticket_sell)+1;
            ArrayResize(_Ticket_sell, new_size);
            _Ticket_sell[sell]=OrderTicket();   Print("Номер ордера = ", OrderTicket(), ", _Ticket_sell[", sell, "] = ", _Ticket_sell[sell]);
            _StopLoss_sell[sell]   = NormalizeDouble(OrderStopLoss(), Digits);
            _TakeProfit_sell[sell] = NormalizeDouble(OrderTakeProfit(), Digits);
            _Tipe_sell[sell]       = OP_SELL;
             sell++;
         }
      }
   }

Вот отчёт:
Код:
2010.11.22 22:52:32	2008.11.21 07:37  EURUSD_m,H4: Номер ордера = 2,  _Ticket_sell[0] = 2
2010.11.22 22:52:32	2008.11.21 07:37  EURUSD_m,H4: Номер ордера = 2,  _Ticket_sell[0] = 2
2010.11.22 22:52:32	2008.11.21 07:37  EURUSD_m,H4: Номер ордера = 2,  _Ticket_sell[0] = 2
2010.11.22 22:52:32	2008.11.21 07:36  EURUSD_m,H4: Номер ордера = 2,  _Ticket_sell[0] = 2
2010.11.22 22:52:32	2008.11.21 07:36  EURUSD_m,H4: Номер ордера = 2,  _Ticket_sell[0] = 2
 
Верх