Как посылать только один ордер по заданному сигналу?

 

 Я посылаю лимитник после проверки условий на вход и проверки, что нет открытых ордеров.

 Если не проверять кол-во открытых ордеров, то ордера откладываются пачками чуть ли не на каждом тике. Посоветуйте, как ограничить их количество. Нужно что бы по сигналу открывался один ордер, но по следующему сигналу ещё один. Просто часто так получается, что предыдущий открытый ордер ещё не закрыт, а нужно послать ещё один.. т.к. появился следующий сигнал. Выходит, что следующий сигнал не отработает, т.к. по условию будет так, что если ордер присуствует, то не входим в рынок.

 
Как вариант можно объявить булеву переменную, которая будет работать как флаг, разрешающий установку ордера. Пришёл сигнал - проверяем флаг - если он установлен, то открываем ордер и сбрасываем флаг. Если не установлен, то ставить ордер нельзя даже по сигналу. Затем проходит какое-то время и сигнал исчезает. Если сигнала нет, то устанавливаем флаг независимо от наличия ордеров. В результате получится, что на следующем сигнале встанет ордер и снова будет сброшен флаг...
 

Только при таком подходе нужно сделать так, чтоб обрабатывалась кодом и ситуация, если вдруг отключилось электропиание - чтоб не получилось, что пришёл сигнал, встал ордер, сбросили флаг, отрубилось электричество, через минуту включилось, мы запустили терминал и советник снова поставил ордер по текущему сигналу, который за предшествующую минуту ещё не успел исчезнуть.

Сделать это не трудно - ведь у Вас помимо всего есть и функция init()... 

 
hoz:

 Я посылаю лимитник после проверки условий на вход и проверки, что нет открытых ордеров.

 Если не проверять кол-во открытых ордеров, то ордера откладываются пачками чуть ли не на каждом тике. Посоветуйте, как ограничить их количество. Нужно что бы по сигналу открывался один ордер, но по следующему сигналу ещё один. Просто часто так получается, что предыдущий открытый ордер ещё не закрыт, а нужно послать ещё один.. т.к. появился следующий сигнал. Выходит, что следующий сигнал не отработает, т.к. по условию будет так, что если ордер присуствует, то не входим в рынок.


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

Сравниваем не серверное время, а обьявляем статическую переменную,

и если она не равна времени открытия нулевого бара

if(T != iTime(Symbol(),1440,0)

то присваевам ей время открытия нулевого бара

     {
      T = iTime(Symbol(),1440,0;               
      B = true;               
     }
ВСЕ,,, как-то так 
 
hoz:

 Я посылаю лимитник после проверки условий на вход и проверки, что нет открытых ордеров.

 Если не проверять кол-во открытых ордеров, то ордера откладываются пачками чуть ли не на каждом тике. Посоветуйте, как ограничить их количество. Нужно что бы по сигналу открывался один ордер, но по следующему сигналу ещё один. Просто часто так получается, что предыдущий открытый ордер ещё не закрыт, а нужно послать ещё один.. т.к. появился следующий сигнал. Выходит, что следующий сигнал не отработает, т.к. по условию будет так, что если ордер присуствует, то не входим в рынок.

Установите интервал между ордерами ну скажем час.
 
drknn:
Как вариант можно объявить булеву переменную, которая будет работать как флаг, разрешающий установку ордера. Пришёл сигнал - проверяем флаг - если он установлен, то открываем ордер и сбрасываем флаг. Если не установлен, то ставить ордер нельзя даже по сигналу. Затем проходит какое-то время и сигнал исчезает. Если сигнала нет, то устанавливаем флаг независимо от наличия ордеров. В результате получится, что на следующем сигнале встанет ордер и снова будет сброшен флаг...


 Я вот, что думаю. Владимир, по вашему, нужно по пришествии сигнала проверять флаг.. Тут то понятно. Но где задавать флаг? Т.е. порядок такой:

 В глобальных переменных, например, я объявил флаг:

flag_up = false;

 По пришествии сигнала, мы должны проверить флаг. В какой момент и где  нужно возвести флаг. По сути, раньше я думал, что его нужно возводить тогда, когда поступит сигнал, но это не логично. Он должен стать в true независимо от поступления сигнала, и, самое главное, этот флаг должен подыматься только раз за каждое поступление сигнала, чтобы по каждому сигналу был только один ордер.

Надеюсь я доходчиво объяснил свою точку зрения.

 
r772ra:


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

Сравниваем не серверное время, а обьявляем статическую переменную,

и если она не равна времени открытия нулевого бара

то присваевам ей время открытия нулевого бара

ВСЕ,,, как-то так 


 

 Там ф-ция нового бара, а я как-раз таки и хочу научится работать с флагами.

 

paukas:
Установите интервал между ордерами ну скажем час.

 Это не то, что мне нужно. Есои интервал час.. то это реализовать элементарно, внедрением ф-ции открытия нового бара с периодом час.. Не то мне нужно.
 
любой флаг при пропадении (или пропадании :-))) питания (читай интернета) соскочит, самый тупой вариант писать в файл, на диск... потом ( после подачи питания) проверять состояние переменной...
 
zoritch:
любой флаг при пропадении (или пропадании :-))) питания (читай интернета) соскочит, самый тупой вариант писать в файл, на диск... потом ( после подачи питания) проверять состояние переменной...



Делаете флаг трехпозиционным: 1. Было открытие 2. Было закрытие 3. Была инициализация

Или - через GV 

 
tara:


Или - через GV 


 а где реально хранятся GV ?
 
zoritch:

 а где реально хранятся GV ?
terminal\profiles\gvariables.dat
Причина обращения: