Корректное открытие нескольких позиций - страница 2

 
rid писал (а) >>

Вы сделали не так, как я писал. - ВЫ НЕ ПОСТАВИЛИ условие открытия очередной позиции в зависимость от наличия (открытия) предыдущей!

Лучше всего вам воспользоваться рекомендациями пред. сообщ. от YuraZ

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

Я сделал как вы сказали но у меня возникли сложности с магик номером и я переписал его без него и опять возникла ошибка 129.Я прикрепил файл проверьте пожалуйста.

Файлы:
 

Да проще всего так:

if (условия открытия 5 ордеров одновременно)
{
while(true)
{
result=OrderSend(ордер 1)

}

while(true)
{
result2=OrderSend(ордер 2)

}

и т.д.

}

Это гарантированно (если обрабатываются ошибки) открывает все ордера, если выполнено некое условие.

 
Bass писал (а) >>

Да проще всего так:

if (условия открытия 5 ордеров одновременно)
{
while(true)
{
result=OrderSend(ордер 1)

}

while(true)
{
result2=OrderSend(ордер 2)

}

и т.д.

}

Это гарантированно (если обрабатываются ошибки) открывает все ордера, если выполнено некое условие.

Если упрощенно то - да

однако если начинать детализировать, надо предусмотреть выход после нескольких неудачных попыток

 

if(!result)
{
error=GetLastError();
switch(error)
{
case 4: Print("Торговый сервер занят. Пробуем ещё раз...");Sleep(1000);continue;

case 137: Print("Брокер занят. Пробуем ещё раз...");Sleep(1000);continue;

case 146: Print("Подсистема торговли занята. Пробуем ещё...");Sleep(1000);continue;

case 2: Alert("Общая ошибка.");Sleep(1000);continue;
case 6: Alert("Нет связи с торговым сервером.");Sleep(1000);continue;
case 64: Alert("Счет заблокирован.");break;
case 133: Alert("Торговля запрещена.");break;
case 135: Alert("Цена изменилась.");RefreshRates();continue;
case 138: Alert("Реквот котировки."); RefreshRates();continue;
case 139: Alert("Ордер заблокирован и уже обрабатывается.");continue;
default : Print("Возникла ошибка - ",ErrorDescription(error));continue;
}

} else {error=0;break;}


Вот обработчик готовый. Т.е. если нет глобальных ошибок, то ордер откроется гарантированно.

 
misterx писал (а) >>

Я сделал как вы сказали но у меня возникли сложности с магик номером и я переписал его без него и опять возникла ошибка 129.Я прикрепил файл проверьте пожалуйста.

А что проверять? В тестере и в онлайне позиции открываются. По три сразу.

Как я понял, - именно этого вам и хотелось. Вот поставил на демо - и сразу открылись без проблем позиции.

Ошибок журнал не печатает...

 
misterx писал (а) >>

возникла ошибка 129.Я прикрепил файл проверьте пожалуйста.

//----------------------------------------------------------------------------------------

А вы знаете, что означает "ошибка 129" ?

Гляньте вот сюда - https://book.mql4.com/ru/appendix/errors

и подумайте, отчего могла произойти такая ошибка ?

Может быть дело то в начальных условиях для открытия, а вовсе не в порядке открытия?

 
Bass писал (а) >>

if(!result)
{
error=GetLastError();
switch(error)
{
case 4: Print("Торговый сервер занят. Пробуем ещё раз...");Sleep(1000);continue;

case 137: Print("Брокер занят. Пробуем ещё раз...");Sleep(1000);continue;

case 146: Print("Подсистема торговли занята. Пробуем ещё...");Sleep(1000);continue;

case 2: Alert("Общая ошибка.");Sleep(1000);continue;
case 6: Alert("Нет связи с торговым сервером.");Sleep(1000);continue;
case 64: Alert("Счет заблокирован.");break;
case 133: Alert("Торговля запрещена.");break;
case 135: Alert("Цена изменилась.");RefreshRates();continue;
case 138: Alert("Реквот котировки."); RefreshRates();continue;
case 139: Alert("Ордер заблокирован и уже обрабатывается.");continue;
default : Print("Возникла ошибка - ",ErrorDescription(error));continue;
}

} else {error=0;break;}

Вот обработчик готовый. Т.е. если нет глобальных ошибок, то ордер откроется гарантированно.

А как правильно его вставить в мой советник?

 
rid писал (а) >>

(Уже 40 $ по умолч. заработал на демо ваш эксперт!)

//----------------------------------------------------------------------------------------

А вы знаете, что означает "ошибка 129" ?

Гляньте вот сюда - https://book.mql4.com/ru/appendix/errors

и подумайте, отчего могла произойти такая ошибка ?

Может быть дело то в начальных условиях для открытия, а вовсе не в порядке открытия?

Закройте вручную одну из позиций и она не откроется снова .

Оставте советник работать несколько часов и вы увидете ошибки 138 и 129

Я специально упростил условие открытия позиций для того чтобы сделки были чаще и можно было быстрее получать результат на демо

 
rid писал (а) >>

А что проверять? В тестере и в онлайне позиции открываются. По три сразу.

Как я понял, - именно этого вам и хотелось. Вот поставил на демо - и сразу открылись без проблем позиции.

Ошибок журнал не печатает...

Закройте вручную все три позиции и советник начнёт открывать их .Попробуйте так 2-3раза и вы увидите ошибки 138 и 129

 
И НЕ удивительно. Если вы работаете на тф-1мин. Советник не успеват открыть позицию, как с новым тиком цена изменяется и появляется ошибка. Насколько я знаю, такая ошибка устраняется встроенной функцией
RefreshRates( )

//------------------------------------------

Так мне уже совсем непонятно! Как вы хотите, чтобы открывались позиции ? То вас не устраивает, что они "снова открываются" !

То не устраивает, что - "Закройте вручную одну из позиций и она не откроется снова " !

А вообще то, лучше бы вам не заморачиваться с тиками, а сделать работу эксперта по ЦЕНАМ ОТКРЫТИЯ

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