ФОРЕКС 21 Воскресенье, 28.04.2024, 13:38
Главная | Регистрация | Вход Приветствую Вас Гость | RSS
Меню сайта

Главная » 2009 » Декабрь » 28 » Учимся писать эксперты для MetaTrader. Урок №17
Учимся писать эксперты для MetaTrader. Урок №17
21:25
Учимся писать эксперты для MetaTrader. Урок №17 Добрый день дорогие читатели! Сегодня мы напишем довольно интересный эксперт. Его алгоритм основан на времени, точнее на торговых сессиях. Алгоритм Не представившийся читатель прислал мне следующие рисунки, и попросил по ним, на свое усмотрение написать эксперт. Ну что ж попробуем это все описать словами. Условия на вход в лонг. Цена открытия дня ниже максимальной цены за период, максимальная цена достигается за азиатскую сессию. Минимальная цена за период достигнута за европейскую сессию, и она ниже цены открытия. Вход осуществляется в начало американской сессии по пробою максимально достигнутой цены. Стоплосс- минимальная цена дня. Условие на вход в шорт. Цена открытия дня выше минимальной цены за период, достигнутой за азиатскую сессию. Максимальная цена за период достигнута за европейскую сессию, и она выше цены открытия. Вход осуществляется в начало американской сессии по пробою минимально достигнутой цены. Стоплосс- максимальная цена дня. Время входа в часах по GMT, доступна для регулирования (во внешней переменной). Т.к. конкретной цели у нас нет, за цель мы получим банальный трейлингстопом. Т.к. будем просто поджимать стоплосс под уже достигнутый профит. Вот такой простейший алгоритм получился. Его можно сильно усложнить, но я не ставил этой цели, т.к. те кого он заинтересует, будут иметь такую возможность. Заключение При тестировании на истории картина получается довольно неплохая. Но есть несколько но. Во-первых 40 сделок на 1 год и 3 месяца, конечно же маловато тем более, что фильтров никаких мы не применяли. И во-вторых за эти год и 3 месяца истории мы имеем сильный восходящий тренд, поэтому целесообразней учитывать только короткие позиции. /*[[ Name := Sessiy Author := forextimes.ru Link := www.Fxtest.ru Lots := 1.00 Stop Loss := 0 Take Profit := 1000 Trailing Stop := 30 ]]*/ Define: USAhour(13); //время за которое мы принимаем начало американской сессии, т.е начинаем торговать var:cnt(0),i(0),MaxH(0),MinL(0),op(0),MaxHi(0),MinLi(0); if hour=USAhour and TotalTrades=0 then { //если время американской сессии наступило и открытых позиций нет но начинаем. op=o[USAhour]; //так определяем цену открытия дня, т.е цену открытия в 0 по GMT MaxH=h[1]; //изначально за максимальную цену дня принимаем максимальную цену прошлого бара MinL=l[1]; //изначально за минимальную цену дня принимаем минимальную цену прошлого бара for i=USAhour DownTo 1 { //в цикле производим поиск реальных минимальных и максимальных цен периода if h[i]>MaxH then {MaxH=h[i]; MaxHi=i;}; // в переменную MaxH кладем максимальную цену, в MaxHi ее индекс if l[i]MinL and MinLi<(USAhour-1) and MinLi>(USAhour-6) and hour<19 and bid(USAhour-6) and hour<19 and ask>MaxH then {SetOrder(op_buy,lots,ask,3,MinL,bid+takeprofit*point,blue); exit;}; // выше производим проверку условий на вход, о условиях мы подробней говорили выше }; for cnt=1 to TotalTrades begin /* это длинная позиция? */ If Ord(cnt,VAL_TYPE)=OP_BUY then /* длинная позиция */ { /* есть ли профит у этой сделки больше чем уровень трейлинг стопа? Проверяем Bid, так как позиция BUY */ If (Bid-Ord(cnt,VAL_OPENPRICE))>(TrailingStop*Point) then { /*позиция имеет прибыль больше чем значение трейлинг стопа, можно ли поставить стоп лучше чем он был ранее? */ If Ord(cnt,VAL_STOPLOSS)<(Bid-TrailingStop*Point) then { /* меняем стоплосс на уровень Bid-Trailing Stop */ ModifyOrder(Ord(cnt,VAL_TICKET),Ord(cnt,VAL_OPENPRICE), Bid-TrailingStop*Point,Ord(cnt,VAL_TAKEPROFIT),Red); Exit; }; }; }; /* это короткая позиция? */ If Ord(cnt,VAL_TYPE)=OP_SELL then { /* есть ли профит у этой сделки больше чем уровень трейлинг стопа? Проверяем Ask, так как позиция SELL */ If (Ord(cnt,VAL_OPENPRICE)-Ask)>(TrailingStop*Point) then { /* позиция имеет прибыль больше чем значение трейлинг стопа, можно ли поставить стоп лучше чем он был ранее? */ If Ord(cnt,VAL_STOPLOSS)>(Ask+TrailingStop*Point) or Ord(cnt,VAL_STOPLOSS)=0 then { /* меняем стоплосс на уровень Ask+Trailing Stop */ ModifyOrder(Ord(cnt,VAL_TICKET),Ord(cnt,VAL_OPENPRICE), Ask+TrailingStop*Point,Ord(cnt,VAL_TAKEPROFIT),Red); Exit; }; }; }; end;
Просмотров: 370 | Добавил: forex21 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Календарь новостей
«  Декабрь 2009  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031

Поиск

Друзья сайта


Статистика

Copyright MyCorp © 2024 Бесплатный конструктор сайтов - uCoz