Учёт ордеров, подскажите в разработке плиз!!!

 

Доброго времени суток, меня зовут Павел, у меня такая проблемка, я только месяц как более менее освоил MQL4, сейчас пытаюсь реализовать свою стратегию, но столкнулся с проблемой, мой эксперт добжен работать с 2 ордерами разных типов одновременно, другими словами если ордер SELL на закрыти не прибыльный или если пока он открыт образуются условия BUY чтобы можно было это сделать, и при этом общее число ордеров не нужно более 2, главное чётко следить за этими 2, подскажите плиз как это лучше всего реализовать? или подкиньте код эксперта в котором это можно стянуть!

Заранее огромное спасибо! 

 

Посмотрите мой ответ здесь : https://www.mql5.com/ru/forum/111497/page544

Может подойдет.  В вашем случае надо (сначала скопировать ф-ю в самый конец кода, вне ф-и Старт) для открытия добавить условие:  

if (NumberOfPositions(NULL, OP_BUY, -1) <1) { // если  нет бай-позиций, то отрываем

//---------------------------------- или 

if (NumberOfPositions(NULL, OP_SELL, -1) <1) { // если нет селл--позиций, то отрываем
 

 
rid >>:

Посмотрите мой ответ здесь : 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;




 
rid >>:

Посмотрите мой ответ здесь : https://www.mql5.com/ru/forum/111497/page544

Может подойдет.  В вашем случае надо (сначала скопировать ф-ю в самый конец кода, вне ф-и Старт) для открытия добавить условие:  

if (NumberOfPositions(NULL, OP_BUY, -1) <1) { // если  нет бай-позиций, то отрываем

//---------------------------------- или 

if (NumberOfPositions(NULL, OP_SELL, -1) <1) { // если нет селл--позиций, то отрываем
 

Против открывания повторной позиции функция помогла, огромное спасибо! НО у меня так и не получается реализовать открытие следующего ордера другого типа пока открыт предыдущий! Т.Е. пока открыт бай открыть ещё и селл, в моей стратегии условий не 2 а 4 т.е. одно открытие бай, второе открытие селл, третье закрытие бай, четвёртое закрытие селл!
 

Скорее всего,  ошибка в др. месте.

Бывает так, когда ошибка имеет место в одном месте, а компилятор указывает другое. Особенно, если ошибка в пользовательских функциях.

Попробуйте скомел-ть код без этой строки. 

 
Pahnutiy >>:
Против открывания повторной позиции функция помогла, огромное спасибо! НО у меня так и не получается реализовать открытие следующего ордера другого типа пока открыт предыдущий! Т.Е. пока открыт бай открыть ещё и селл, в моей стратегии условий не 2 а 4 т.е. одно открытие бай, второе открытие селл, третье закрытие бай, четвёртое закрытие селл!

  Я в таких случаях задаю разные магики в каждом случае, т.е. для каждого сигнала - задаю свой магик в ф-и ОРДЕРСЕНД. 

Тогда :

if (NumberOfPositions(NULL, OP_BUY, Magic Number_1) <1) { // если нет бай-позиций,  открытых по 1 сигналу, то отрываем 

 и т.д. ... 

 
rid >>:

  Я в таких случаях задаю разные магики в каждом случае, т.е. для каждого сигнала - задаю свой магик в ф-и ОРДЕРСЕНД. 

Тогда :

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;

-.........
  Либо (в простейшем случае) - прямо в глоб. переменных (т.е. во внеш. параметрах)
 

 
rid >>:

У меня магики заданы примерно вот так:

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;

-.........
  Либо (в простейшем случае) - прямо в глоб. переменных (т.е. во внеш. параметрах)
 


Огромное спасибо! Оказывается я делал правильно но была ошибка, с помощью вашего примера я её увидел! 

Остаётся только один вопрос  

 
Pahnutiy >>:


Огромное спасибо! Оказывается я делал правильно но была ошибка, с помощью вашего примера я её увидел! 

Остаётся только один вопрос  



'&&' - 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  

А без этой строки компилируется ? 

Причина обращения: