Ответить
22.11.2010, 14:38
Аватар для SolomatovS
SolomatovS SolomatovS вне форума Новичок форума
Регистрация: 04.08.2010 / Сообщений: 11
Поблагодарили 4 раз(а) / Репутация: 5

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

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

Вот код:
Код:
   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
Вопрос собственно напрашивается сам по себе, почему в целочисленную переменную номер ордера записывается, а в элемент массива того-же типа присваивается ноль?
22.11.2010, 14:57
Аватар для ale002
ale002 ale002 вне форума ::: __,,,^._.^,,,__ :::
Регистрация: 28.02.2010 / Сообщений: 1,246
Поблагодарили 2,510 раз(а) / Репутация: 2536
Наверно потому что массив у вас имеет неопределённый размер _Ticket_buy[]. Перед добавлением в него элемента нужно увеличивать размерчик на единицу ArrayResize(_Ticket_buy, buy + 1). Альтернатива - задать размер сразу, можно с запасом, int _Ticket_buy[100]. Тут вам не пхп, увы
22.11.2010, 16:57
Аватар для SolomatovS
SolomatovS SolomatovS вне форума Новичок форума
Регистрация: 04.08.2010 / Сообщений: 11
Поблагодарили 4 раз(а) / Репутация: 5
Наверно потому что массив у вас имеет неопределённый размер _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
Ответить


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
А ГДЕ НОМЕР 63? kustovvk Анонсы выпусков журнала ForTrader.ru 2 12.09.2010 15:13


Текущее время: 19:01. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO