Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликуй задачу в сервисе Фриланс и разработчики выполнят ее.
hoz
1936
hoz 2012.12.09 14:04 

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

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

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

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

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

Alekseu Fedotov
818
Alekseu Fedotov 2012.12.09 17:16  
hoz:

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

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


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

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

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

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

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

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

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

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

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


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

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

flag_up = false;

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

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

hoz
1936
hoz 2012.12.10 21:39  
r772ra:


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

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

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

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

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


 

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

 

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

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



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

Или - через GV 

zoritch
4326
zoritch 2012.12.11 04:26  
tara:


Или - через GV 


 а где реально хранятся GV ?
TarasBY
1739
TarasBY 2012.12.11 09:38  
zoritch:

 а где реально хранятся GV ?
terminal\profiles\gvariables.dat
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий