Помогите! Разъясните в чем проблема!

 

Всем добрый день!

Цель: Написать эксперта срабатывающего один раз при выходе цены из горизонтального торгового диапазона. Границы диапазона проставляются в ручную.

Вопрос: Объясните как сделать?!! Остальноя я сам попробую сварганить.

Мой код (пока без заморочек и только для тестера):

extern double PriceBuy=0;
extern double CloseBuy=0;
extern double CloseBuySL=0;
extern double PriceSell=0;
extern double CloseSell=0;
extern double CloseSellSL=0;

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
void start()
{
int Marker=0;
//----
if(Marker==0)
{if(Ask>=PriceBuy)
{OrderSend(Symbol(),OP_BUY,0.1,Ask,1,0,0,"Koment",0,0,Blue); return;}
else
{if(Ask<=PriceSell)
{OrderSend(Symbol(),OP_SELL,0.1,Bid,1,0,0,"Koment",0,0,Blue); return;}
}
}
if(Marker==0)
{
if(OrdersTotal()>0){if(OrderType()<1){if(Ask>CloseBuy){PosAllClose(); Marker=1; return;}}}
if(OrdersTotal()>0){if(OrderType()>0){if(Ask<CloseSell){PosAllClose(); Marker=1; return;}}}
if(OrdersTotal()>0){if(OrderType()<1){if(Ask<CloseBuySL){PosAllClose(); Marker=1; return;}}}
if(OrdersTotal()>0){if(OrderType()>0){if(Ask>CloseSellSL){PosAllClose(); Marker=1; return;}}}
}
//----
return;
}
//+------------------------------------------------------------------+
void PosAllClose()
//----------------
{
int i;
for( i=0;i<OrdersTotal();i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_BUY )
{
OrderClose(OrderTicket(),OrderLots(),Bid,2,Red);
}
else
{
if(OrderType()==OP_SELL )
{
OrderClose(OrderTicket(),OrderLots(),Ask,2,Red);
}
}
}
}

 

Ответ "в ДНК" - не подходит! )))

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

 
У тебя Маркер всегда равен нулю. Вынеси определение этой переменной за пределы start. А в остальном вроде сойдет и так.
Причина обращения: