Смотри, как бесплатно скачать роботов
Ищи нас в Facebook!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

Библиотека функций и советники для трейлинга / Юрий Дзюбан - библиотека для MetaTrader 4

Просмотров:
27931
Рейтинг:
(66)
Опубликован:
2007.09.13 15:54
Обновлен:
2016.03.25 14:22
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Алгоритм сопровождения и закрытия позиции, как известно, является едва ли не более важным, чем правила её открытия. И подчас изменение системы трейлинга может вызывать довольно драматические перемены в результативности торговли - как в сторону повышения, так и понижения последней. Предлагаю Вашему вниманию библиотеку функций для сопровождения открытой позиции, которую я использую при построении своих МТС.


Представленные функции были написаны по некоторым наиболее популярным алгоритмам трейлинга, которые я в разное время встречал в сети, другие являются, возможно, моими авторскими разработками или, по крайней мере, мне не попадались их описания до момента написания. Функции просто подключать/перебирать, что позволяет весьма оперативно их примерять к системе входов различные сценарии трейлинга. Представленные функции являются элементарными и позволяют, при необходимости, конструировать на их основе более сложные алгоритмы трейлинга. Функции весьма разные, писались мной для упрощения процедуры сборки новых МТС.


Итак, собственно функции:

1. Трейлинг по теням N последних баров.

void TrailingByShadows(int ticket,int tmfrm,int bars_n, 
                       int indent,bool trlinloss)

Функция реализует подтягивание стоплосса по минимальному из low (для длинных позиций) или максимальному high (для коротких) заданного количества баров, на текущем или отличном от текущего таймфрейме.

Параметры:

ticket - уникальный порядковый номер ордера (выбранный перед вызовом функции с помощью OrderSelect());
tmfrm - таймфрейм, по барам которого осуществляется трейлинг (варианты - 1, 5, 15, 30, 60, 240, 1440, 10080, 43200);
bars_n - количество баров, которые используются для определения уровня стоплосса (не меньше 1);
indent - отступ (пунктов) от выбранного high/low, на котором будет размещен стоплосс (не меньше 0);
trlinloss - указатель того, следует ли передвигать стоплосс на "лоссовом" участке, т.е. в интервале между начальным стоплоссом и курсом открытия (true - тралим, false - трейлинг начинается только при условии, что новый стоплосс "лучше" курса открытия, "в профите").

Данный вид трейлинга был впервые встречен мной в описании тактики В. Баришпольца "Пробой средней на дневках", в которой предлагалось трейлинговать стоплосс по лоу (для покупок) или хай (продаж) последних 2 баров (свечей) на дневном таймфрейме. Тралит данный алгоритм иногда на удивление "красиво" (попробуйте "пройтись" по графику "глазами"), позволяет переживать откаты (глубина зависит от заданного количества баров, bars_n) и периоды ослабления волатильности. (По определению) срабатывает по закрытию очередного бара, даже если вы используете его на каждом тике. Я использую его преимущественно на дневках, тралю по 2-4 (наиболее часто) последним барам.


2. Трейлинг по Х-барным фракталам.

void TrailingByFractals(int ticket,int tmfrm,int frktl_bars,
                        int indent,bool trlinloss)

Функция тралит стоплосс по экстремумам фракталов заданного размера (т.е. кол-ва баров в составе фрактала) на заданном таймфрейме. Фрактал, как известно, в "классическом" виде (Вильямса, если не ошибаюсь) - это комбинация из 5 баров, но мне подумалось, а почему бы не использовать и другие "размеры" - начиная от 3 баров и выше, включая парные кол-ва баров (в последнем случае кол-во баров после экстремума, по мере движения "в прошлое", будет больше, чем до экстремума).

Параметры:

ticket - уникальный порядковый номер ордера(выбранный перед вызовом функции с помощью OrderSelect());
tmfrm - таймфрейм, по барам которого осуществляется трейлинг (варианты - 1, 5, 15, 30, 60, 240, 1440, 10080, 43200);
bars_n - количество баров в составе фрактала (не меньше 3);
indent - отступ (пунктов) от экстремума последнего фрактала, на котором будет размещен стоплосс (не меньше 0);
trlinloss - указатель того, следует ли передвигать стоплосс на "лоссовом" участке, т.е. в интервале между начальным стоплоссом и курсом открытия (true - тралим, false - трейлинг начинается только при условии, что новый стоплосс "лучше" курса открытия, "в профите").

Не раз встречал на нескольких из основных рунетовских форумов Форекс-тематики утверждения относительно того, что "хорош трейлинг по фракталам на более низком таймфрейме". Поскольку фракталы, по сути, обозначают локальные экстремумы, трейлинг по ним, также, в принципе, можно назвать трейлингом по локальным экстремумам. Идея не новая и вполне здравая, использовавшаяся многими известными трейдерами (тем же Вильямсом, если не ошибаюсь). Позволяет переживать откаты и неплохо "выбирать" заметные движения, неважно (по личному опыту) работает во флэте. Подобно предыдущей, данная функция "тралит" по сформировавшимся барам. При желании можно динамически (в пределах "жизни" позиции) изменять параметры, например, при быстром "приросте" профите (например, при сильном тренде), "загрублять" её чувствительность, переходя на более крупный таймфрейм или увеличивая кол-во баров во фрактале, или, наоборот, при спадах волатильности повышать чувствительность, переходя на более мелкий таймфрейм или уменьшая кол-во баров во фрактале. Возможны и другие варианты.


3. Трейлинг стандартный-'ступенчатый'.

void TrailingStairs(int ticket,int trldistance,int trlstep)

Данный вид трейлинга является доработкой стандартного. Если не ошибаюсь, в своё время похожий был написан KimIV'ом (но поскольку "свое - роднее",... :) Отличается от стандартного трейлинга тем, что перенос стоплосса осуществляется не "попунктово" (например, при трейлинге на расстоянии 30 пунктов при +31 стоплосс будет перемещен на +1, при +32 - на +2 и т.д.), а "шагами" заданной длины (например, при трейлинге на расстоянии в 40 пунктов и "шаге" в 10 при достижении +40 стоплосс будет перемещен на +10, дальше до момента достижения профитом +50 (40 п. + шаг) ничего не поменяется (т.о. мы даём цене определённую свободу, в чем, собственно, и суть данного алгоритма), и только при +50 стоплосс с +10 будет перенесен на шаг - с +10 на +20, при +60 - на +30 п. и т.д.

Параметры:
ticket -
уникальный порядковый номер ордера (выбранный перед вызовом функции с помощью OrderSelect());
trldistance - расстояние от текущего курса (пунктов), на котором "тралим" (не меньше MarketInfo(Symbol(),MODE_STOPLEVEL));
trlstep - "шаг" изменения стоплосса (пунктов) (не меньше 1).

При trlstep=1 данная функция не будет отличаться от стандартного трейлинга. Основная "фишка" данного алгоритма, повторюсь, в предоставлении курсу некоторой "свободы движений" - стоплосс подтягивается только после того, как цена "побродив, определилась". Данный алгоритм трейлинга я впервые встретил в описании правил тактики "Скользящие каналы" уже упоминавшегося В.Баришпольца.


4. Трейлинг стандартный-'удавка'.

void TrailingUdavka(int ticket,int trl_dist_1,int level_1,
                    int trl_dist_2,int level_2,int trl_dist_3)

Безоткатных движений неограниченной длины, как известно, не бывает (эх...). И совершив определённый "рывок" (среднее значение которого можно попытаться определить, например, статистически), курс, как правило, формирует консолидацию или откат. Идея данного алгоритма сопровождения - по мере увеличения профита сокращать дистанцию трейлинга таким образом, чтобы подходя к участку вероятного разворота/консолидации "застолбить" побольше профита. Помимо работы на упомянутых выше "рывках" (которые обычно имеют место на новостях или при пробое исторических уровней), функцию также можно использовать при работе в каналах, сокращая дистанцию трейлинга при подходе к противоположной (относительно открытия) границе канала.


Параметры:
ticket -
уникальный порядковый номер ордера (выбранный перед вызовом функции с помощью OrderSelect());
trl_dist_1 - исходное расстояние трейлинга (пунктов) (не меньше MarketInfo(Symbol(),MODE_STOPLEVEL), больше trl_dist_2 и trl_dist_3);
level_1 - уровень профита (пунктов), при достижении которого дистанция трейлинга будет сокращена с trl_dist_1 до trl_dist_2 (меньше level_2; больше trl_dist_1);
trl dist_2 - расстояние трейлинга (пунктов) после достижения курсом уровня профита в level_1 пунктов (не меньше MarketInfo(Symbol(),MODE_STOPLEVEL));
level_2 - уровень профита (пунктов), при достижении которого дистанция трейлинга будет сокращена с trl_dist_2 до trl_dist_3 пунктов (больше trl_dist_1 и больше level_1);
trl dist_3 - расстояние трейлинга (пунктов) после достижения курсом уровня профита в level_2 пунктов (не меньше MarketInfo(Symbol(),MODE_STOPLEVEL)).


К примеру, при параметрах "ticket#, 30, 50, 20, 70, 10" мы исходно тралим на расстоянии в 30 пунктов, как только курс отойдет от курса открытия на 50 пунктов, начинаем тралить "плотнее" - на расстоянии в 20 п., а если ему удалось преодолеть 70 п. в направлении увеличения профита, "затягиваем" (откуда и название) расстояние трала до 10 п. (что с высокой вероятностью приведет к скорому закрытию позиции).

5. Трейлинг по времени.

void TrailingByTime(int ticket,int interval,int trlstep,
                    bool trlinloss)

Тралим по времени, безотносительно к текущему результату по позиции и раскладу на рынке. Через заданные интервалы времени (целых минут) пытаемся (по возможности) переместить стоплосс на заданный шаг. Использование данного трейлинга отдельно не было (для меня, по крайней мере, возможно, для кого-то окажется иначе) особо успешным, однако в комбинации с другими видами трала или при включении по определённому условию, возможно, он может быть полезен.

Параметры:
ticket -
уникальный порядковый номер ордера (выбранный перед вызовом функции с помощью OrderSelect());
interval - количество целых минут с момента открытия позиции, по истечению которых пытаемся переместить стоплосс на шаг trlstep пунктов;
trlstep - шаг (пунктов), на который пытаемся перемещать стоплосс через каждые interval минут;
trlinloss - в данном случае если trlinloss==true, то тралим от стоплосса, иначе от курса открытия (если стоплосс не был установлен, ==0, тралим всегда от курса открытия).


6. Трейлинг по ATR.


void TrailingByATR(int ticket,int atr_timeframe,int atr1_period,
                   int atr1_shift,int atr2_period,int atr2_shift,
                   double coeff,bool trlinloss)
ATR - (Average True Range, Средний Истинный Диапазон) - один из индикаторов волатильности; чем больше значение, тем, соответственно, выше средняя волатильность за заданный период (индикатора) времени; измеряется в пунктах. Трейлинг по ATR в большинстве случаев позволяет изменять стоплосс соответственно ("адекватно", "адаптивно") характеру поведения курса - при высокой волатильности (выраженных рывках) курс "отпускаем", при "топтании на месте" поджимаем более "плотно". В трейлинге используется 2 ATR, которым предлагается задавать отличные периоды - один короткий (напр., 5), другой - длинный (напр., 20). Для расчета стоплосса используется всегда большее из значений 2 ATR - это сделано для того, чтобы несколько низковолатильных баров подряд (например, перед выходом новостей) не сделали наш стоплосс слишком близким к текущему курсу.

Параметры:
ticket -
уникальный порядковый номер ордера (выбранный перед вызовом функции с помощью OrderSelect());
atr_timeframe - таймфрейм, на котором рассчитываем значение ATR (варианты - 1, 5, 15, 30, 60, 240, 1440, 10080, 43200);
atr1_period - период первого ATR (больше 0; может быть равен atr2_period, но лучше отличен от последнего, почему - см. выше);
atr1_shift - для первого ATR сдвиг "окна", в котором рассчитывается значение ATR, относительно текущего бара на указанное количество баров назад (неотрицательное целое число);
atr2_period - период второго ATR (больше 0);
atr2_shift - для второго ATR сдвиг "окна", в котором рассчитывается значение ATR, относительно текущего бара на указанное количество баров назад (неотрицательное целое число);
coeff - стоплосс считаем как ATR*coeff, т.е. это коэффициент, определяющий, на расстоянии скольких ATR от текущего курса следует разместить стоплосс;
trlinloss - указатель того, следует ли передвигать стоплосс на "лоссовом" участке, т.е. в интервале между начальным стоплоссом и курсом открытия (true - тралим, false - трейлинг начинается только при условии, что новый стоплосс "лучше" курса открытия, "в профите").

Также довольно популярный способ трейлинга, (в большинстве случаев выгодно) отличающийся от стандартного "адаптивностью" к текущей ситуации на рынке.


7. 'Храповой' трейлинг (по Баришпольцу).

void TrailingRatchetB(int ticket,int pf_level_1,int pf_level_2,
                      int pf_level_3,int ls_level_1,
                      int ls_level_2,int ls_level_3,
                      bool trlinloss)

Храповой (англ. ratchet) ключ, колесо - тот, который "проворачивается только в одном направлении". Название - моё, в описании Баришпольца упоминается как "вторая тактика трейлинга" (в противовес "первой", со "стандартными" - дальними стоплоссами), в исполнении KimIV - т.н. "трехуровневый" трейлинг. Суть: быстрый перенос в безубыток и ступенчатый трейлинг при небольшом профите (дальше предлагается применять иные виды трейлинга, например, стандартный, можно мой стандартный-"ступенчастый" или какой-нибудь другой из вышеописанных). Целесообразность такого трала - "абсолютное большинство позиций по крайней мере некоторое время дают профит", поэтому при первой возможности переносим стоплосс в безубыток; если преждевременно "закроет", но сигналы к открытию сохраняются, возможен повторный вход; а вообще получаем большое кол-во сделок, закрытых в безубыток, и несколько, возможно, с хорошим профитом - на тех сделках, где после открытия последовало сильное движение в профитном направлении. Автор подчеркивает, что данный трейлинг не является "пипсовочным", а предназначен для достижения торговли с низким % убыточных сделок.

Параметры:
ticket -
уникальный порядковый номер ордера (выбранный перед вызовом функции с помощью OrderSelect());
pf_level_1 - уровень профита (пунктов), при котором стоплосс переносим в безубыток + 1 пункт;
pf_level_2 - уровень профита (пунктов), при котором стоплосс переносим с +1 на расстояние pf_level_1 пунктов от курса открытия;
pf_level_3 - уровень профита (пунктов), при котором стоплосс переносим с pf_level_1 на pf_level_2 пунктов от курса открытия (на этом действия функции заканчиваются);
ls_level_1 - расстояние от курса открытия в сторону "лосса", на котором будет установлен стоплосс при достижении профитом позиции +1 (т.е. при +1 стоплосс будет поджат на ls_level_1);
ls_level_2 - расстояние от курса открытия в "лоссе", на котором будет установлен стоплосс при условии, что курс сначала опускался ниже ls_level_1, а потом поднялся выше (т.е. имели лосс, но он начал уменьшаться - не допустим его повторного увеличения);
ls_level_3 - расстояние от курса открытия "минусе", на котором будет установлен стоплосс при условии, что курс снижался ниже ls_level_2, а потом поднялся выше;
trlinloss - указатель того, следует ли передвигать стоплосс на "лоссовом" участке, т.е. в интервале между начальным стоплоссом и курсом открытия (true - тралим, false - трейлинг начинается только при условии, что новый стоплосс "лучше" курса открытия, "в профите").

Автором идеи предлагалось на EURUSD использовать следующие значения: "5, 10, 25", т.е. при +5 (т.е. "отбили" спрэд и ещё 5 пунктов прошли в профит) стоплосс переносим на +1 (при ручной торговле предлагается "держать" его "в голове", дабы не искушать лишний раз диллера), при +10 п. стоплосс переносится на +5, при +25 п. профита стоплосс - на +10 и курс "отпускаем" (можно поджимать другими способами). Аналогичная часть функции для лоссового интервала автором не описана, была придумана читателями его рассылки в ходе обсуждения. Существуют сведения, что автор (весьма успешно) применяет данную методику при торговле на счете своего инвестиционного проекта, что, вероятно, является одним из факторов очень высокого % профитов в его торговле. В то же время следует отметить, что данный алгоритм трейлинга довольно специфичен и может подойти не всем.


8. Трейлинг по ценовому каналу (добавлен по совету rebus).

void TrailingByPriceChannel(int iTicket,int iBars_n,int iIndent)

Параметры:
iTicket -
уникальный порядковый номер ордера (выбранный перед вызовом функции с помощью OrderSelect());
iBars_n - период канала (кол-во баров, среди которых ищем наибольший хай и наименьший лоу - верхнюю и нижнюю границы канала соответственно);
iIndent - отступ (пунктов), с которым устанавливаем стоплосс от границы канала.

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


9. Трейлинг по скользящему среднему.

void TrailingByMA(int iTicket,int iTmFrme,int iMAPeriod,int iMAShift,
                  int MAMethod,int iApplPrice,int iShift,int iIndent)
Идея, в принципе, "в полушаге" от трейлинга по ценовому каналу. Функции передаётся тикет позиции, необходимый таймфрейм, отступ от средней (пунктов), на котором устанавливается стоплосс и собственно параметры среднего (аналогично стандартным в iMA()). Учитывая природу мувингов, несложно догадаться, что данный алгоритм может давать весьма неплохое поджатие при тренде, во флэте, однако, "путаясь" с курсом и часто приводя к преждевременному закрытию. Впрочем, можно попытаться менять параметры трала (в частности, период и метод усреднения) адекватно рыночной ситуации (учитывая волатильность, например).

Параметры:
iTicket -
уникальный порядковый номер ордера (выбранный перед вызовом функции с помощью OrderSelect());
iTmFrme - период чарта, на котором будет рассчитываться мувинг; допустимые варианты ввода: 1 (M1), 5 (M5), 15 (M15), 30 (M30), 60 (H1), 240 (H4), 1440 (D), 10080 (W), 43200 (MN);
iMAPeriod - период усреднения для вычисления скользящего среднего;
iMAShift - сдвиг индикатора относительно ценового графика;
iMAMethod - метод усреднения; допустимые варианты ввода: 0 (MODE_SMA), 1 (MODE_EMA), 2 (MODE_SMMA), 3 (MODE_LWMA);
iApplPrice - используемая цена; варианты ввода: 0 (PRICE_CLOSE), 1 (PRICE_OPEN), 2 (PRICE_HIGH), 3 (PRICE_LOW), 4 (PRICE_MEDIAN), 5 (PRICE_TYPICAL), 6 (PRICE_WEIGHTED);
iShift - сдвиг относительно текущего бара на указанное количество периодов назад;
iIndent - отступ (пунктов) от значения среднего при размещении стоплосса.


10. Трейлинг "половинящий" (Fifty-fifty trailing).

void TrailingFiftyFifty(int iTicket,int iTmFrme,double dCoeff,
                        bool bTrlinloss)

Идея следующая: по закрытию очередного бара уменьшаем расстояние между стоплоссом и текущим курсом в dCoeff раз (исходно я взял 0,5, т.е. наполовину, откуда и название). Т.е., допустим, открыта покупка со стоплоссом в 40 пунктов. По закрытию бара, на котором был совершен вход в рынок, Bid оказался выше курса открытия на 42 пункта. Если мы выбрали вариант трала только "в профите" (bTrlinloss==true), то берем расстояние от курса открытия до текущего курса - 42 п., множим его на dCoeff (например, 0.5), и получив 21 п., переносим стоплосс в +21. Пусть при закрытии следующего бара профит составил +71 п. Тогда разница между текущим стоплоссом и курсом: 71-21=50, половина от найденного значения - 50*0.5=25, и новый стоплосс должен быть установлен на 25 п. выше предыдущего (21+25=46 п. от курса открытия).

При описанном вариант трейлинга, "в профите" (bTrlinloss==true), стоплосс переносится лишь при условии, что новый стоплосс будет "лучше" курса открытия. Если же установить bTrlinloss равным false, то трал будет осуществляться и на "лоссовом" участке (т.е. интервале между курсом открытия и стоплоссом, который, кстати, должен быть обязательно определён (не равен 0), чтобы данный элемент сработал). Т.е., если взять вышеописанный вариант, то по закрытии первого бара стоплосс будет перемещен на 0.5 дистанции не между открытием и текущим курсом, а между стоплоссом и текущим курсом (при стоплоссе в 40 п. и профите в 42 п. это расстояние составит (40+42)/2 = 82/2 = 41 п., стоплосс будет установлен в +1 п. от курса открытия. На втором баре, при профите в 71 п.: а) 71 - 1 = 70, б) 70*0.5 = 35, в) 1 + 35 = 36 п. Как видим, такой вариант будет стартовать с большей "дистанции" и несколько отставать от первого. Его основная функция - поджатие стоплосса при негативном развитии событий. Например, если по закрытию первого бара профит составил -10 п., то при bTrlinloss==true мы: а) найдем расстояние от курса до стоплосса, |-40 + (-10)| = 30 п., б) рассчитаем половину этого значения - 30*0.5 = 15 п. и в) переместим стоплосс в сторону профита на это расстояние: -40 + 15 = -25.

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

Параметры:
iTicket -
уникальный порядковый номер ордера (выбранный перед вызовом функции с помощью OrderSelect());
iTmFrme - период чарта, по барам которого будет осуществляться трейлинг; допустимые варианты ввода: 1 (M1), 5 (M5), 15 (M15), 30 (M30), 60 (H1), 240 (H4), 1440 (D), 10080 (W), 43200 (MN);

dCoeff - коэффициент, определяющий то, в сколько раз будет сокращено расстояние между курсом на момент закрытия бара и текущим стоплоссом;

bTrlinloss - указатель того, следует ли осуществлять трейлинг на лоссовом участке.


11. Трейлинг "KillLoss".

void KillLoss(int iTicket,double dSpeedCoeff)

Идея такого вида сопровождения появилась у меня при разработке комбинированного вида трейлинга, в состав которого вошли несколько видов из вышеприведённых (а именно "храповой" трейлинг по Баришпольцу и трал по фракталам). Согласно задумке, он предназначен для работы только на участке лоссов (когда позиция находится в убытке). Если, например, вы поняли, что вход был неверным, лосс быстро увеличивается, курс стремительно приближается к исходному стоплоссу, может быть целесообразно ограничить вероятный убыток, перемещая стоплосс навстречу курсу, со скоростью, равной движению последнего или большей. Это, собственно, и делает функция KillLoss. После запуска она "запоминает" в глобальной переменной терминала дистанцию между стоплоссом и курсом, и в дальнейшем при приближении курса к стоплоссу на Х пунктов перемещает стоплосс на Х пунктов * коэффициент dSpeedCoeff ему навстречу. Упомянутый коэффициент может быть константой (напр., 1 - на каждый пункт приближения курса стоплосс будет смещен на 1 пункт, или 1.5 - стоплосс будет приближаться к курсу в полтора раза быстрей движения последнего), так и значением некой переменной, которое изменяется в зависимости от состояния рынка (например, его волатильности - "есть рынок подвижен, и лосс растёт, будем урезать стоплосс быстрей"). Когда курс откатывает в сторону профита (лосс уменьшается), функция KillLoss ничего не делает. П.С. Имейте в виду, что в своей работе функция использует 2 глобальные переменные терминала - sldiff и zeticket, последняя из которых также используется в некоторых из вышеприведённых функций трейлинга. Будьте внимательны, при необходимости (напр., при совместном или попеременном применении этих функций) измените имя глобальной переменной в одной из них.

Все вышеописанные функции собраны в файле библиотеки TrailingFuncLib.mq4, прикреплённой в шапке статьи. Мне как-то удобнее использовать именно библиотеку, хоть это и несколько медленнее, однако вы можете и include'ить функции в свои программы. Прикрепляю также пример советника MyFractals с подключенными функциями. Советник, возможно, кому-нибудь тоже будет интересен.


11.08.2007. Для тех, кто торгует "полуавтоматически", контролируя часть работы вручную (открытие позиции, например, хоты бы потому, что некоторые тактики слабо алгоритмизируются), а часть - с помощью скриптов и советников на MQL4 (например, сопровождение и закрытие позиции), я написал эксперты на основе каждой из вышеописанных библиотечных функций для трейлинга. Они - в архиве TrailingExperts.zip. Так что теперь, открывшись вручную, вы можете просто запустить советник с необходимым видом трейлинга, указав ему при вызове тикет (уникальный номер позиции) и определив необходимые параметры. Причем, при необходимости, по мере изменения рыночной ситуации вы также легко можете сменить один вид трала на другой, просто запустив другого эксперта. Более подробные инструкции вы найдете в комментариях каждого из советников. Весьма надеюсь, что данные программы окажутся полезными в вашей работе.


Я занялся изучением языка MQL4 относительно недавно (в конце марта 2007). Поэтому с признательностью приму любые конструктивные замечания, советы, предложения, идеи и прочее относительно представленных выше функций. Надеюсь, они будут для Вас полезными.

С уважением,
Юрий Дзюбан.

FATL FATL

(Fast Adaptive Trend Line)– «быстрая» адаптивная линия тренда получается с использованием цифрового фильтра низкой частоты с малым периодом отсечки.

Easy iCustom and Alerts Easy iCustom and Alerts

Индикатор Easy iCustom and Alerts.

H_L H_L

Индикатор HL.

FTLM_STLM FTLM_STLM

Принцип построения - цифровая фильтрация.