Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Устанавливай программы из библиотеки прямо в MetaTrader. Это просто!
Алексей
16
Алексей 2013.06.27 09:54 
При изучении учебника по MQL4 не могу разобраться с учетом ордеров в статье Простой Эксперт tradingexpert.mq4 в блоке 4. Почему Total=0 и нигде больше он не ссылается на общее кол-во ордеров?
//--------------------------------------------------------------- 4 --
   // Учёт ордеров
   Symb=Symbol();                               // Название фин.инстр.
   Total=0;                                     // Количество ордеров
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symb)continue;      // Не наш фин. инструм
         if (OrderType()>1)                     // Попался отложенный
           {
            Alert("Обнаружен отложенный ордер. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if (Total>1)                           // Не более одного орд
           {
            Alert("Несколько рыночных ордеров. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Ticket=OrderTicket();                  // Номер выбранн. орд.
         Tip   =OrderType();                    // Тип выбранного орд.
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                // SL выбранного орд.
         TP    =OrderTakeProfit();              // TP выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
        }
     }
TarasBY
1742
TarasBY 2013.06.27 10:02  
Total - это счётчик ордеров. Вас смущает его название, сходное с OrdersTotal()?
Алексей
16
Алексей 2013.06.27 10:15  
Да, это же не функция, которая ссылается на 1 ордер в списке, у Total даже цвет черный. Или Я что не догоняю?
pako
3340
pako 2013.06.27 10:22  
xBullkax:

//--------------------------------------------------------------- 4 --
   // Учёт ордеров
   Symb=Symbol();                               // Название фин.инстр.
   Total=0;                                     // Количество ордеров
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symb)continue;      // Не наш фин. инструм
         if (OrderType()>1)                     // Попался отложенный
           {
            Alert("Обнаружен отложенный ордер. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if (Total>1)                           // Не более одного орд
           {
            Alert("Несколько рыночных ордеров. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Ticket=OrderTicket();                  // Номер выбранн. орд.
         Tip   =OrderType();                    // Тип выбранного орд.
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                // SL выбранного орд.
         TP    =OrderTakeProfit();              // TP выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
        }
     }
Алексей
16
Алексей 2013.06.27 10:30  

Это Я разобрал что он их перебирает, Я не понял почему Total=0  это 1 в списке ордеров (знаю что их номера начинаются с 0) но не могу понять почему Total это переменная которую мы задаем в начале:

int

Total, // Количество ордеров в окне 

 здесь у нас получает значение 0 и начинает быть 1 ордером в списке?

Простите за безграмотность языка MQL4! 

Igor Kim
2756
Igor Kim 2013.06.27 10:57  

Total++;

то же самое что

Total=Total+1;

или ещё вариант

Total+=1; 

Алексей
16
Алексей 2013.06.27 11:03  

Я понимаю что он их добавляет, это просто, но почему переменная Total =0 - это №1 в списке ордеров открытых или отложенных (без разницы)

pako
3340
pako 2013.06.27 11:04  
xBullkax:

Это Я разобрал что он их перебирает, Я не понял почему Total=0  это 1 в списке ордеров (знаю что их номера начинаются с 0) но не могу понять почему Total это переменная которую мы задаем в начале:

Total, // Количество ордеров в окне 

 здесь у нас получает значение 0 и начинает быть 1 ордером в списке?

Простите за безграмотность языка MQL4! 

вы наверное путаете количество позиций и номер позиций

тикет номер позиции 

тотал это количество позиций
total начинает считать ордера, если у них тип не > 1, т.е 0 и 1

тип буй=0, селл=1, если тип не > 1 , то это позиции 

//--------------------------------------------------------------- 4 --
   // Учёт ордеров
   Symb=Symbol();                               // Название фин.инстр.
   Total=0;                                     // Количество ордеров
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symb)continue;      // Не наш фин. инструм
         if (OrderType()>1)                     // Попался отложенный
           {
            Alert("Обнаружен отложенный ордер. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд //
         if (Total>1)                           // Не более одного орд
           {
            Alert("Несколько рыночных ордеров. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Ticket=OrderTicket();                  // Номер выбранн. орд.
         Tip   =OrderType();                    // Тип выбранного орд.
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                // SL выбранного орд.
         TP    =OrderTakeProfit();              // TP выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
        }
     }

 

Алексей
16
Алексей 2013.06.27 11:52  
pako СПАСИБО ЗА ПОМОЩЬ! наконец-то ДОШЛО!
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий