У меня в советнике ордера открываются по определенным параметрам.
У многих так :)))
Вы уже задавали подобный вопрос в теме Любой вопрос новичка..., вариантов решения проблемы много, вам нужно отслеживать момент изменения «определенных параметров», например с помощью флагов. Например так: блок модификации закрыт. Параметры изменились, открыли блок модификации (флаг = true)внесли изменения, если все прошло успешно, то опять закрыли блок мод. (флаг = false). Ну и опять, слишком мало кода, по тому что вы выложили конкретнее ничего сказать нельзя.
Ok !
У меня есть две точки (с параметрами) для открытия ордеров.
Верхняя - для открытия OP_BUYSTOP
Нижняя - для открытия OP_SELLSTOP
Если параметры позволяют (то есть НЕ слишком близкие стопы и правильно рассчитанные цены в
стопах). тогда открываются ордера. Если же неправильные параметры то ошибка и ждем пока будут нормальные параметры для открытия ордеров.
ticket1=OrderSend(Symbol(),OP_SELLSTOP,0.01,parameter1,3,parameter2,parameter3,"sample",1,0,Green); ticket2=OrderSend(Symbol(),OP_BUYSTOP,0.01,parameter1,3,parameter2,parameter3,"sample",2,0,Green);
если же цена для входа меняется в Верхней точке или Нижней то нужно модифицировать ордер на новую точку. проблема состоит в том что сигнал присутствует постоянно (пока не появиться новый с новыми параметрами) и потому открывается множество позиций (на каждом тике по одной) с одними и теми же параметрами. Как этого избежать.
P.S У меня уже просто сил нет, вроде бы фигня ! А оно ни как не выходит !((((((((
Ok !
У меня есть две точки (с параметрами) для открытия ордеров.
Верхняя - для открытия OP_BUYSTOP
Нижняя - для открытия OP_SELLSTOP
Если параметры позволяют (то есть НЕ слишком близкие стопы и правильно рассчитанные цены в стопах). тогда открываются ордера. Если же неправильные параметры то ошибка и ждем пока будут нормальные параметры для открытия ордеров.
если же цена для входа меняется в Верхней точке или Нижней то нужно модифицировать ордер на новую точку. проблема состоит в том что сигнал присутствует постоянно (пока не появиться новый с новыми параметрами) и потому открывается множество позиций (на каждом тике по одной) с одними и теми же параметрами. Как этого избежать.
P.S У меня уже просто сил нет, вроде бы фигня ! А оно ни как не выходит !((((((((
введите static флаг, например, static bool NewSignal=false
отслеживайте факт изменения значения сигнала (это сможете сделать?) и при его изменении выставляйте флаг в true. после установки ордера сбрасывайте флаг обратно в false. Грубо говоря так:
if (NewSignal)
{
ticket1=OrderSend(Symbol(),OP_SELLSTOP,0.01,parameter1,3,parameter2,parameter3,"sample",1,0,Green);
if (ticket1==0) NewSignal=false; // если операйия прошла успешно, то до появления нового сигнала ордер не будет ставиться.
}
Ok !
У меня есть две точки (с параметрами) для открытия ордеров.
Верхняя - для открытия OP_BUYSTOP
Нижняя - для открытия OP_SELLSTOP
Если параметры позволяют (то есть НЕ слишком близкие стопы и правильно рассчитанные цены в
стопах). тогда открываются ордера. Если же неправильные параметры то ошибка и ждем пока будут нормальные параметры для открытия ордеров.
если же цена для входа меняется в Верхней точке или Нижней то нужно модифицировать ордер на новую точку. проблема состоит в том что сигнал присутствует постоянно (пока не появиться новый с новыми параметрами) и потому открывается множество позиций (на каждом тике по одной) с одними и теми же параметрами. Как этого избежать.
P.S У меня уже просто сил нет, вроде бы фигня ! А оно ни как не выходит !((((((((
Кода от вас не дождешься :(((
Вот например вам шаблон:
#property copyright "Copyright © 2010, Anatoly Sergeev" #property link "mql.sergeev@yandex.ru" double parameter1_sellstop, parameter2_sellstop, parameter3_sellstop; double control_par1_sellstop; double parameter1_buystop, parameter2_buystop, parameter3_buystop; double control_par1_buystop; int ticket1,ticket2; //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start(){ //+------------------------------------------------------------------+ //| | //| -------------------------------------------------------- | //| здесь вы что то делаете с переменными | //| parameter1, parameter2, parameter3 | //| -------------------------------------------------------- | //| | //+------------------------------------------------------------------+ if(!getOrders(ticket1)){ //пока ордер "жив" нового открыто не будет ticket1 = OrderSend(Symbol(),OP_SELLSTOP,0.01,parameter1_sellstop,3,parameter2_sellstop,parameter3_sellstop,"sample",1,0,Green); control_par1_sellstop = parameter1_sellstop; //сохранение цены открытия } //+------------------------------------------------------------------+ if(!getOrders(ticket2)){ //пока ордер "жив" нового открыто не будет ticket2 = OrderSend(Symbol(),OP_BUYSTOP,0.01,parameter1_buystop,3,parameter2_buystop,parameter3_buystop,"sample",2,0,Green); control_par1_buystop = parameter1_buystop; //сохранение цены открытия } //+------------------------------------------------------------------+ if(parameter1_sellstop != control_par1_sellstop){ //если цена открытия изменилась то перетаскиваем/модифицируем SELLSTOP. OrderModify(ticket1, parameter1_sellstop, parameter2_sellstop, parameter3_sellstop, 0); control_par1_sellstop = parameter1_sellstop; //блок обновления сохранененных параметров } //+------------------------------------------------------------------+ if(parameter1_buystop != control_par1_buystop){ //если цена открытия изменилась то перетаскиваем/модифицируем BUYSTOP. OrderModify(ticket2, parameter1_sellstop, parameter2_sellstop, parameter3_sellstop, 0); control_par1_buystop = parameter1_buystop; //блок обновления сохранененных параметров } //+------------------------------------------------------------------+ } //+------------------------------------------------------------------+ //| ФУНКЦИЯ ПОИСКА ОРДЕРА | //+------------------------------------------------------------------+ bool getOrders(int ticket){ int index = 0; while(OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){ if(OrderTicket() == ticket)return(true); index++; } return(false); } //+------------------------------------------------------------------+
Вопрос, почему ордера разного типа открываются с одинаковыми параметрами? Этого в принципе быть не может. Поэтому в этом шаблоне для sellstop и buystop своя группа переменных.
В самом начале работы шаблона открываются ордера, запоминаются их тикеты, далее по ним будет идентификация, и отслеживание состояния. При открытии ордеров сохраняются их цены открытия. Далее они будут сравниваться с текущим состоянием и как только оно изменится включится блок модификации. Так как кодов вы не показываете это шаблон не оптимален, и дает лишь общую картину, того как можно реализовать то что вы хотите.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
У меня в советнике ордера открываются по определенным параметрам.
если появляются новые параметры как мне их модифицировать. Как правильно это сделать ?!
проблема состоит в том что сигнал присутствует постоянно (пока не появиться новый с новыми параметрами) и потому открывается множество позиций (на каждом тике по одной) с одними и теми же параметрами. Как этого избежать.