- Ограничение одновременно открытых позиций
- Как торговать на нескольких парах но не более одной одновременно
- Вопросы от начинающих MQL5 MT5 MetaTrader 5
дежавю ? https://www.mql5.com/ru/forum/309394#comment_11198558
Функция NumberOfOrders().
Эта функция возвращает количество ордеров и функционально полностью перекрывает ExistOrders(). Для того, чтобы заменить функцию ExistOrders() функцией NumberOfOrders(), необходимо и достаточно проверять возвращаемое значение на то, чтобы оно было больше нуля. Ограничить перечень проверяемых ордеров можно параметрами функции:
- sy - Наименование инструмента. Если задать этот параметр, то функция проверит ордера только заданного инструмента. NULL означает текущий инструмент, а "" (по умолчанию) - любой инструмент.
- op - Тип отложенного ордера. Допустимые значения: OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP или -1. Значение по умолчанию -1 - означает любой ордер.
- mn - Идентификатор ордера (MagicNumber). Значение по умолчанию -1 - любой магик.
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 28.11.2006 | //| Описание : Возвращает количество ордеров. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любой ордер) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfOrders(string sy="", int op=-1, int mn=-1) { int i, k=OrdersTotal(), ko=0, ot; if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { ot=OrderType(); if (ot>1 && ot<6) { if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) { if (mn<0 || OrderMagicNumber()==mn) ko++; } } } } return(ko); }
- 2019.04.02
- www.mql5.com
Добрый день, может кто-нибудь подсказать как правильнее всего прописать, что бы советник одновременно со всех графиков держал не более определенного количества ордеров. То есть в случае если работа идет по нескольким инструментам и одновременно поступит сигнал на открытие ордера, то робот не смог открыть одновременно больше сделок чем указано. Но тем не менее не прекращал свою работу, а по факту уменьшения количества сделок имел возможность открыть еще в пределах ограничения.Для языка МКЛ4 Подскажите пожалуйста, буду признателен)
Функция NumberOfPositions().
Эта функция возвращает количество открытых в данный момент позиций. Более точный отбор подсчитываемых позиций задаётся внешними параметрами:
- sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
- op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
- mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает количество позиций. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfPositions(string sy="", int op=-1, int mn=-1) { int i, k=OrdersTotal(), kp=0; if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) kp++; } } } } } return(kp); }
Нет, модератор написал, что не по адресу, вот перенес вопрос сюда. Спасибо за подсказку
int OPEN=1;
if(OrdersTotal())>100) OPEN=0; //можно открыть не более 100 ордеров
if(OPEN==1)
{
//Здесь открываем
}
int OPEN=1;
if(OrdersTotal())>100) OPEN=0; //можно открыть не более 100 ордеров
if(OPEN==1)
{
//Здесь открываем
}
Ренат, как-то немодно. Нет, чтобы OPEN="Можно", или OPEN="Нельзя".
Ренат, как-то немодно. Нет, чтобы OPEN="Можно", или OPEN="Нельзя".
я не люблю портянки
честно
можно применить стринги конечно, но строки сравнивать и цифру - это почти что небо и земля
;)
хотяяяяя...
ну вот, если так угодно:
string OPEN="Можно";
if(OrdersTotal())>100) OPEN="Нельзя"; //можно открыть не более 100 ордеров
if(OPEN=="Можно")
{
//Здесь открываем
}
я не люблю портянки
честно
можно применить стринги конечно, но строки сравнивать и цифру - это почти что небо и земля
;)
хотяяяяя...
ну вот, если так угодно:
string OPEN="Можно";
if(OrdersTotal())>100) OPEN="Нельзя"; //можно открыть не более 100 ордеров
if(OPEN=="Можно")
{
//Здесь открываем
}
О.
Можем ведь!
можно применить стринги конечно, но строки сравнивать и цифру - это почти что небо и земля
Не надо никаких стрингов. Используем перечисления:
enum ENUM_PERMISSION
{
PERMISSION_DISABLED,
PERMISSION_ENABLED
};
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования