Один советник на нескольких инструментах. Не работет условие. - страница 3

 
Dobr:

Вот в таком варианте одновременно открывается три позиции:

Мне очень интересно почему. Ведь обращение к глобальным переменным происходит не как к OrdersTotal (я так понимаю через сервер), а на уровне софта. Должно быть все четко и почти моментально.

Более того. Вот код с задержкой:

Задержка 0,5 сек (разброс задержки от 0,1 до 0,5 на разных инструментах). И ЧЕТЫРЕ (!!!) открытые позиции. Объясните, пожалуйста. Я сам не врублюсь.


GV преобразовываются, поскольку постоянно пишутся в файл и читаются из него. Поэтому GTF==0.0 не сработает, а GTF<0.05 ... 
 
tara:

GV преобразовываются, поскольку постоянно пишутся в файл и читаются из него. Поэтому GTF==0.0 не сработает, а GTF<0.05 ... 


GTF используется в этом примере как флаг.

Во здесь устанавливаем на ноль:

if (OrdersTotal()==0) GlobalVariableSet("GTF", 0.0);

Здесь проверяем истинность:

if (GlobalVariableGet("GTF")==0.0)
А здесь изменяем значение (закрываем замок):

 

if (Open[1]>Close[1] )   {GlobalVariableSet("GTF",0.1);
...

 Имеет значение только 0,0 и 0,1.

 
А Вы попробуйте заменить if (GlobalVariableGet("GTF")==0.0) на if (GlobalVariableGet("GTF")<0.05)
 
tara:
А Вы попробуйте заменить if (GlobalVariableGet("GTF")==0.0) на if (GlobalVariableGet("GTF")<0.05)
Заменил). За 1 секунду 25 открытых позиций.
 
Я настаиваю, мультивалютник в помощь.:)
 
Dobr:
Заменил). За 1 секунду 25 открытых позиций.


Задержка нужна. 
 
tara:

Задержка нужна. 

Не помогла бы. Уменьшить - уменьшила бы, но все равно с десяток поз открылся бы.
grell:
Я настаиваю, мультивалютник в помощь.:)


Я так понимаю эту идею:

Торгующий советник на одном графике (инструменте).  С других (через глобальные переменные) к нему поступают сигналы. Или как?

Я имею ввиду как проще, чтоб не расписывать всё в коде одного эксперта. 

 
Dobr:

Я так понимаю эту идею:

Торгующий советник на одном графике (инструменте).  С других (через глобальные переменные) к нему поступают сигналы. Или как?


На одном графике. Никаких глобальных переменных, просто функция signal в самом советнике. У сигнала 3 состояния. 1) Открытие позиции, 2) удержание позиции 3) нет сигнала.
 
grell:
Я настаиваю, мультивалютник в помощь.:)


Некорректное сравнение double снижало количество ошибочных позиций. Отсюда - вывод: позиции открываются прежде, чем меняется значение GV. 

имхенько, надо либо рихтовать операционную среду (MT), либо компенсировать одну дырку другой (создавать ситуацию, когда попытка открытия ордера заведомо вызовет ошибку). 

Я предложил бы разработчикам дать возможность пользователю ограничивать количество одновременно отправляемых на сервер ордеров.  

Ну, а для топикстартера, Ваша рекомендация - наилучшая, опять таки - имхенько :)  

 
tara:


Некорректное сравнение double снижало количество ошибочных позиций. Отсюда - вывод: позиции открываются прежде, чем меняется значение GV. 

имхенько, надо либо рихтовать операционную среду (MT), либо компенсировать одну дырку другой (создавать ситуацию, когда попытка открытия ордера заведомо вызовет ошибку). 

Я предложил бы разработчикам дать возможность пользователю ограничивать количество одновременно отправляемых на сервер ордеров.  

Здравая идея(и).
grell:

На одном графике. Никаких глобальных переменных, просто функция signal в самом советнике. У сигнала 3 состояния. 1) Открытие позиции, 2) удержание позиции 3) нет сигнала.
Спасибо. Попробую.
Причина обращения: