Особенности языка mql5, тонкости и приёмы работы - страница 12

fxsaber
14683
fxsaber  
Leo59:
Спасибо!
Как я понимаю, к понятию "действующий ордер" относятся позиции BUY и/или SELL, а также установленные (принятые брокером) отложенные ордера.
Если у меня открыты: позиции Long и Short, а также установлены Buy Limit и Sell Stop, то OrdersTotal() вернёт значение =4. Так?

Может быть открыта BUY-позиция и действующий BUY-ордер. Выше привел кодо-пример, но проще, наверное, на пальцах. Как идет срабатывания TP открытой позиции

  • Цена доходит до TP BUY-позиции.
  • Торговый сервер создает соответствующуй действующий SELL-ордер.
  • После чего в терминале одновременно присутствуют BUY-позиция и SELL-ордер.
  • SELL-ордер исполняется, попадая в историю и порождая там же сделку.
  • На основании данных сделки происходит закрытие исходной BUY-позиции, которая никуда не попадает - присутствует косвенно в истории сделок.

Vasiliy Pushkaryov
6824
Vasiliy Pushkaryov  
Leo59:
Всё уже давно принято, и прежде чем писать документацию, наверное не лишне будет почитать учебник Сергея Ковалёва (он встроен в MQL4):
Название ветки прочтите. Все думали, что речь именно о MQL5. Здесь на форуме есть соответствующий раздел для MQL4 и МТ4. Если бы задали вопрос туда, Вам бы ответили по другому.
Vladimir Karputov
Модератор
190449
Vladimir Karputov  
Leo59:
Всё уже давно принято, и прежде чем писать документацию, наверное не лишне будет почитать учебник Сергея Ковалёва (он встроен в MQL4):


Вот так может быть построен блок, в котором анализируются рыночные и отложенные ордера:

   for (int i=1; i<=OrdersTotal(); i++)       //Цикл по всем ордерам,..
     {                                        //отражённым в терминале
      if(OrderSelect(i-1,SELECT_BY_POS)==true)//Если есть следующий
        {                                    
         // Здесь должен выполняться ..
         // ..анализ характеристик ордеров
        }
     }                                        //Конец тела цикла

В заголовке оператора цикла указано начальное значение i=1, а условием окончания цикла - выражение i<=OrdersTotal(). Функция OrdersTotal() возвращает общее количество рыночных и отложенных ордеров, т.е. тех ордеров, которые отражаются в Терминале на закладке Торговля. Поэтому в цикле будет столько итераций, сколько ордеров присутствует в торговле.

Пожалуйста вставляйте код правильно: Правильно вставляем код на форуме (я уже исправил вставленное Вами - и смотрите: Вы вставили просто текст, а теперь это КОД, с подсветкой синтаксиса).
Leo59
348
Leo59  
Vitaly Muzichenko:

Не нужно отжигать)

Это код МТ4, и в нём нет деления ордеров и позиций - в нём всё смешано воедино 

А что, в MQL4 и MQL5 функция OrdersTotal() - это разные функции? Компилятор-то вроде один и тот же....
Artyom Trishkin
Модератор
125687
Artyom Trishkin  
Leo59:
Всё уже давно принято, и прежде чем писать документацию, наверное не лишне будет почитать учебник Сергея Ковалёва (он встроен в MQL4):


Вот так может быть построен блок, в котором анализируются рыночные и отложенные ордера:

   for (int i=1; i<=OrdersTotal(); i++)       //Цикл по всем ордерам,..
     {                                        //отражённым в терминале
      if(OrderSelect(i-1,SELECT_BY_POS)==true)//Если есть следующий
        {                                    
         // Здесь должен выполняться ..
         // ..анализ характеристик ордеров
        }
     }                                        //Конец тела цикла

В заголовке оператора цикла указано начальное значение i=1, а условием окончания цикла - выражение i<=OrdersTotal(). Функция OrdersTotal() возвращает общее количество рыночных и отложенных ордеров, т.е. тех ордеров, которые отражаются в Терминале на закладке Торговля. Поэтому в цикле будет столько итераций, сколько ордеров присутствует в торговле.

Мало того, что вы говорите про mql4 и показали код из mql4 (а ветка об особенностях и тонкостях программирования на mql5), так вы ещё и цикл неверно написали - с нуля нужно начинать, иначе всегда один ордер будете пропускать.
Artyom Trishkin
Модератор
125687
Artyom Trishkin  
Leo59:
А что, в MQL4 и MQL5 функция OrdersTotal() - это разные функции? Компилятор-то вроде один и тот же....
Да, разные.
Vladimir Karputov
Модератор
190449
Vladimir Karputov  
Leo59:
А что, в MQL4 и MQL5 функция OrdersTotal() - это разные функции? Компилятор-то вроде один и тот же....

Что касается торговых функций - есть различия. Выше уже сказали про MQL4:

тогда как в MQL5 OrdersTotal() вернёт количество отложенных ордеров. Таким образом в MQL5 всё систематизировано на более высоком уровне: котлеты отдельно, мухи отдельно.
Leo59
348
Leo59  
Artyom Trishkin:
Да, разные.
И в чём разница?
Artyom Trishkin
Модератор
125687
Artyom Trishkin  
Leo59:
И в чём разница?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

Vladimir Karputov, 2017.02.28 19:44

Что касается торговых функций - есть различия. Выше уже сказали про MQL4:

тогда как в MQL5 OrdersTotal() вернёт количество отложенных ордеров. Таким образом в MQL5 всё систематизировано на более высоком уровне: котлеты отдельно, мухи отдельно.

Artyom Trishkin
Модератор
125687
Artyom Trishkin  
Leo59:
И в чём разница?

OrdersTotal()

Возвращает количество действующих ордеров.

int  OrdersTotal();

Возвращаемое значение

Значение типа int.

Примечание

Не следует путать между собой действующие отложенные ордера и позиции, которые также отображаются на вкладке "Торговля" в панели "Инструменты". Ордер – это распоряжение на проведение торговой операции, а позиция является результатом одной или нескольких сделок.

При "неттинговом" учете позиций (ACCOUNT_MARGIN_MODE_RETAIL_NETTING и ACCOUNT_MARGIN_MODE_EXCHANGE) по каждому символу в любой момент времени может быть открыта только одна позиция, которая является результатом одной или более сделок. Не следует путать между собой позиции и действующие отложенные ордера, которые также отображаются на вкладке "Торговля" в панели "Инструменты".

При независимом представлении позиций (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) по каждому символу одновременно может быть открыто несколько позиций.


PositionsTotal()

Возвращает количество открытых позиций.

int  PositionsTotal();

Возвращаемое значение

Значение типа int.

Примечание

При "неттинговом" учете позиций (ACCOUNT_MARGIN_MODE_RETAIL_NETTING и ACCOUNT_MARGIN_MODE_EXCHANGE) по каждому символу в любой момент времени может быть открыта только одна позиция, которая является результатом одной или более сделок. Не следует путать между собой позиции и действующие отложенные ордера, которые также отображаются на вкладке "Торговля" в панели "Инструменты".

При независимом представлении позиций (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) по каждому символу одновременно может быть открыто несколько позиций.