Добрый день.
Есть советник, работает в канале неплохо.
Можно ли сделать скрипт, чтобы в случае пересечения ценой одной из линий канала, нарисованных вручную,
все позиции закрывались и работа советника прекращалась.
Может где то уже есть готовый такой скрипт.
посмотрите фрагмент кода на МТ5
YuraZ писал(а) >>
:-) не обижаюсь ...
--
т е создаем свою линию тренда! обзываем ее допустим BUYTREND
вписывая "лапками" т е руками в поле ! это значение
в эксперте пытаемся читать название
и не получается читать ?
верно ?
ну мысль понятна проверим!
---
p.s.
( при ударе в линию желаем что бы эксперт пробаился или закрыл селл )
Можно ли сделать скрипт, чтобы в случае пересечения ценой одной из линий канала, нарисованных вручную,
все позиции закрывались и работа советника прекращалась.
Может где то уже есть готовый такой скрипт.
Вот тут посм.
http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=41
Вот тут посм.
http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=41
здесь советник полноценный торгующий от линий.
а мне нужно чтобы позиции все закрылись при пересечении линий (наклонных, не горизонтальных как в советнике) и советник мой больше не торговал.
здесь советник полноценный торгующий от линий.
а мне нужно чтобы позиции все закрылись при пересечении линий (наклонных, не горизонтальных как в советнике) и советник мой больше не торговал.
Там есть и наклонные линии. - "Советник поддерживает два типа линий: горизонтальная и трендовая."(с)
Попробуйте в скрипт переделать, если не найдете ..
Увы... Я не профессиональный программист, а любитель и мне нужно будет долго сидеть и вникать, как переделать этот советник на скрипт.
Посмотрите вот здесь - https://book.mql4.com/ru/programm/special
может поможет.
Есть советник, работает в канале неплохо.
Можно ли сделать скрипт, чтобы в случае пересечения ценой одной из линий канала, нарисованных вручную,
все позиции закрывались и работа советника прекращалась.
Можно оформить в виде зацикленного скрипта, который в случае нужного условия (у вас это выход цены за линии) закрывает все позиции и средствами WinAPI "отжимает" кнопку "Expert Advisors".
При такой реализации можно контролировать работу (продаваемых) советников без исходников (EX4-файлы), т.к. не требуется никакого вмешательства в их исходный код.
Добрый день.
Есть советник, работает в канале неплохо.
Можно ли сделать скрипт, чтобы в случае пересечения ценой одной из линий канала, нарисованных вручную,
все позиции закрывались и работа советника прекращалась.
Может где то уже есть готовый такой скрипт.
Добавь в советник 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);}
При выходе цены выше или ниже трендовых линий ордера закроются и советник работать не будет!
Добавь в советник 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() нигде не используется и будет удалена.
И что значит: "вторые координаты должны совпадать с нулевым баром", что такое вторые координаты ?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день.
Есть советник, работает в канале неплохо.
Можно ли сделать скрипт, чтобы в случае пересечения ценой одной из линий канала, нарисованных вручную,
все позиции закрывались и работа советника прекращалась.
Может где то уже есть готовый такой скрипт.