Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Спасибо!
Так как "Ордер – это распоряжение на проведение торговой операции", то к категории "действующие ордера" можно отнести только отложенные ордера, а "Позиции - бай и селл" - это не распоряжение на проведение торговой операции. Или я что-то "не догоняю"?
Ордер в переводе на русский - приказ. Вы отдаёте приказ(ордер), он может быть любым из 8.
1, 2, 3, 4 - байстоп, селлстоп, байлимит и селллимит - после срабатывания появляется позиция
5, 6- бай или селл - это уже не ордера
7, 8 - стоплосс и тейкпрофит - ордера, приказы ДЦ на выход с рынка
В случае 1, 2, 3, 4 - отложенные ордера
5, 6 - на захват рынка), то есть занимание определённой позиции в рынке, прям как на войне, у каждого есть своя позиция на фронте, куда их послали ордером(приказом) командиры
Спасибо!
Так как "Ордер – это распоряжение на проведение торговой операции", то к категории "действующие ордера" можно отнести только отложенные ордера, а "Позиции - бай и селл" - это не распоряжение на проведение торговой операции. Или я что-то "не догоняю"?
5, 6- бай или селл - это уже не ордера
Нижеследующий код показывает, что это именно действующие ордера.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
fxsaber, 2017.02.25 16:30
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.");
}
}
Действующие ордера - торговые приказы, которые ожидают исполнения или отмены, за исключением ордеров TP/SL и MarginCall. Действующими ордерами могут быть BUY и SELL.
Как я понимаю, к понятию "действующий ордер" относятся позиции BUY и/или SELL, а также установленные (принятые брокером) отложенные ордера.
Если у меня открыты: позиции Long и Short, а также установлены Buy Limit и Sell Stop, то OrdersTotal() вернёт значение =4. Так?
Спасибо!
Как я понимаю, к понятию "действующий ордер" относятся позиции BUY и/или SELL, а также установленные (принятые брокером) отложенные ордера.
Если у меня открыты: позиции Long и Short, а также установлены Buy Limit и Sell Stop, то OrdersTotal() вернёт значение =4. Так?
Нет. OrdersTotal() вернёт 2 (это отложенные ордера Buy Limit и Sell Stop) и PositionsTotal() вернёт тоже 2 (позиции Buy и Sell).
)) Вот это уже круто!!!! Что же всё-таки возвращает функция OrdersTotal()?
)) Вот это уже круто!!!! Что же всё-таки возвращает функция 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 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
Можно принять такую терминологию: позиция - то что уже куплено/продано или вручную или сработал отложенный ордер, а ордер - отложенный приказ на открытие позиции если цена дойдет до заданного уровня.
Вот так может быть построен блок, в котором анализируются рыночные и отложенные ордера:
{ //отражённым в терминале
if(OrderSelect(i-1,SELECT_BY_POS)==true)//Если есть следующий
{
// Здесь должен выполняться ..
// ..анализ характеристик ордеров
}
} //Конец тела цикла
В заголовке оператора цикла указано начальное значение i=1, а условием окончания цикла - выражение i<=OrdersTotal(). Функция OrdersTotal() возвращает общее количество рыночных и отложенных ордеров, т.е. тех ордеров, которые отражаются в Терминале на закладке Торговля. Поэтому в цикле будет столько итераций, сколько ордеров присутствует в торговле.
Всё уже давно принято, и прежде чем писать документацию, наверное не лишне будет почитать учебник Сергея Ковалёва (он встроен в MQL4):
Вот так может быть построен блок, в котором анализируются рыночные и отложенные ордера:
В заголовке оператора цикла указано начальное значение i=1, а условием окончания цикла - выражение i<=OrdersTotal(). Функция OrdersTotal() возвращает общее количество рыночных и отложенных ордеров, т.е. тех ордеров, которые отражаются в Терминале на закладке Торговля. Поэтому в цикле будет столько итераций, сколько ордеров присутствует в торговле.
Не нужно отжигать)
Это код МТ4, и в нём нет деления ордеров и позиций - в нём всё смешано воедино