отложенный ордер по горизонтальной линии. помогите, пожалуйста.. самому не выходит

 

здравствуйте.

смысл советника - выставление пробойного ордера на расстоянии от горизонтальной линии.

линию выставляет. но она передвигается вместе с ценой. не пойму как ее "заставить" держаться на месте.

если не жалко, может кто подскажет что еще в коде не так. будет ли выставляться ордер по линии.

тонких намеков и тонкого программного юмора я вряд ли оценю...

потому просьба писать конкретный код. спасибо.

//+------------------------------------------------------------------+
//| RA.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
//--- input parameters
extern bool sell = 1; // разрешение продавать
extern bool buy = 1;
extern double lots = 0.1;
extern int sl = 50;
extern int tp = 100;
extern int trend_period = 10; //есть индикатор trend. с периодом trend_period
extern double trend_lev_b = 0.1; // на этом уровне индикатора должен быть ордер
extern double trend_lev_s = -0.1;
extern int otkat = 50; // на этом расстоянии на графике цены, при достижении индикатором trend
extern int order = 20; // уровня trend_lev должна рисоваться горизонтальная линия "otkat_line".
// если ордер buy - ниже. на величину otkat
// если ордер sell - выше
// при достижении ценой этой горизонтальной линии,
// выставляеться стоп ордер на расстояние order


extern double bez = 15;
extern double tral_step = 15;
extern double tral_start = 10;


//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
double trend = iCustom (Symbol(),0,"trend",trend_period,0,0);
string otkat_line_sell ="otkat_sell";
string otkat_line_buy ="otkat_buy";

double buy_otkat = Ask-(otkat*Point);//ниже от цены
double sell_otkat = Bid+(otkat*Point);//выше от цены


//buy
WindowRedraw(); // принудительная перерисовка графика
RefreshRates(); // обновление текущих Bid и Ask
if (trend>trend_lev_b && buy==1 )
{
//OrderSend (Symbol(),OP_BUY, lots, Ask,3, Bid-sl*Point, Bid+tp*Point );
ObjectCreate (otkat_line_buy, OBJ_HLINE, 0, 0, 0);
ObjectSet (otkat_line_buy, OBJPROP_PRICE1, buy_otkat);
}

// найти линию и выставить ордер при касании ценой
if (ObjectFind ("buy_otkat") == Point)
OrderSend (Symbol(),OP_BUYSTOP, lots, Ask+Point*order,3, Bid-sl*Point, Bid+tp*Point );//Ask+Point*order расстояние стоп ордера




//sell
WindowRedraw(); // принудительная перерисовка графика
RefreshRates(); // обновление текущих Bid и Ask
if (trend<trend_lev_s && sell==1 )
{
//OrderSend (Symbol(),OP_SELL,lots, Bid,3, Ask+sl*Point, Bid-tp*Point );
ObjectCreate (otkat_line_sell, OBJ_HLINE, 0, 0, 0);
ObjectSet (otkat_line_sell, OBJPROP_PRICE1, sell_otkat);
}

// найти линию и выставить ордер. линия выставляеться. но она привязана к цене... просто держиться на расстоянии Bid-Point*order
if (ObjectFind("sell_otkat") == Point)
OrderSend (Symbol(),OP_SELLSTOP,lots, Bid-Point*order,3, Ask+sl*Point, Bid-tp*Point );//Bid-Point*order расстояние стоп ордера




//----
return(0);
}
//+------------------------------------------------------------------+

 
//+------------------------------------------------------------------+
//| RA.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
//--- input parameters
extern bool sell = 1; // разрешение продавать
extern bool buy = 1;
extern double lots = 0.1;
extern int sl = 50;
extern int tp = 100;
extern int trend_period = 10; //есть индикатор trend. с периодом trend_period
extern double trend_lev_b = 0.1; // на этом уровне индикатора должен быть ордер
extern double trend_lev_s = -0.1;
extern int otkat = 50; // на этом расстоянии на графике цены, при достижении индикатором trend
extern int order = 20; // уровня trend_lev должна рисоваться горизонтальная линия "otkat_line".
// если ордер buy - ниже. на величину otkat
// если ордер sell - выше
// при достижении ценой этой горизонтальной линии,
// выставляеться стоп ордер на расстояние order


extern double bez = 15;
extern double tral_step = 15;
extern double tral_start = 10;


//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
double trend = iCustom (Symbol(),0,"trend",trend_period,0,0);
string otkat_line_sell ="otkat_sell";
string otkat_line_buy ="otkat_buy";

double buy_otkat = Ask-(otkat*Point);//ниже от цены
double sell_otkat = Bid+(otkat*Point);//выше от цены


//buy
WindowRedraw(); // принудительная перерисовка графика
RefreshRates(); // обновление текущих Bid и Ask
if (trend>trend_lev_b && buy==1 )
{
//OrderSend (Symbol(),OP_BUY, lots, Ask,3, Bid-sl*Point, Bid+tp*Point );
ObjectCreate (otkat_line_buy, OBJ_HLINE, 0, 0, 0);
ObjectSet (otkat_line_buy, OBJPROP_PRICE1, buy_otkat);
}

// найти линию и выставить ордер при касании ценой 
if (ObjectFind ("buy_otkat") == Point)
OrderSend (Symbol(),OP_BUYSTOP, lots, Ask+Point*order,3, Bid-sl*Point, Bid+tp*Point );//Ask+Point*order расстояние стоп ордера




//sell
WindowRedraw(); // принудительная перерисовка графика 
RefreshRates(); // обновление текущих Bid и Ask 
if (trend<trend_lev_s && sell==1 )
{
//OrderSend (Symbol(),OP_SELL,lots, Bid,3, Ask+sl*Point, Bid-tp*Point );
ObjectCreate (otkat_line_sell, OBJ_HLINE, 0, 0, 0);
ObjectSet (otkat_line_sell, OBJPROP_PRICE1, sell_otkat); 
}

// найти линию и выставить ордер. линия выставляеться. но она привязана к цене... просто держиться на расстоянии Bid-Point*order
if (ObjectFind("sell_otkat") == Point)
OrderSend (Symbol(),OP_SELLSTOP,lots, Bid-Point*order,3, Ask+sl*Point, Bid-tp*Point );//Bid-Point*order расстояние стоп ордера 




//----
return(0);
}
//+------------------------------------------------------------------+ 



Так с SRC лучше! Удачи!