Посмотрите мой ответ здесь : https://www.mql5.com/ru/forum/111497/page544
Может подойдет. В вашем случае надо (сначала скопировать ф-ю в самый конец кода, вне ф-и Старт) для открытия добавить условие:
if (NumberOfPositions(NULL, OP_BUY, -1) <1) { // если нет бай-позиций, то отрываем
//---------------------------------- или
if (NumberOfPositions(NULL, OP_SELL, -1) <1) { // если нет селл--позиций, то отрываем
Посмотрите мой ответ здесь : https://www.mql5.com/ru/forum/111497/page544
Может подойдет. В вашем случае надо (сначала скопировать ф-ю в самый конец кода, вне ф-и Старт) для открытия добавить условие:
if (NumberOfPositions(NULL, OP_BUY, -1) <1) { // если нет бай-позиций, то отрываем
//---------------------------------- или
if (NumberOfPositions(NULL, OP_SELL, -1) <1) { // если нет селл--позиций, то отрываем
Спасибо за совет, сейчас попробую, но если есть ещё идеи то буду рад рекомендациям! )
кстати ещё вопрос, компилирую свой советник и выдаёт это
'&&' - series array has no left square bracket. zero shift assumed C:\Program Files (x86)\MetaTrader - Masterforex\experts\Na osnove Magic Number.mq4 (125, 82)
в чём ошибка этой строчки?
if ( MathAbs(rbci_green) > 0.0004 && Combo_blue > Combo_red2 && Prise2 > Open && Prise3 < Prise4 )
Opn_B = true;
Посмотрите мой ответ здесь : https://www.mql5.com/ru/forum/111497/page544
Может подойдет. В вашем случае надо (сначала скопировать ф-ю в самый конец кода, вне ф-и Старт) для открытия добавить условие:
if (NumberOfPositions(NULL, OP_BUY, -1) <1) { // если нет бай-позиций, то отрываем
//---------------------------------- или
if (NumberOfPositions(NULL, OP_SELL, -1) <1) { // если нет селл--позиций, то отрываем
Скорее всего, ошибка в др. месте.
Бывает так, когда ошибка имеет место в одном месте, а компилятор указывает другое. Особенно, если ошибка в пользовательских функциях.
Попробуйте скомел-ть код без этой строки.
Против открывания повторной позиции функция помогла, огромное спасибо! НО у меня так и не получается реализовать открытие следующего ордера другого типа пока открыт предыдущий! Т.Е. пока открыт бай открыть ещё и селл, в моей стратегии условий не 2 а 4 т.е. одно открытие бай, второе открытие селл, третье закрытие бай, четвёртое закрытие селл!
Я в таких случаях задаю разные магики в каждом случае, т.е. для каждого сигнала - задаю свой магик в ф-и ОРДЕРСЕНД.
Тогда :
if (NumberOfPositions(NULL, OP_BUY, Magic Number_1) <1) { // если нет бай-позиций, открытых по 1 сигналу, то отрываем
и т.д. ...
Я в таких случаях задаю разные магики в каждом случае, т.е. для каждого сигнала - задаю свой магик в ф-и ОРДЕРСЕНД.
Тогда :
if (NumberOfPositions(NULL, OP_BUY, Magic Number_1) <1) { // если нет бай-позиций, открытых по 1 сигналу, то отрываем
и т.д. ...
понял, спасибо большое за совет, а как в этом случае его генерировать? что-то типа этого?
init()
{
int _MagicNumber_1 = 0;
int _MagicNumber_2 = 0;
int Period_ID = 0;
switch ( Period() )
{
case PERIOD_MN1: Period_ID = 9; break;
case PERIOD_W1: Period_ID = 8; break;
case PERIOD_D1: Period_ID = 7; break;
case PERIOD_H4: Period_ID = 6; break;
case PERIOD_H1: Period_ID = 5; break;
case PERIOD_M30: Period_ID = 4; break;
case PERIOD_M15: Period_ID = 3; break;
case PERIOD_M5: Period_ID = 2; break;
case PERIOD_M1: Period_ID = 1; break;
}
_MagicNumber_1 = Expert_ID * 10 + Period_ID;
_MagicNumber_2 = Expert_ID * 10 + Period_ID;
return(0);
и кстати где лучше или правильнее расположить этот блок в старте или в функции инициализации?
У меня магики заданы примерно вот так:
int start() {
int Magic_1=Expert_ID;
int Magic_2=Expert_ID+2;
int Magic_3=Expert_ID+3;
int Magic_4=Expert_ID+4;
-.........
Либо (в простейшем случае) - прямо в глоб. переменных (т.е. во внеш. параметрах)
У меня магики заданы примерно вот так:
int start() {
int Magic_1=Expert_ID;
int Magic_2=Expert_ID+2;
int Magic_3=Expert_ID+3;
int Magic_4=Expert_ID+4;
-.........
Либо (в простейшем случае) - прямо в глоб. переменных (т.е. во внеш. параметрах)
Огромное спасибо! Оказывается я делал правильно но была ошибка, с помощью вашего примера я её увидел!
Остаётся только один вопрос
Огромное спасибо! Оказывается я делал правильно но была ошибка, с помощью вашего примера я её увидел!
Остаётся только один вопрос
'&&' - series array has no left square bracket. zero shift assumed C:\Program Files (x86)\MetaTrader - Masterforex\experts\Na osnove Magic Number.mq4 (125, 82)
вот такую ошибку выдаёт при компиляции, точнее сказать предупреждение, в чём ошибка этой строчки?
if ( MathAbs(rbci_green) > 0.0004 && Combo_blue > Combo_red2 && Prise2 > Open && Prise3 < Prise4 )
Трудно сказать. Проверьте, как задана у вас в-на rbci_green
По инструкции она должна быть задана double
А без этой строки компилируется ?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго времени суток, меня зовут Павел, у меня такая проблемка, я только месяц как более менее освоил MQL4, сейчас пытаюсь реализовать свою стратегию, но столкнулся с проблемой, мой эксперт добжен работать с 2 ордерами разных типов одновременно, другими словами если ордер SELL на закрыти не прибыльный или если пока он открыт образуются условия BUY чтобы можно было это сделать, и при этом общее число ордеров не нужно более 2, главное чётко следить за этими 2, подскажите плиз как это лучше всего реализовать? или подкиньте код эксперта в котором это можно стянуть!
Заранее огромное спасибо!