MQL для чайников, программирование на MQL4, MQL5
15 Сен
Добрый день, Уважаемые подписчики!
Сегодня я публикую очередной урок по пришедшему мне вопросу:
Уважаемый Александр.
Имеется ли в MQL4 возможность работать с такими графическими объектами MetaTraderа, как трендовые, вертикальные и горизонтальные линии, каналы и т.д., имеющими в среде MetaTrader собственные имена и параметры? Если да — рассажите об этом в одном из своих уроков.
Давайте рассмотрим как работать с объектами MetaTraderа 4 на примере трендовой линии. Существует множество стратегий форекс, основаных на трендовых линиях. Например Стратегия форекс «3 касания» или Стратегия форекс «Trend Lines» и т.д. Обычно работают такие трговые стратегии на отскок цены от трендовой линии или на пробой трендовой линии. Рассмотрим как написать советника MT4 который будет отслеживать приближение цены к трендовой линии и открывать ордера с целью получить прибыль при ее отскоке. Конечно советник не будет полностью автоматическим. Трейдеру придется в ручную рисовать трендовую линию, но сидеть ждать подхода цены к трендовой линии будет не нужно.
Для начала определимся с параметрами, что нам нужно настраивать: — риск для расчета лота — тейкпрофит — стоплосс — расстояние от трендовой линии до установки ордера (цена может несколько пунктов не дойти до трендовой линии)
Подключим нашу библиотеку MyLib и укажем внешние параметры:
//±-----------------------------------------------------------------+
//| TrendLine.mq4 |
//| Copyright c 2010. |
//| http://mql4you.ru |
//±-----------------------------------------------------------------+
#property copyright "Copyright c 2010."
#property link "http://mql4you.ru"
#include <MyLib.mqh>
extern int MaxRisk=2;
extern int TakeProfit=600;
extern int StopLoss=30;
extern int Delta=5;
//±-----------------------------------------------------------------+
int init() {return(0);}
//±-----------------------------------------------------------------+
int deinit() {Comment("«);return(0);}
//±-----------------------------------------------------------------+
int start()
{
return(0);}
//±-----------------------------------------------------------------+
Проверим что есть трендовая линия и она в единственном экземпляре:
if(ObjectsTotal(OBJ_TREND)!=1)
{Comment(»Нарисуйте 1 трендовую линию!");
return(0);}
Получим ИМЯ трендовой линии:
for(int i=0;i<ObjectsTotal();i++)
{string name=ObjectName(i);
if(ObjectType(name)==OBJ_TREND) break;}
Проверим что трендовая линия нарисована правильно (по движению цены):
datetime t1=ObjectGet(name,OBJPROP_TIME1);
datetime t2=ObjectGet(name,OBJPROP_TIME2);
if(t1>t2)
{Comment("Неправильно нарисована трендовая линия!");
return(0);}
Продолжим линию (свойство луч):
ObjectSet(name,OBJPROP_RAY,true);
Определим тренд (вверх или вниз):
bool trend=false;
double p1=ObjectGet(name,OBJPROP_PRICE1);
double p2=ObjectGet(name,OBJPROP_PRICE2);
if(p1<p2) trend=true;
Определим текущее значение трендовой линии и сообщим ее параметры:
double pr=ObjectGetValueByShift(name,0);
Comment("Name=",name," Trend=",trend," Value=",pr);
Осталось подсчитать количество открытых ордеров и если их нет и цена подошла к трендовой линии открыть ордер.
Подсчитаем кол-во ордеров:
int oBuy=0,oSell=0;
for(i=OrdersTotal() −1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol())
{if(OrderType()==OP_BUY) oBuy++;
if(OrderType()==OP_SELL) oSell++;}
Если нет ордеров и цена подошла к трендовой линии — откроем ордер:
double tp=0,sl=0;
double Lot=GetLot(MaxRisk);
if(Lot==0.0) {Alert("Недостаточно средств!");return(0);}
if(oBuy+oSell==0 && trend && Bid>=pr && Bid<=pr+Delta*Point)
{if(TakeProfit>0) tp=Ask+TakeProfit*Point;
if(StopLoss>0) sl=Ask-StopLoss*Point;
NewOrder(OP_BUY,Lot,Ask,tp,sl);}
if(oBuy+oSell==0 && !trend && Ask<=pr && Ask>=pr-Delta*Point)
{if(TakeProfit>0) tp=Bid-TakeProfit*Point;
if(StopLoss>0) sl=Bid+StopLoss*Point;
NewOrder(OP_SELL,Lot,Bid,tp,sl);}
Советник форекс готов! Осталось его протестировать. Советники форекс подобного типа, тестируют только в визуальном режиме как в Уроке 10 «Работа с внешними индикаторами». Запустим тестирование и нарисуем трендовую линию:
Наблюдаем как идет тестирование. Вот цена подошла к трендовой линии и открылся ордер:
Далее цена развернулась и подошла к нашему профиту:
В итоге ордер закрылся по тейкпрофиту и мы получили прибыль:
Как видно из тестов, созданный нами эксперт МТ4, работает. Его можно использовать как для торговли, так и для тренировки умения рисовать трендовые линии в тестере стратегий Metatrader 4.
Скачать: советник TrendLine