Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Курс системной торговли группы трейдеров Форекс Системс


Информационный Канал Subscribe.Ru

rfs.gif

Часть 3.
Некоторые общие моменты системостроительства

В идеале у нас должен быть широкий выбор торговых систем, подходящих для самые разные рыночные условия. Попытаюсь дать некоторую классификацию систем, не претендуя на ее полноту:
∙ Системы, следующие за трендом (начинающим системостроителям рекомендовать можно именно этот тип систем);
∙ Системы, работающие во флэте;
∙ Контртрендовые системы.

Далее каждая система может обладать рядом дополнительных свойств
∙ Системы получают прибыль по достижению определенной цели;
∙ Системы извлекают максимальную прибыль, оставаясь в позиции до конца тренда.

А если говорить о принципах построения систем, то наиболее распространены следующие:
∙ Системы на основе ключевых уровней (например: уровни Фибоначчи, уровни Murrey Math, дневные экстремумы, «психологические уровни» - например, 1.2000);
∙ Системы на основе индикаторов (здесь сразу хотелось бы предостеречь от иллюзий разработки системы на основе нескольких стандартных, распространенных индикаторов);
∙ Системы на основе паттернов (хотя сложные паттерны могут включать в себя и индикаторы, и ключевые уровни);
∙ Системы на основе использования нейротехнологий и прочие высокотехнологичные разработки.

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

Любая система должна в той или иной мере содержать следующие компоненты:
∙ Набор условий для входа в рынок. Могут состоять из условий для открытия основной позиции и условий для открытия дополнительных позиций;
∙ Правила сопровождения открытых позиций и отмены несработавших отложенных ордеров;
∙ Закрытие позиций.

Как правило, у разработчика с опытом постепенно накапливается библиотека наиболее удачных решений, и каждая новая система дается значительно легче. Основной элемент системы – это, конечно, выход из позиции, хотя начинающим всегда кажется, что наоборот – вход в позицию. Постоянно совершенствуйте свою систему выхода – только тогда добьетесь успеха.

Классификация различных выходов из позиций:
∙ Выходы управления начальным риском. Обычно - это фиксированное долларовое число или процент от капитала. Этот выход ограничивает максимально возможные потери и не позволяет потерять больше запланированной суммы.
∙ Следящие выходы. Эти выходы постепенно двигаются в сторону открытия позиции по мере движения рынка в том же направлении, но на достаточном расстоянии от самой высокой точки (пример – трэйлинг стоп). В том случае, если рынок сделал значительное движение в направлении открытия позиции, следящие выходы позволяют сохранить некоторую прибыль.
∙ Выходы смены тренда (или явного развития ситуации против системы). Это сигналы для закрытия позиции в случае разворота тренда. Они закрывают позицию, когда становится ясно, что направление движения рынка было выбрано неправильно, и логика ее открытия больше недействительна.
∙ Выходы защиты прибыли. Как только позиция стала достаточно прибыльной, эти выходы предохраняют ее от превращения в убыточную.


Как я и обещал в прошлой рассылке – мы переносим в открытый раздел одну из своих тем, в которой описан процесс разработки одной из систем. Он развивался не всегда по правильному теоретичному сценарию, там иногда слишком много лишнего, но, тем не менее, думаю, читателям будет полезно и интересно почитать. http://forexsystems.ru/phpBB/viewtopic.php?t=296&start=0

Еще из интересных тем на форуме:

– советую почитать тему «Вновь об эффективности систем» http://forexsystems.ru/phpBB/viewtopic.php?t=787

- тема «Определения тренда/флэта» http://forexsystems.ru/phpBB/viewtopic.php?t=779

Ведущий раздела -
Дружинин Борис (aka Phantom$)
Партнер финансовой группы "ФОРЕКС СИСТЕМС"
Phantom@forexsystems.ru

 

Часть 3.
Какие факторы влияют на торговую систему?

Линейные факторы влияют на:

1. Общую прибыль
2. Итоговую прибыль
3. Величину потерь

Эти показатели эффективности методик управления капиталом будут линейно расти по мере того, как трейдер рискует большим или меньшим количеством денег. Это может быть продемонстрировано на простом примере. Если трейдер заключает один лот, то он в итоге трейда получает X$. Если трейдер заключает два лота, то в итоге трейда он получает 2*X$. Этот момент понятен интуитивно. Проблема возникает тогда, когда трейдер предполагает, что все показатели эффективности методик управления капиталом являются линейными.

Нелинейные факторы влияют на:

1. Процентный прирост счета
2. Вероятность разорения
3. Стандартное отклонение сделок

Эти показатели эффективности методик управления капиталом не являются линейными. Используем пример, приведенный выше: если трейдеры заключают один лот, вероятность того, что позиция окажется убыточной будет X%. Если трейдеры заключают два лота, вероятность разорения может быть в четыре раза выше. Причина заключается в том, что вероятность разорения связана с успехом сделок и размером счета. (Вероятность разорения детально рассмотрим в следующих рассылках). То же самое относится и к процентному приросту счета. Нелинейные факторы очень важны при сравнении разнообразных методик управления капиталом, потому что часто именно эти факторы больше воздействуют на успех сделки трейдеров, чем прибыльность их систем.
По большому счету, именно непонимание или не распознание особенностей взаимодействия этих линейных и нелинейных факторов зачастую являются причиной разорения многих трейдеров. К сожалению, многие трейдеры и инструменты, которыми они пользуются, в первую очередь рассматривают только несколько основных числовых значений показателей эффективности метода - прибыль и потери, и автоматически предполагают, что они являются линейными. На самом деле, в зависимости от применяемого метода управления капиталом, встречаются даже такие случаи, когда и прибыль и потери нелинейны.
Пример 1:
Допустим, что исходный размер счета – 25000$, и трейдер пытается принять решение о том, какой процентной долей счета рискнуть после каждого сигнала к торговле, данного системой. “Процентная доля счета” будет разной для каждой сделки, так как величина счета меняется после каждого выигрыша или проигрыша. Трейдер должен рискнуть, не превысив этого количества денег. Следовательно, если при совершении первой сделки трейдер собирается рискнуть 6% ( 1500$ = 6% от 25000$), то идеальный сигнал к трейду должен иметь риск в 1500$. Трейдер не принимает сигнал к торговле, если риск составляет 2000$, так как это превышает установленный риск. Напротив, если риск составляет 500$ на лот, трейдер заключает 3 лота, чтобы достичь установленного риска в 1500$.
Следующая таблица представляет собой результаты риска различными процентными долями счета при использовании подхода к управлению капиталом этого типа:

% риска на сделку
Прибыль
Прибыль/
одномоментный убыток
Наихудший одномоментный
убыток
2%
$ 1,290
0.23
-19%
4%
$10,760
0.94
-33%
6%
$ 2,270
0.16
-52%
8%
$ 1,840
0.09
-61%
10%
$ -1,450
-0.07
-69%


Хотя трейдер линейно увеличивает риск каждой сделки ( 2%, 4%, 6% и т.д.), результаты оказываются нелинейными. Как вы можете увидеть, 4% риск принес трейдеру наибольшую прибыль. Риск же больше или меньше, чем на 4%, принес трейдеру меньшую прибыль. Этот пример показывает, что если трейдеры допускают дополнительный риск линейно, доход на счету необязательно изменяется линейно. Трейдеры должны помнить это, когда исследуют и/или сравнивают различные методики управления капиталом.

Часть 4.
Фиксированно-Фракционный метод
По материалам работ Райана Джонса

Фиксированно-Фрак¬ционная торговля - это самый широко распространенный и наиболее часто рекомендуемый метод управления капиталом для инструментов торгуемых с маржей.
Мы рассмотрим его сильные и слабые стороны, чтобы вы могли принять решение – подходит ли этот метод для вас и вашей торговли.
На самом деле трейдеры с мелкими счетами редко используют Фиксированно-Фракционный метод – и этому есть своя причина – этот метод не обладает быстрым стартом в росте капитала, зато его применение хорошо согласуется с простым и надежным управлением риском. Посмотрим в этой рассылке основную математику метода

Математика фиксированно-фракционного метода

Фиксированно-Фракционный метод гласит о том, что по каждой сделке можно рисковать суммой, не превышающей "Х"% от баланса счета. Например, если Трейдер имеет на счете 10.000 долларов и тор¬гует в соответствии с Фиксированно-Фракционным методом с учетом 2% риска, то он будет рисковать не более чем 200 долларами (10.000 долларов х 0,02 = 200 долларов). Если Трейдер торгует акциями в краткосрочной основе, то он может рассматривать возможность по¬купки "XYZ" акций по 10 долларов за штуку, помещая свою защитную остановку на уровне 9 долларов. Поэтому риск по каждой акции составит 1 доллар. Рискуя не более чем 2% от суммы счета по каждой сделке, Трейдер приобретет 200 акций.
В применении к торговле на Форексе Фиксированно-Фракционный метод может излагаться так: если максимальный риск по следующей сделке у вас равен 1.000 долларов и вы решили рисковать не более чем 10% вашего счета по данной сделке, то минимальную сумму счета для заключения сделок поможет вычислить следующая формула:
Самый большой потенциальный убыток /% риска по сделке
$1.000 / 0,10 = $10.000 - минимальный баланс счета, обеспечивающий торговлю
Это одна из наиболее популярных рекомендаций профессионалов в этой области: на каждые 10.000 долларов вашего счета покупайте 1 лот. Вот и весь Фиксированно-Фракционный метод. Просто уравнение приведено в обратном порядке.
Интересен характер Фиксированно-Фракционного метода. Во-первых, прогноз строится не на основе чисел, последовательностей или результатов предыдущей торговли. Допустим, максимальный убы¬ток в какой-либо конкретной торговой системе составляет 2.000 долла¬ров, а риск по сделке определяется в 10% от суммы счета. Для того что¬бы показать, где число разрешаемых к торговле лотов будет уве¬личиваться или уменьшаться, формируется ряд уровней величины счета безотносительно к торговой статистике или наблюдаемым по¬следовательностям. При этом игнорируется величина потенциального убытка, который может возникнуть в результате нескольких убыточ¬ных сделок подряд.

Например, если потенциальный максимальный убыток, допускае¬мый вашей торговой системой (или методом), составляет 2.000 долла¬ров, а максимальный процент риска по одной сделке - 10%, то при каж¬дом увеличении или уменьшении счета можно использовать следую¬щую таблицу:
$2.000 / 0,10 = $20.000 - минимальный баланс
счета для торговли одним лотом
$20.000-$39.999 = 1 лот $40.000-$59.999 =2 лота $60.000-$79.999 =3 лота $80.000 - $99.999 = 4 лота
Эта таблица может быть продолжена для каждого дополнительно¬го лота на каждые последующие 20.000 долларов счета. Если размер счета поднимается выше 40.000 долларов и при этом заключа¬ются сделки с двумя лотами, а после этого величина счета пада¬ет вновь ниже 40.000 долларов, то число допускаемых к торговле лотов должно быть уменьшено до одного. Те же самые формулы ис¬пользуются для любого процентного соотношения, а также для любой величины убытка.
Это сущность метода Фиксированно-Фракционной торговли. Лю¬бой, кто захочет в нем разобраться, сможет понять, как он функциони¬рует и как применяется на практике. В следующих рассылках я продемонстриру¬ю некоторые характеристики Фиксированно-Фракционного метода, о которых трейдеры должны знать, прежде чем приступить к примене¬нию этого метода в реальной торговле.

Один лот на каждые 10.0000 долларов

Как я объяснил выше, это означает, что вы просто делите баланс вашего счета на 10.000 долларов, чтобы определить, каким количест¬вом лотов можно входить в ближайшую торговлю. Если Трейдер имеет 100.000 долларов на счете, то следующая сделка будет включать в себя 10 лотов. Этот пример порождает первую и ос¬новную проблему, связанную с Фиксированно-Фракционным методом.
Предположим, Трейдер имеет 100.000 долларов и торгует по схеме: один лот на каждые 10.000 долларов. Если максимальный риск Трейдера при торговле составляет 2.000 долларов на лот, то допу¬стимый риск в ближайшей сделке будет равен 20.000 долларов. Эта сумма не является потенциальным убытком Трейдер. Это его риск в ближайшей торговле. Посчитайте, и вы получите 20% потенциально раз¬решенного риска в такой торговой ситуации.
Не нужно быть выдающимся ученым, чтобы понять, что, если Трейдер понесет убытки в двух сделках подряд, он рискует потерять 36% от ве¬личины счета по окончании этих двух сделок. Если по трем торговым сделкам подряд Трейдер понесет максимальные убытки, то он рискует по¬терять 48% от размера своего счета. Очевидно, что прежде чем слепо применять правило покупки по 1 лоту на каждые 10.000 долла¬ров, нужно принять во внимание и некоторые другие факторы.
Бывают случаи, когда риск не так высок. Например, если макси¬мальный убыток составляет только 1.000 долларов, то риск по одной торговой сделке составит 10%, а не 20, как в предыдущем примере. Од¬нако если три сделки подряд (по каждой из которых риск составляет только 10%) принесут максимальный убыток, то Трейдер может потерять 27% от величины счета. Тем из вас, кто может выдержать убытки в раз¬мере 27% после трех последовательно убыточных торгов, я предлагаю взглянуть на этот метод с реалистичной точки зрения.
Если Трейдер заключает сделки по одному лоту на каж¬дые 10.000 долларов своего счета, а максимальный убыток по сделке составляет только 1.000 долларов, то после трех подряд убыточных сделок Трейдер рискует 27% счета. А каковы могут быть максимальные суммарные потери по счету, если максимальный потенциальный убы¬ток составляет 1.000? С математической точки зрения, реальный по¬тенциал убытков никак не ограничен. Однако статистика по Фиксированно-Фракционной торговле показы¬вает, что убытки никогда не превышают 6.000 долларов. Причем сов¬сем необязательно в результате шести следующих друг за другом убы¬точных сделок. Например, последовательность сделок может быть та¬кая:
Торговля 1 = -$1.000 Убыток = -$1.000
Торговля 2 = $500 Убыток = -$500
Торговля 3 = -$ 1.000 Убыток = -$ 1.500
Торговля 4 = $500 Убыток = -$ 1.000
Торговля 5 = -$ 1.000 Убыток = -$2.000
Торговля б = -$500 Убыток = -$2.500
Торговля 7 = -$ 1.000 Убыток = -$3.500
Торговля 8 = $500 Убыток = -$3.000
Торговля 9 = -$ 1.000 Убыток = -$4.000
Торговля 10 = -$ 1.000 Убыток = -$5.000
Торговля 11= -$1.000 Убыток = -$6.000
При таких убытках, если Трейдер торговал по схеме "один лот на каждые 10.000 долларов на счете**, величина которого составляет 100.000 долларов, то он добьется результатов, приведенных в рамке:
Счет = $100.000
Максимум потенциальных потерь по каждой торговле = $1.000
Торговля 1 = 10 лотов х (-$1.000) = -$10.000 убытка Баланс = $90.000
Торговля 2 = 9 лотов х $500 = $4.500 прибыли Баланс = $94.500
Торговля 3 = 9 лотов х (-$1.000 д) = -$9.000 убытка Баланс = $85.500
Торговля 4 = 8 лотов х (-$500) = -$4.000 убытка Баланс = $81.500
Торговля 5 = 8 лотов х (-$1.000) = -$8.000 убытка Баланс = $73.500
Торговля 6 = 7 лотов х (-$500) = -$3.500 убытка Баланс = $70.000
Торговля 7 = 7 лотов х (-$1.000) = -$7.000 убытка Баланс = $63.000
Торговля 8 = 6 лотов х $500 = $3.000 прибыли Баланс = $66.000
Торговля 9 = 6 лотов х (-$1.000) = -$6.000 убытка Баланс = $60.000
Торговля 10 = 6 лотов х (-$1.000) = -$6.000 убытка Баланс = $54.000
Торговля 11 = 5 лотов х (-$1.000) = -$5.000 убытка Баланс = $49.000
Поэтому при наличии потерь в размере 6.000 долларов, торгуя по схеме "один лот на каждые 10.000 долларов на счете", Трейдер понес убытков на 51%! Если вы новичок, торгуете на более или менее среднем уровне активности и за весь год ни разу не потеря¬ли 6.000 долларов, то я хочу сообщить вам, что вы составляете лишь 0,1% от общего числа трейдеров. Это 1/10 от 1%! Если вы торгуете уже несколько лет, то убытки в размере 10.000 долларов для вас, скорее всего, не новость. Если бы Трейдер продолжал нести убытки до 10.000 дол¬ларов на основе одного лота, он потерял бы 66% своего счета, или 66.000 долларов. Размер его счета уменьшился бы со 100.000 долларов до 34.000.

Хотя надо отметить, что Райан Джонс (автор этой части статьи) довольно критично относится вообще к Фиксировано-Фракционному методу - тем не менее я считаю что тут он довольно объективно показал недостаток этого вараинта ММ. Особенно явно здесь видно, что этот вариант Фиксировано-Фракционного метода не может защитить прибыль. А защита прибыли - одна из главных задач Управления капиталом.

Вывод можно сделать такой - торговля одним лотом на каждые 10.000 долларов это неэффективный вариант Фиксировано-Фракционного метода, как в плане риска, так в планах увеличения прибыли и риска, так и в плане защиты прибыли.

В следующей рассылке рассмотрим вариант Фиксировано-Фракционный метода "Рисковать не более Х% своего счета".

Ведущий раздела -
Валерий Сучков (aka vs33)
Партнер финансовой группы "ФОРЕКС СИСТЕМС"
vs33@forexsystems.ru

 

Часть 3
Будьте готовы время от времени быть плохим трейдером
По материалам книги Б.Виллямса «Торговый хаос» (2-е издание)

В этой статье хотелось бы поговорить о том, через что необходимо пройти трейдеру на пути к успеху.
Помните, что трейдер, который живет внутри вас, ребенок. Научить себя торговать с прибылью - это все равно, что научиться ходить. Сначала вы начинаете ползать. Затем следуют первые детские шаги, при этом они сопровождаются падениями.
Судить о себе по своим ранним сделкам нельзя. Сравнивать себя с более успешными и опытными трейдерами - также большая ошибка. Начинающий трейдер ведет себя с изощренным мазохизмом. Мазохизм - это форма искусства, развитая давным-давно, и доведенная до совершенства за годы упреков в свой адрес. Эта привычка является дубиной самоненависти, с помощью которой теневой трейдер может загнать себя в депрессию. В самом начале мы стремимся к прогрессу, а не к совершенству.
Торговля - это как подготовка к марафону. На каждую милю быстрого бега мы должны пробежать 10 миль медленно. Этот медленный прогресс может ущемлять самолюбие. Мы хотим достичь величия - немедленного величия, но так не получается. И будет много раз, когда выглядеть мы будем неважно и в собственных глазах, и перед другими людьми. Нам нужно перестать претендовать на это. Невозможно становится лучше и одновременно выглядеть хорошо.
Помните, для того, чтобы быть хорошим трейдером, вы должны быть готовы быть плохим трейдером. Разрешите себе совершать некоторые ошибки и будьте готовы время от времени быть плохим трейдером. У вас есть шанс быть хорошим трейдером, а со временем, возможно, даже стать великим трейдером.
Диоген был известным и очень мудрым человеком. Он нашел, что владение вещами мешает ему наслаждаться жизнью. Он сузил круг своих вещей до всего лишь одежды у себя на плечах и миски. Когда однажды он увидел, как собака пьет воду из реки, он решил, что миска ему, собственно, и не нужна. Он прославился по всей земле. Настолько прославился, что о нем услышал самый могущественный в мире человек того времени. Александр Великий пошел к реке, где Диоген проводил большую часть времени, чтобы встретиться с ним. Они завели беседу, и Диоген произвел на Александра исключительное впечатление. В конце этой беседы Александр сказал Диогену: "Я восхищаюсь тобой больше, чем любой другой человек на лице Земли. Однажды я хотел бы стать таким как ты, чтобы по-настоящему расслабиться и познать себя".
Диоген спросил: "Почему бы тебе не сделать это сразу, сейчас?" Александр сказал: "Нет, сейчас не могу. Сначала я должен завоевать мир, а потом вернусь сюда, и мы будем проводить много времени вместе". Диоген ответил: "Я не завоевывал мир, почему бы тебе не остаться прямо сейчас?" Александр ответил: "Нет, сначала я завоюю мир, а потом вернусь". Диоген сказал: "Ты никогда не вернешься. Сначала ты умрешь".
Александр действительно покорил весь известный в то время мир. Его последним завоеванием была Индия, и конечно же, на пути из Индии он умер. Если мы поймем две эти индивидуальности, мы поймем разницу между победителями и неудачниками на рынке. Александр Великий был бы проигрывающим трейдером, а Диоген был бы победителем. Почему? Из-за понимания ими мира и самих себя.
Стоит рассмотреть некоторые из этих различий. Александр был в процессе "становления", а Диоген просто "существовал". Это поведение отражает функционирование двух различных частей мозга. Наше сознательное мышление и есть Александр Великий. Всегда движется, всегда завоевывает какие-то новые земли, новую технику, новые словечки (например, фракталы, свечи, macd, adx, нейронные сети).
Надеюсь, что этот текст позволил вам по-другому взглянуть на себя и помог в определении приоритетных целей вашего дальнейшего развития, как трейдера.

Ведущий раздела –
Илья (aka Ilya)
Партнер финансовой группы "ФОРЕКС СИСТЕМС"
Ilya@forexsystems.ru

 

Часть 1
Индикатор «Индекс обнаружения тренда» (TDI)

Индикатор «Индекс обнаружения тренда» (TDI) был описан в журнале Forex Magazine N58. (http://www.fxmag.ru/) . Саму статью пересказывать не буду, желающие могут прочитать по указанной ссылке.
Все параметры оставлены как были описаны в статье, хотя возможность их изменения есть. Индикатор TDI.mq4 написан для МТ4. Первоначальная версия была написана не безупречно,ввиду того , что сам язык MQL-4 был не изучен мною, поэтому получилась такая несколько корявая, но, тем не менее , работающая версия. История написания здесь - http://forexsystems.ru/phpBB/viewtopic.php?t=622

Код:

//+------------------------------------------------------------------+
//| TDI.mq4 |
//| Copyright © 2005, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
// Eaay ec ForexMagazin #58
#property copyright "Written by Rosh"
#property link "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 DarkBlue
#property indicator_color2 Red
#property indicator_level1 0.0
//---- input parameters
extern int PeriodTDI=20;
//---- buffers
double TDI_Buffer[];
double Direction_Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,TDI_Buffer);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,Direction_Buffer);
SetIndexLabel(0,"Trend Direction Index");
SetIndexLabel(1,"Direction");

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//---- TODO: add your code here

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
double MomBuffer[];
double MomAbsBuffer[];
double MomSumBuffer[];
double MomSumAbsBuffer[];
double MomAbsSumBuffer[];
double MomAbsSum2Buffer[];
double temp;
bool First=true;
int limit,i;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
if (First){limit=Bars-PeriodTDI; First=false;} else limit=Bars-counted_bars;
// limit=Bars-PeriodTDI;
ArrayResize(MomBuffer,limit);
ArrayResize(MomAbsBuffer,limit);
ArrayResize(MomSumBuffer,limit);
ArrayResize(MomSumAbsBuffer,limit);
ArrayResize(MomAbsSumBuffer,limit);
ArrayResize(MomAbsSum2Buffer,limit);
ArraySetAsSeries(MomBuffer,true);
ArraySetAsSeries(MomAbsBuffer,true);
ArraySetAsSeries(MomSumBuffer,true);
ArraySetAsSeries(MomSumAbsBuffer,true);
ArraySetAsSeries(MomAbsSumBuffer,true);
ArraySetAsSeries(MomAbsSum2Buffer,true);

//---- TODO: add your code here
for(i=0; i<limit; i++)
{
MomBuffer[i]=Close[i]-Close[i+PeriodTDI];
MomAbsBuffer[i]=MathAbs(MomBuffer[i]);
}
for(i=limit; i>=0; i--)
{
temp=0;
MomSumBuffer[i]=iMAOnArray(MomBuffer,0,PeriodTDI,0,MODE_SMA,i)*PeriodTDI;
MomSumAbsBuffer[i]=MathAbs(MomSumBuffer[i]);
Direction_Buffer[i]=MomSumBuffer[i];
}

for(int l=limit; l>=0; l--)
{
MomAbsSumBuffer[l]=iMAOnArray(MomAbsBuffer,0,PeriodTDI,0,MODE_SMA,l)*PeriodTDI;
MomAbsSum2Buffer[l]=iMAOnArray(MomAbsBuffer,0,2*PeriodTDI,0,MODE_SMA,l)*2*PeriodTDI;
TDI_Buffer[l]=MomSumAbsBuffer[l]-(MomAbsSum2Buffer[l]-MomAbsSumBuffer[l]);
}

//---- done

//----
return(0);
}
//+------------------------------------------------------------------+

Некоторые пояснения к коду этого индикатора.

Основной параметр:
extern int PeriodTDI=20; - период индикатора, период моментума

Основные буферы:
double TDI_Buffer[]; - буфер значений индекса обнаружения тренда (TDI)
double Direction_Buffer[]; - буфер значений направления тренда (TDI)

Вспомогательные (промежуточные) буферы:
double MomBuffer[]; - буфер для хранения значений моментума за PeriodTDI , Mom=Price-Price[PeriodTDI]

double MomAbsBuffer[]; - буфер абсолютных значений моментума , MomAbs=Abs(Mom)

double MomSumBuffer[]; - буфер суммы моментумов за PeriodTDI , MomSum=Sum(Mom, PeriodTDI)

double MomSumAbsBuffer[]; - буфер абсолютных значений суммы моментума (Abs от MomSumBuffer[] , MomSumAbs=Abs(MomSum)

double MomAbsSumBuffer[]; - буфер значений суммы от MomAbsBuffer[] за PeriodTDI , MomAbsSum=Sum(MomAbs, PeriodTDI )

double MomAbsSum2Buffer[]; - буфер значений суммы от MomAbsBuffer[] за 2* PeriodTDI , MomAbsSum2=Sum(MomAbs, 2*PeriodTDI )

Буфер Direction_Buffer[] (направления) вычисляется как MomSumBuffer[]
Буфер TDI_Buffer[] (индекс тренда) = MomSumAbsBuffer[]-(MomAbsSum2Buffer[]-MomAbsSumBuffer[]);

Зеленым цветом приведены формулы из журнала на языке TS Omega.

Те, кто будет изучать MQL-4, должны удивиться – почему код индикатора получился таким тяжеловесным. Ведь в расчете индикатора используется 8 буферов (массивов) 2 видимых и 6 внутренних, а именно столько позволяется использовать при написании пользовательского индикатора. Дело в том, что на тот момент язык MQL-4 еще не принял текущего окончательного вида, каким он является сейчас, и если бы я использовал 6 внутренних массивов ( MomBuffer[], MomAbsBuffer[], MomSumBuffer[], MomSumAbsBuffer[], MomAbsSumBuffer[], MomAbsSum2Buffer[]) как видимые, то они стали бы действительно видимыми и вылезли на график. Необходимо было использовать эти 6 дополнительных вспомогательных буферов, но при этом они не должны вылезать на график цены. На тот момент был единственный способ обойти это противоречие – объявить эти буфера в блоке start(), который выполняется при каждом новом тике.
Как вы понимаете, это сразу затрудняет оптимизацию быстродействия этого индикатора, ведь создание этих буферов происходит с приходом нового тика , а тики могут поступать несколько раз в секунду на быстром рынке. Кроме того, видимые буфера индикатора, и буфера , объявленные в теле start() между собой отличаются.
Видимые буфера индикатора (TDI_Buffer[], Buffer[]) «привязываются» к индексам ценовых баров автоматически, после выполнения оператора соответствия SetIndexBuffer: SetIndexBuffer(0,TDI_Buffer);
Эта конструкция говорит МетаТрейдеру, что для вывода нулевого индекса значений индикатора (всего их 8 от 0 до 7) будут браться данные из буфера TDI_Buffer.
Для ценовых баров индексация значений идет от максимального значения до нулевого, то есть, если мы имеем 3000 баров, то для прохождения по истории цены закрытия (Close) нужно организовать цикл от Close[2999] до Close[0] . Можно представить последовательность A(n), A(n-1), A(n-2), …. A(2), A(1), A(0) .
Соответственно, для получения значения буфера TDI_Buffer для текщего (нулевого) бара нужно использовать TDI_Buffer[0].
Для буферов , объявленных в блоке start() (и не привязанных к индексам индикатора) последовательность выглядит с точностью до наоборот: A(0), A(1), A(2), … A(n-2), A(n-1), A(n) . n – количество значений в массиве/буфере.
Кроме того, перед использованием такого массива необходимо объявить его размер, иначе он так и останется неинициализированным , то есть нулевой длины:
ArrayResize(MomBuffer,limit); здесь limit – количество элементов в массиве MomBuffer.
Но это не единственная тонкость. Для того, чтобы индексы внутреннего буфера соответствовали индексам ценовых буферов необходимо перевернуть этот массив. Это типа объявления на вокзале «Нумерация поезда с хвоста поезда» - иначе вычисления идти будут, никаких ошибок не получите, а на выходе будет бессмыслица. Делается такое объявление оператором ArraySetAsSeries(): ArraySetAsSeries(MomBuffer,true); Подробности можно посмотреть в Словаре МетаЭдитора.

На этом, думаю, для начала можно остановиться. В следующем выпуске мы рассмотрим еще пару тонкостей, которые нужно знать для программирования в МТ4, а также возможное использование этого индикатора в торговле.

Ведущий раздела –
Rosh
Партнер финансовой группы "ФОРЕКС СИСТЕМС"
rosh@forexsystems.ru

В заключение хотелось бы еще раз попросить наших читателей обязательно поддерживать с нами обратную связь – что понравилось, что нет, ваши советы и комментарии очень нам пригодятся!

 

С уважением к вам,
Трейдеры финансовой группы "ФОРЕКС СИСТЕМС"
http://forexsystems.ru/phpBB


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: fin.forex.forexsystems
Отписаться
Вспомнить пароль

В избранное