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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Vitaly Muzichenko
12432
Vitaly Muzichenko  
Leo59:
Спасибо!
Так как "Ордер – это распоряжение на проведение торговой операции", то к категории "действующие ордера" можно отнести только отложенные ордера, а "Позиции - бай и селл" - это не распоряжение на проведение торговой операции. Или я что-то "не догоняю"?

Ордер в переводе на русский - приказ. Вы отдаёте приказ(ордер), он может быть любым из 8.

1, 2, 3, 4 -  байстоп, селлстоп, байлимит и селллимит - после срабатывания появляется позиция

5, 6- бай или селл - это уже не ордера

7, 8 - стоплосс и тейкпрофит - ордера, приказы ДЦ на выход с рынка

В случае 1, 2, 3, 4 - отложенные ордера

5, 6 - на захват рынка), то есть занимание определённой позиции в рынке, прям как на войне, у каждого есть своя позиция на фронте, куда их послали ордером(приказом) командиры

Vasiliy Pushkaryov
6730
Vasiliy Pushkaryov  
Leo59:
Спасибо!
Так как "Ордер – это распоряжение на проведение торговой операции", то к категории "действующие ордера" можно отнести только отложенные ордера, а "Позиции - бай и селл" - это не распоряжение на проведение торговой операции. Или я что-то "не догоняю"?
Еще можно посмотреть по ссылке первый раздел "Торговые термины" .
fxsaber
14391
fxsaber  
Vitaly Muzichenko:

5, 6- бай или селл - это уже не ордера

Нижеследующий код показывает, что это именно действующие ордера.

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

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

fxsaber, 2017.02.25 16:30

// Триггер срабатывания SL/TP - работает только на демо/реале (не в тестере).
void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result )
{
  if ((Trans.type == TRADE_TRANSACTION_ORDER_ADD) &&
       PositionSelectByTicket(Trans.position) && OrderSelect(Trans.order) &&
       (PositionGetInteger(POSITION_TYPE) == 1 - OrderGetInteger(ORDER_TYPE)))
  {
    const double Price = OrderGetDouble(ORDER_PRICE_OPEN);
    
    if (Price == PositionGetDouble(POSITION_TP))
      Print("Position #" + (string)Trans.position + " - triggered TP.");    
    else if (Price == PositionGetDouble(POSITION_SL))
      Print("Position #" + (string)Trans.position + " - triggered SL.");    
  }
}
Leo59
348
Leo59  
fxsaber:
Действующие ордера - торговые приказы, которые ожидают исполнения или отмены, за исключением ордеров TP/SL и MarginCall. Действующими ордерами могут быть BUY и SELL.
Спасибо!
Как я понимаю, к понятию "действующий ордер" относятся позиции BUY и/или SELL, а также установленные (принятые брокером) отложенные ордера.
Если у меня открыты: позиции Long и Short, а также установлены Buy Limit и Sell Stop, то OrdersTotal() вернёт значение =4. Так?
Vladimir Karputov
Модератор
185577
Vladimir Karputov  
Leo59:
Спасибо!
Как я понимаю, к понятию "действующий ордер" относятся позиции BUY и/или SELL, а также установленные (принятые брокером) отложенные ордера.
Если у меня открыты: позиции Long и Short, а также установлены Buy Limit и Sell Stop, то OrdersTotal() вернёт значение =4. Так?
Нет. OrdersTotal() вернёт 2 (это отложенные ордера Buy Limit и Sell Stop) и PositionsTotal() вернёт тоже 2 (позиции Buy и Sell).
Leo59
348
Leo59  
Vladimir Karputov:
Нет. OrdersTotal() вернёт 2 (это отложенные ордера Buy Limit и Sell Stop) и PositionsTotal() вернёт тоже 2 (позиции Buy и Sell).
)) Вот это уже круто!!!! Что же всё-таки возвращает функция OrdersTotal()?
Maxim Khrolenko
9015
Maxim Khrolenko  
Leo59:
)) Вот это уже круто!!!! Что же всё-таки возвращает функция OrdersTotal()?
Можно принять такую терминологию: позиция - то что уже куплено/продано или вручную или сработал отложенный ордер, а ордер - отложенный приказ на открытие позиции если цена дойдет до заданного уровня.
Vladimir Karputov
Модератор
185577
Vladimir Karputov  
Leo59:
)) Вот это уже круто!!!! Что же всё-таки возвращает функция OrdersTotal()?

Справку прочтите уже наконец :).

Изучайте:

//+------------------------------------------------------------------+
//|                                    OrdersTotalPositionsTotal.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\OrderInfo.mqh>
CPositionInfo  m_position;                   // trade position object
COrderInfo     m_order;                      // pending orders object
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int total=0;
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))     // selects the position by index for further access to its properties
        {
         //if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
         Print("position ",total,": ",m_position.Symbol()," ",EnumToString(m_position.PositionType()),
               " ",DoubleToString(m_position.Volume(),2)," ",DoubleToString(m_position.PriceOpen(),8));
         total++;
        }
   total=0;
   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
        {
         //if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==m_magic)
         Print("pending order ",total,": ",m_order.Symbol()," ",EnumToString(m_order.OrderType()),
               " ",DoubleToString(m_order.VolumeInitial(),2)," ",DoubleToString(m_order.PriceOpen(),8));
         total++;
        }
  }
//+------------------------------------------------------------------+

Вот состояние вкладки "Торговля":

торговля

Как видите открыты ДВЕ ПОЗИЦИИ (EURUSD buy 0.03 и USDCAD buy 0.02) и выставлены ТРИ ОТЛОЖЕННЫЕ ОРДЕРА (USDJPY buy limit, USDJPY sell limit и EURUSD buy limit),

и распечатка скрипта:

2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   position 0: USDCAD POSITION_TYPE_BUY 0.02 1.32797000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   position 1: EURUSD POSITION_TYPE_BUY 0.03 1.06088000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   pending order 0: EURUSD ORDER_TYPE_BUY_LIMIT 0.03 1.05879000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   pending order 1: USDJPY ORDER_TYPE_SELL_LIMIT 0.01 112.71100000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   pending order 2: USDJPY ORDER_TYPE_BUY_LIMIT 0.01 111.74500000
Файлы:
Leo59
348
Leo59  
Maxim Khrolenko:
Можно принять такую терминологию: позиция - то что уже куплено/продано или вручную или сработал отложенный ордер, а ордер - отложенный приказ на открытие позиции если цена дойдет до заданного уровня.
Всё уже давно принято, и прежде чем писать документацию, наверное не лишне будет почитать учебник Сергея Ковалёва (он встроен в MQL4):


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

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

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

Vitaly Muzichenko
12432
Vitaly Muzichenko  
Leo59:
Всё уже давно принято, и прежде чем писать документацию, наверное не лишне будет почитать учебник Сергея Ковалёва (он встроен в MQL4):


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

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

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

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий