Информация о настройке разрешения торговли в определенном направлении для советника - решено

 

При установки советника мы можем запретить ему торговать в бай или селл на первой вкладке. А какой функцией или командой советник может получить эту информацию? На деле функция OrderSend если торговля в этом направлении запрещена не возвращает -1, а функция GetLastError в свою очередь 0. И советник который предполагает одновременную торговлю в обе стороны всегда, на каждом тике безуспешно пытается выставить ордер, что неразумно. Так вот как советнику узнать разрешил ли человек торговать в настройках ему в том или ином направлении?

По сабжу никак, такого функционала в mt4 нет.

Предлагается 2 пути:
1) собственные настройки extern о направлении торговли
2) при возникновении первой ошибки 4110 или 4111 менять параметры советника так чтобы более не было попыток открыть ордер в этом направлении.


Всем спасибо.


 
keep87:

При установки советника мы можем запретить ему торговать в бай или селл на первой вкладке. А какой функцией или командой советник может получить эту информацию? На деле функция OrderSend если торговля в этом направлении запрещена не возвращает -1, а функция GetLastError в свою очередь 0. И советник который предполагает одновременную торговлю в обе стороны всегда, на каждом тике безуспешно пытается выставить ордер, что неразумно. Так вот как советнику узнать разрешил ли человек торговать в настройках ему в том или ином направлении?


Ага! А так же как бы советнику узнать - нажата ли кнопка советники? А то он будет на каждом тике пытаться открывать ордера в любую сторону при отжатой кнопке, что неразумно.
 
keep87:

При установки советника мы можем запретить ему торговать в бай или селл на первой вкладке. А какой функцией или командой советник может получить эту информацию? На деле функция OrderSend если торговля в этом направлении запрещена не возвращает -1, а функция GetLastError в свою очередь 0. И советник который предполагает одновременную торговлю в обе стороны всегда, на каждом тике безуспешно пытается выставить ордер, что неразумно. Так вот как советнику узнать разрешил ли человек торговать в настройках ему в том или ином направлении?


Вставте в советник GetLastError с анализом кода ошибки:

ERR_LONGS_NOT_ALLOWED 4110 Длинные позиции не разрешены. Необходимо проверить свойства эксперта.
ERR_SHORTS_NOT_ALLOWED 4111 Короткие позиции не разрешены. Необходимо проверить свойства эксперта.

 
zxc:

Ага! А так же как бы советнику узнать - нажата ли кнопка советники? А то он будет на каждом тике пытаться открывать ордера в любую сторону при отжатой кнопке, что неразумно.
IsTradeAllowed()
 
Sepulca:


Вставте в советник GetLastError с анализом кода ошибки:

ERR_LONGS_NOT_ALLOWED 4110 Длинные позиции не разрешены. Необходимо проверить свойства эксперта.
ERR_SHORTS_NOT_ALLOWED 4111 Короткие позиции не разрешены. Необходимо проверить свойства эксперта.

а заранее никак?
 
keep87:
IsTradeAllowed()

Банки, и некоторые другие, запрещают торговлю советниками. Или брокер может персонально запретить, если советник его задолбет пипсовкой. Вот как раз об этом IsTradeAllowed() и дает знать советнику, при нажатой кнопке "Советники".
 

Ладно, не буду намеками :)))

Скажу проще:

Что такое советник? Это программа. Программа для чего? Для терминала. Вы программируете, а терминал выполняет.

Как Вы считаете - если вы запретили открытие позиции на уровне терминала, нужно ли еще и программно (в коде советника) давать (или проверять) эту команду терминалу?

 
zxc:

Ладно, не буду намеками :)))

Скажу проще:

Что такое советник? Это программа. Программа для чего? Для терминала. Вы программируете, а терминал выполняет.

Как Вы считаете - если вы запретили открытие позиции на уровне терминала, нужно ли еще и программно (в коде советника) давать (или проверять) эту команду терминалу?

да, чтобы она не тратила время на ненужные действия.
 
keep87:

При установки советника мы можем запретить ему торговать в бай или селл на первой вкладке. А какой функцией или командой советник может получить эту информацию? На деле функция OrderSend если торговля в этом направлении запрещена не возвращает -1, а функция GetLastError в свою очередь 0. И советник который предполагает одновременную торговлю в обе стороны всегда, на каждом тике безуспешно пытается выставить ордер, что неразумно. Так вот как советнику узнать разрешил ли человек торговать в настройках ему в том или ином направлении?


Всё очень просто

extern bool NewBuy = true; // Новая торговля BUY (разрешена = true /запрещена = false)
extern bool NewSell = true; // Новая торговля SELL (разрешена.........../запрещена...........)

затем далее в программе проверяем разрешено ли торговать в определённом направлении

if (NewBuy ......) открываем бай если есть соответствие условию...

if (NewSell......) или открываем селл...

 
TEXX:


Всё очень просто

extern bool NewBuy = true; // Новая торговля BUY (разрешена = true /запрещена = false)
extern bool NewSell = true; // Новая торговля SELL (разрешена.........../запрещена...........)

затем далее в программе проверяем разрешено ли торговать в определённом направлении

if (NewBuy ......) открываем бай если есть соответствие условию...

if (NewSell......) или открываем селл...

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

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