В этом коде содержатся три сегмента. Первый сегмент рассчитывает скользящие средние. Параметр avgtype выбирает вид среднего: 1 — простое, 2 — экспоненциальное, 3 — треугольное с передним взвешиванием, 4 — модифицированное VIDYA. Даже если в коде использовано всего одно среднее, рассчитываются два одинаковых, чтобы сделать выбор вида скользящего среднего независимым от модели. Также рассчитывается средний истинный диапазон, значение которого требуется для установки защитных остановок и целевых прибылей в стратегии стандартных выходов. Два дополнительных параметра — fastmalen и slowmalen — указывают период быстрой и медленной скользящих средних. Значения скользящих средних сохраняются в векторах fastma и stowma.
Следующий блок использует выбранную модель для получения сигналов выхода, цен для стоп- приказов и цен для лимитных приказов. Сначала определяются простые соотношения значений (CrossesAbove, CrossesBelow, Turnsllp и TurnsDown). В зависимости от mode/type одна из 4 видов моделей скользящих средних генерирует сигнал. Переменная modeltype принимает следующие значения: 1 — классическая, следующая за трендом модель пересечения двух скользящих средних; 2 — следующая за трендом модель, основанная на наклоне; 3 — противотрендовая модель, основанная на пересечении и 4 — противотрендовая модель на основе поддержки/сопротивления. В классической модели, основанной на пересечении скользящих средних, трейдер открывает длинную позицию, если быстрое среднее поднимается выше медленного, и короткую, если быстрое среднее опускается ниже медленного. Эта модель также может содержать сравнение скользящего среднего и цены в случае, когда период быстрого среднего приравнен к единице. При использовании основанной на наклоне модели, следующей за трендом, трейдер покупает, когда скользящее среднее после снижения стало расти, и продает в обратной ситуации. Эта модель требует только медленного скользящего среднего. Противотрендовая модель представляет собой обратную версию следующей за трендом классической модели пересечения: трейдер покупает, когда быстрое среднее (или собственно цена) опускается ниже медленного, и продает, когда оно поднимется выше. Такая модель — мечта для приверженцев теории противоположного мнения: она работает строго противоположно системе следования за трендом. Последняя модель — грубая система на основе поддержки/сопротивления, где ожидается, что цены будут отскакивать от линии скользящего среднего, как от уровней поддержки/сопротивления. Правила почти идентичны противотрендовой системе пересечения за тем исключением, что медленное среднее должно двигаться в направлении входа. Если медленное скользящее среднее стремится вверх, а цены (или быстрое среднее) падают сверху до его уровня или ниже, то дается сигнал на покупку; в противном случае дается сигнал на продажу. Дополнительное правило тренда обеспечивает защиту от немедленного разворота позиции после соприкосновения или пересечения средних. Без этого ограничения быстрый пробой с последующимразворотом вызвал бы два входа — желаемый вход против тренда и второй при пересечении средней во время отката цен. Контроль тренда позволяет входить только при движении в одном направлении: пересечение и отскок при повышающемся тренде приводят к открытию длинной позиции, а при понижающемся тренде — к открытию короткой.
В последней части кода параметр ordertype определяет вид приказа: 1 — рыночный приказ при открытии; 2 — лимитный приказ; 3 — стоп- приказ. Генерация приказа на покупку или продажу либо отсутствие приказа определяется тем, какой сигнал был сгенерирован предыдущим блоком программы; эта информация содержится в переменной signal: 1 — покупка; —1 — продажа (открытие короткой позиции); 0 — нет приказа.
Уровень цены лимитного приказа (limprice) рассчитывается как сумма максимума и минимума текущего дня, деленная на два. Поскольку многие из моделей не имеют естественного уровня цены для установки входных стоп- приказов, используется стандартный стоп. Его цена (stpprice) получается таким образом: берется цена закрытия предыдущего дня и к ней прибавляется (при сигнале для длинной позиции) или от нее отнимается (при сигнале для короткой позиции) средний истинный интервал за последние 50 дней, умноженный на 0,50; т.е. рынок должен сместиться как минимум на половину среднего дневного движения в направлении желаемого входа, чтобы этот вход имел место. Такой стоп- приказ как бы добавляет методику пробоя к скользящим средним — рынок должен пробить некоторую границу, чтобы сработал вход. Поскольку тестов проводилось множество, мы приводим только наиболее интересные результаты статистического анализа.
мЮВЮКН