Линии ограничивающие работу советника

 

Добрый день.

Есть советник, работает в канале неплохо.

Можно ли сделать скрипт, чтобы в случае пересечения ценой одной из линий канала, нарисованных вручную,

все позиции закрывались и работа советника прекращалась.

Может где то уже есть готовый такой скрипт.

 
Stells >>:

Добрый день.

Есть советник, работает в канале неплохо.

Можно ли сделать скрипт, чтобы в случае пересечения ценой одной из линий канала, нарисованных вручную,

все позиции закрывались и работа советника прекращалась.

Может где то уже есть готовый такой скрипт.

посмотрите фрагмент кода на МТ5

YuraZ писал(а) >>

:-) не обижаюсь ...

--

т е создаем свою линию тренда! обзываем ее допустим BUYTREND

вписывая "лапками" т е руками в поле ! это значение

в эксперте пытаемся читать название

и не получается читать ?

верно ?

ну мысль понятна проверим!

---

p.s.

( при ударе в линию желаем что бы эксперт пробаился или закрыл селл )

 
Sorento >>:

посмотрите фрагмент кода на МТ5

Код посмотрел, но мало что понял,к сожалению.

 
Stells >>:

Можно ли сделать скрипт, чтобы в случае пересечения ценой одной из линий канала, нарисованных вручную,

все позиции закрывались и работа советника прекращалась.

Может где то уже есть готовый такой скрипт.

Вот тут посм.

http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=41

 

здесь советник полноценный торгующий от линий.

а мне нужно чтобы позиции все закрылись при пересечении линий (наклонных, не горизонтальных как в советнике) и советник мой больше не торговал.

 
Stells >>:

здесь советник полноценный торгующий от линий.

а мне нужно чтобы позиции все закрылись при пересечении линий (наклонных, не горизонтальных как в советнике) и советник мой больше не торговал.

Там есть и наклонные линии. - "Советник поддерживает два типа линий: горизонтальная и трендовая."(с)

Попробуйте в скрипт переделать, если не найдете ..

 
rid >>:

Там есть и наклонные линии. - "Советник поддерживает два типа линий: горизонтальная и трендовая."(с)

Попробуйте в скрипт переделать, если не найдете ..

Rid, вы бы не могли переделать ?

Я код понимаю, а сам написать пока не могу что то новое. Изучаю.

 

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

Посмотрите вот здесь - https://book.mql4.com/ru/programm/special

может  поможет.

 
Stells >>:

Есть советник, работает в канале неплохо.

Можно ли сделать скрипт, чтобы в случае пересечения ценой одной из линий канала, нарисованных вручную,

все позиции закрывались и работа советника прекращалась.

Можно оформить в виде зацикленного скрипта, который в случае нужного условия (у вас это выход цены за линии) закрывает все позиции и средствами WinAPI "отжимает" кнопку "Expert Advisors".

При такой реализации можно контролировать работу (продаваемых) советников без исходников (EX4-файлы), т.к. не требуется никакого вмешательства в их исходный код.

 
Stells >>:

Добрый день.

Есть советник, работает в канале неплохо.

Можно ли сделать скрипт, чтобы в случае пересечения ценой одной из линий канала, нарисованных вручную,

все позиции закрывались и работа советника прекращалась.

Может где то уже есть готовый такой скрипт.

Добавь в советник 2 функции и пару сток после int start()



//это функция трендовых линий, их можно двигать как угодно но вторые координаты должны совпадать с нулевым баром
int trend_chanel()
{
static int time;int t;
RefreshRates();if(Time[0] == time)return(0);time = Time[0];
if(Period()==PERIOD_M1)t=60;if(Period()==PERIOD_M5)t=60*5;if(Period()==PERIOD_M15)t=60*15;
if(Period()==PERIOD_M30)t=60*30;if(Period()==PERIOD_H1)t=60*60;if(Period()==PERIOD_H4)t=60*60*4;
if(ObjectGet("TREND1",OBJPROP_PRICE1)==0)
{ObjectCreate("TREND1",OBJ_TREND, 0,TimeCurrent()-10*60*60,Bid+250*Point,TimeCurrent(),Bid+250*Point);
ObjectSet("TREND1",OBJPROP_COLOR,Maroon);}
if(ObjectGet("TREND3",OBJPROP_PRICE1)==0)
{ObjectCreate("TREND3",OBJ_TREND, 0,TimeCurrent()-10*60*60,Bid-250*Point,TimeCurrent(),Bid-250*Point);
ObjectSet("TREND3",OBJPROP_COLOR,Maroon);}
double cdelta1=ObjectGet("TREND1",OBJPROP_PRICE2)-ObjectGet("TREND1",OBJPROP_PRICE1);
double tdelta1=(ObjectGet("TREND1",OBJPROP_TIME2)-ObjectGet("TREND1",OBJPROP_TIME1))/t;
ObjectMove("TREND1",1,TimeCurrent(),ObjectGet("TREND1",OBJPROP_PRICE2)+cdelta1/tdelta1);
ObjectMove("TREND3",1,TimeCurrent(),ObjectGet("TREND3",OBJPROP_PRICE2)+cdelta1/tdelta1);
}

//это функция закрытия ордеров
int close()
{
for(int i=OrdersTotal(); i+1>=0; i--)
{
RefreshRates();
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderType()==OP_BUY))
OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(Symbol(),MODE_SPREAD));
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderType()==OP_SELL))
OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(Symbol(),MODE_SPREAD));
}}
//+------------------------------------------------------------------+

а это после int start()

if(Bid>ObjectGet("TREND1",OBJPROP_PRICE2)||Ask<ObjectGet("TREND3",OBJPROP_PRICE2)){close();return(0);}

При выходе цены выше или ниже трендовых линий ордера закроются и советник работать не будет!

 
forex-k >>:

Добавь в советник 2 функции и пару сток после int start()



//это функция трендовых линий, их можно двигать как угодно но вторые координаты должны совпадать с нулевым баром
int trend_chanel()
{
static int time;int t;
RefreshRates();if(Time[0] == time)return(0);time = Time[0];
if(Period()==PERIOD_M1)t=60;if(Period()==PERIOD_M5)t=60*5;if(Period()==PERIOD_M15)t=60*15;
if(Period()==PERIOD_M30)t=60*30;if(Period()==PERIOD_H1)t=60*60;if(Period()==PERIOD_H4)t=60*60*4;
if(ObjectGet("TREND1",OBJPROP_PRICE1)==0)
{ObjectCreate("TREND1",OBJ_TREND, 0,TimeCurrent()-10*60*60,Bid+250*Point,TimeCurrent(),Bid+250*Point);
ObjectSet("TREND1",OBJPROP_COLOR,Maroon);}
if(ObjectGet("TREND3",OBJPROP_PRICE1)==0)
{ObjectCreate("TREND3",OBJ_TREND, 0,TimeCurrent()-10*60*60,Bid-250*Point,TimeCurrent(),Bid-250*Point);
ObjectSet("TREND3",OBJPROP_COLOR,Maroon);}
double cdelta1=ObjectGet("TREND1",OBJPROP_PRICE2)-ObjectGet("TREND1",OBJPROP_PRICE1);
double tdelta1=(ObjectGet("TREND1",OBJPROP_TIME2)-ObjectGet("TREND1",OBJPROP_TIME1))/t;
ObjectMove("TREND1",1,TimeCurrent(),ObjectGet("TREND1",OBJPROP_PRICE2)+cdelta1/tdelta1);
ObjectMove("TREND3",1,TimeCurrent(),ObjectGet("TREND3",OBJPROP_PRICE2)+cdelta1/tdelta1);
}

//это функция закрытия ордеров
int close()
{
for(int i=OrdersTotal(); i+1>=0; i--)
{
RefreshRates();
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderType()==OP_BUY))
OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(Symbol(),MODE_SPREAD));
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderType()==OP_SELL))
OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(Symbol(),MODE_SPREAD));
}}
//+------------------------------------------------------------------+

а это после int start()

if(Bid>ObjectGet("TREND1",OBJPROP_PRICE2)||Ask<ObjectGet("TREND3",OBJPROP_PRICE2)){close();return(0);}

При выходе цены выше или ниже трендовых линий ордера закроются и советник работать не будет!

При компиляции пишет что функция trend_chanel() нигде не используется и будет удалена.

И что значит: "вторые координаты должны совпадать с нулевым баром", что такое вторые координаты ?