Помогите решить пожалуйста проблему !!!

 
Помогите решить пожалуйста проблему !

У меня в советнике ордера открываются по определенным параметрам.


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);

если появляются новые параметры как мне их модифицировать. Как правильно это сделать ?!

проблема состоит в том что сигнал присутствует постоянно (пока не появиться новый с новыми параметрами) и потому открывается множество позиций (на каждом тике по одной) с одними и теми же параметрами. Как этого избежать.
 
itum:
У меня в советнике ордера открываются по определенным параметрам.

У многих так :)))

Вы уже задавали подобный вопрос в теме Любой вопрос новичка..., вариантов решения проблемы много, вам нужно отслеживать момент изменения «определенных параметров», например с помощью флагов. Например так: блок модификации закрыт. Параметры изменились, открыли блок модификации (флаг = 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 У меня уже просто сил нет, вроде бы фигня ! А оно ни как не выходит !((((((((

 
itum:

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; // если операйия прошла успешно, то до появления нового сигнала ордер не будет ставиться.

}

 
itum:

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 своя группа переменных.

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

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