Blog

За громким названием "Индекс товарного канала", как это водится, скрывается простой индикатор.
Wikipedia

 Индикаторы в программе написаны на языке C#, для тех, кто изучает АПИ программы в открытом виде есть на форуме программы.

Как и остальные индикаторы, CCI уже есть, но по традиции прикладываю самодельный индикатор по формулам из wiki.

Строить индикаторы по формулам в программе просто.

 CCI состоит из TypicalPrice и простой скользящей средней.

Все, что необходимо для создания CCI уже есть в программе, однако в индикаторе показал, как создать и TypicalPrice и простую скользящую среднюю.

 Я призываю Вас изучать индикаторы.

Изменив оригинал в лучшую сторону, есть вероятность построить интересные индикаторы.

Прикладываю индикатор CCI_custom, я применил в нем вместо простой скользящей средней, адаптивную скользящую среднюю.

И вместо TypicalPrice применил экспоненциальную среднюю.

На среднем графике оригинал CCI и самодельный индикатор:

 Как видно, их значения идентичны, т.е. существующий в программе индикатор CCI написан именно так, как описан в wiki.

 На нижнем графике custom Индикатор, получился он с ярко выраженными дивергенциями, видно, цена идет наверх, а значение индикатора вниз.

Однако он не такой дерганный, как оригинальный, более пологий.

 В wiki предлагается два варианта стратегий, ссылаясь на то, что у разных авторов есть свое видение работы индикатора.

 В построении этих стратегий, вместо оригинального индикатора, я буду использовать свой custom индикатор.

 Одна группа, считает, что для длинных позиций нужно:

Покупать, когда CCI поднимается выше 100.
Продавать, когда CCI опускается ниже 100.

 А для коротких позиций:

Продавать (коротко), когда CCI опустится ниже -100.
И закрывать короткую позицию, когда CCI поднимется выше -100.

 Например, на инструменте биткоин стратегия не выглядит совсем уж не зарабатывающей. (улыбка)


 Вторая группа, в качестве сигнальной линии рекомендует использовать нулевое значение, называя подобную стратегию Zero CCI, то есть:
 Покупать (открывать длинную, закрывать короткую позицию), когда Индекс товарного канала поднимается выше нуля.
 Продавать (закрывать длинную, открывать короткую позицию), когда CCI опустится ниже нуля.

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

  Если чуть задуматься, помимо этих двух стратегий, есть еще одна, это использовать среднюю от CCI, вместо сигнальных линий.

И можно как минимум еще объединить все три стратегии.

 Например, входить в позицию около нуля.
А выходить из длинных позиций при пересечении CCI со своей средней, когда индикатор находится выше 100
и ниже минус 100 выходить из коротких позиций.

 Для такой стратегии мой custom индикатор не подойдет, в силу дивергенций.
Как и не подойдет оригинал, в силу своей дёрганности, из-за которой будет много ложных срабатываний.

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

 Всем удачи!

Материалы:

CCI_wiki.tscript
CCI_custom.tscript
CCI_wiki_custom_simile.tscript

CCI_100.tscript
CCI_Zero.tscript

 (Скачайте файл. Откройте в программе TSLab "Лаб" -> "Управление скриптами" → Нажмите кнопку "Загрузить из файла").

 Wikipedia Индекс относительной силы

Как именно рассчитывается RSI в программе? Легко убедиться, что рассчитывается именно так, как описано в wiki.

Находим положительные (U) и отрицательные (D) ценовые изменения.

Рассчитываем относительную силу RS.

И на основе RS рассчитывается и сам Индекс относительной силы RSI.

Сейчас рынок меняется очень быстро, когда Автор создавал индикатор,

изменения рынка были медленнее и автор использовал двухнедельный период.

 Чтобы ближе быть к расчетам автора, на одноминутном графике достаточно просто поставить период побольше,

но для удобства расчета, в программе можно использовать готовые дневные свечи, использовав блок "Сжатие".
RSIcalc.tscript

 В программе можно легко создать свой индикатор,

если индикатор предполагается использовать в нескольких скриптах и

необходимый индикатор отличается от встроенного в программу.

Для этого в управлении скриптами создаем индикатор. ind_RSI_calc_1.tscript

Я скопировал блоки из скрипта,

вывод значения созданного индикатора всегда через блок "Возвращаемое значение".

Вывести можно, естественно, только одно значение из одного индикатора.

Входов может быть сколько угодно. Выполняются они с помощью источников.

 Вход в индикатор может быть число, как у меня и индикатор в скрипте можно

 будет использовать для любого числа. Или использовать вход с источника данных,

в этом случае в индикаторе нужно будет использовать определеннное значение бара.

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

 Появится папка, естественно, если нет в индикаторе ошибок, он будет доступен в этой папке.

Теперь я могу использовать свой индикатор в любых скриптах.

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

 Здесь можно применить тот же способ, можно подсчитать несколько различных усреднений,

и в каких-то скриптах использовать один расчет, а в каких-то другой. В формуле, малое число избавит от деления на 0. ind_RSI_calc.tscript

 

 В wiki описаны несколько сигналов для индикатора. Обязательно ознакомьтесь, если не знакомы.

Все сигналы можно подытожить тем, что если индикатор высоко, то не следует покупать, если индикатор низко,

то не следует продавать.

 В примере стратегия, если индикатор высоко, то продаем, если индикатор низко - покупаем.

С коротким профитом. И стоплоссом, цена которого расчитывается трейлстопом в относительных значениях.

 Возможно к стратегии стоит добавить индикатор моментум, для сигналов входа в позицию. RSI_.tscript

 Вторая стратегия RSI_trend продаем и закрываем лонг, если индикатор высоко.

И покупаем и закрываем шорт, если индикатор низко. RSI_trend.tscript

Оптимизация параметров не проводилась.

 Примеры скриптов предназначены исключительно для изучения программы TSLab.

Всем удачи!

Материалы:

ind_RSI_calc.tscript

ind_RSI_calc_1.tscript

RSI_.tscript

RSI_trend.tscript

RSIcalc.tscript

 (Скачайте файл. Откройте в программе TSLab "Лаб" -> "Управление скриптами" → Нажмите кнопку "Загрузить из файла").

Индикатор Aroon был предложен трейдером Тушар Чанде в 1995году.

На картинке синия линия - AroonUp, AroonDown - красная линия

AroonUp - показывает количество баров с момента появления последнего максимума.
 ((N количество баров – H число баров от максимума) / N количество баров) * 100%

Где, N – выбранный период индикатора,
 Н – количество баров, прошедших после формирования последнего максимума в рассматриваемом временном периоде.
После формирования ценой нового максимума, «Aroon Up» снова равен 100%.

AroonDown - показывает количество баров с момента появления нового минимума.
((количество баров - число баров от минимума) / количество баров) * 100

  Строим одну из возможных систем:

Если AroonUp больше AroonDown - это бычий сигнал;
Если AroonUp ниже AroonDown - это медвежий сигнал;
А если AroonUp и AroonDown приблизительно равны - это период консолидации.

 Фильтр консолидации построил на разнице двух индикаторов,

чем больше значение параметра, тем более сильный сигнал от индикаторов ожидаем для входа в позицию.
 Выход из позиций организуем на обратных сигналах. Для выхода из позиции так же можно применить фильтр консолидации,
я вывел его в отдельную формулу, самостоятельно добавьте данное условие для выхода из позиции.
 Проведенная оптимизация на акциях Tesla дала параметры 300 для индикаторов Aroon(их параметры связаны) и 62% для консолидации.
Т.е. оптимизатор показал, что если разница индикаторов находится вне диапазона 62%, система дает лучшие показатели доходности.


Приведенный пример алгоритма предназначен исключительно в образовательных целях, для изучения программы TSLab

Всем удачи!

Материалы: Aroon.tscript
(Скачайте файл. Откройте в программе TSLab "Лаб" -> "Управление скриптами" → Нажмите кнопку "Загрузить из файла").


wikipedia

Стратегия на примере индикаторов ADX и DI , из системы технических индикаторов разработанной Уэллсом Уайлдером  и представленная в июне 1978 года в его книге «Новые концепции в технических торговых системах».
 Уайлдер полагал, что растущие и высокие значения ADX свидетельствуют о сильном тренде, а падающие и низкие значения говорят об отсутствии тренда. О действительном направлении тренда можно судить по соотношению +DI и -DI.

В wiki предложена стратегия, которую и построим:

  • Для длинных позиций:
    • Купить, если +DI > -DI и ADX растёт.
    • Выйти из позиции, если +DI < -DI или ADX падает.
  • Для коротких позиций:
    • Войти в короткую позицию, если +DI < -DI и ADX растёт.
    • Закрыть короткую позицию, если +DI > -DI или ADX падает.

 Стратегия достаточно проста, если определить для себя, что это такое «растет» и «падает».
 Человек, видя график индикатора, четко может сказать, что вот здесь индикатор растет, а здесь его значение уменьшается. Но человек это видит только в истории и не знает, что будет со значением индикатора в будущем.
 Я могу предложить несколько вариантов определения роста индикатора.
 Например, если предыдущее значение ADX меньше, чем текущее, очевидно индикатор стал больше, а значит растет.
 В программе это легко записать  ADX[i-1] < ADX
 Или например, такая запись ADX[i-5]<ADX , будет означать, что текущее значение больше, чем пять баров назад, индикатор стал больше. Но это не означает, что например три бара назад индикатор был ниже текущего значения. Поэтому правильнее будет
 ADX[i-5]<ADX[i-4] && ADX[i-4]<ADX[i-3] && ADX[i-3]<ADX[i-2] && ADX[i-2]<ADX[i-1] && ADX[i-1]<ADX
 Получается последовательный ряд, подтверждающий наличие роста. Таких моментов в истории уже не так уж и много. И здесь важно понимать, а не может ли такое условие означать окончание роста.
 Т.е. как бы там ни было, человеку, или с помощью оптимизации константы ADX > ADX[i-Константа], или «на глаз», необходимо определить, что индикатор растет.
 Можно взять среднее значение ADX и относительно него определять состояние индикатора.
 SMAadx < ADX
  Вариантов много, есть например такой вариант ADX > ADX[i-speed]


 Т.е. вместо фиксированного бара, я поставил некоторый индикатор. Здесь есть один маленький технический момент.
 В блоках формула и логическая формула есть параметр «Начинать С», его необходимо поставить больше, чем возможное значение индикатора. Например, при оптимизации, мы можем задать пройти значения константы от одного до 1000, вот в блоке формулы, данный параметр необходимо поставить 1001.
 Возможно, стоит сгладить DI, перед тем как делать условия для входа, или как писал Уайлдер, необходимо смотреть на величину ADX, если значение индикатора маленькое, то в данный момент тренда нет.

Материалы: ADX.tscript (Скачайте файл. Откройте в программе TSLab "Лаб" -> "Управление скриптами" → Нажмите кнопку "Загрузить из файла").


Стратегия описана в одной из статей Юрия Чеботарева и Сергея Яшина в журнале Валютный спекулянт.

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

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

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

Авторы статьи предлагают интересный подход и стратегия интересна именно подходом к параметрам.

 

Если среднее значение бара (H+L)/2 ниже некоторого значения Дельта (L+∆), то это бар с низкой волатильностью рынка,  на котором нам не интересно извлекать прибыль.
 Если среднее значение бара (H+L)/2 выше значения Дельта (L+∆), то это бар с высокой волатильностью рынка, вероятно есть смысл войти в позицию, с целью извлечения краткосрочной прибыли.


Если (H+L)/2 > L+∆ – это сигнал открытия длинной позиции. Это же условие является условием нахождения в длинной позиции для всех баров.
Если (H+L)/2 ≤ L+∆ - это сигнал не открывать длинные позиции.

На следующем рисунке показаны правила входа в рынок с короткими позициями.


Если среднее значение бара выше уровня H-∆

(H+L)/2≥H-∆, то имеет место бар с низкой волатильностью.

 Если (H+L)/2<H-∆ – это сигнал открытия короткой позиции и одновременно это условие нахождения в короткой позиции для всех баров.

Здесь, под ∆ понимается некое критическое значение цены, превышая которое, рынок начинает развивать поступательное движение. Его можно выразить через сам бар.



Сначала определим вторичный коэффициент k для длинных позиций: k=(close - open)/(high-low)

для коротких позиций k=(open-close)/(high-low)

Коэффициент k изменяется от 0 до 1. Если k=0, это бар на не волатильном рынке, боковое движение.

Если k=1, то имеет место трендовый рынок.

Следуя этой логике, если k=0, то ∆ должна быть большой, чтобы условия входа в рынок не выполнялись.

Если k=1, то ∆ должна стремиться к нулю. Отсюда и формула: ∆ = (high-low)*(1-k)

Таким образом, дельта находится индивидуально для каждого бара и не требуется оптимизаций.

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

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

Всем удачи!

 

Материалы:
скрипт Strategy without parameters.tscript  (Скачайте файл. Откройте в программе TSLab "Лаб" -> "Управление скриптами" → Нажмите кнопку "Загрузить из файла").




Среднеквадратическое отклонение


Цены точно не принадлежат нормальному распределению.
Однако наc интересуют не математические обоснования, а возможный доход от действий на рынке.


Несложно заметить, что наименьшее их количество, всего 0.2% находится за пределами трех отклонений. Вероятно, что это неплохие места для входа в позицию.
Тогда как ноль, место, где можно закрыть позицию, так как это место, где случайные величины находятся чаще всего.
Грубо говоря, вероятность того, что следующая случайная величина окажется за пределами трех отклонений, всего 0.2%.
Я вывел на график стандартное отклонение доходности инструмента фьючерса mini на индекс snp500, рассчитанное на основе исторических данных цены. 

Как прогнозировать отклонение? Прогнозировать не легче, чем прогнозировать рынок.
Если отклонение слишком резко выросло и стало 80% в относительных значениях, то конечно есть вероятность, что отклонение будет снижаться. На отклонении есть свои тренды. Как и рынок, отклонение может оцениваться с помощью обычного технического анализа, применять обычные индикаторы SMA, EMA, JMA, константы. У отклонения есть сопротивления, поддержки и т.д. и т.п.
Строим среднюю SMA от цен закрытия баров и далее от этой SMA в обе стороны от графика считаем три стандартных отклонения.

Возвращаясь к иллюстрации нормального распределения.
Когда случайная величина находится за пределами трех отклонений, есть большая вероятность, что следующая случайная величина окажется внутри трех отклонений, и вероятно будет стремиться к нулю на графике распределения.
 Другими словами, когда цена находится за пределами трех отклонений, есть большая вероятность, что цена начнет движение к своей средней SMA. И с другой стороны, если цена находится в пределах трех отклонений, с большой вероятностью она там и останется.

Таким образом я и построил торговую систему. При касании трех StDev исполняется лимитная заявка, а на средней SMA поставил профит.

Примечательно, что система показывает положительные результаты на разных таймфреймах.
Привожу пример посчитанных результатов, программой TSLab, возможной торговли на графиках 10 минут и 5 минут,
одним лотом фьючерса, с учетом комиссионных брокера.

Поэтому количество выборки для расчета стандартного отклонения следует выбирать под себя, под торговлю, которая будет комфортна непосредственно трейдеру.
Чем меньше период для расчета отклонения, тем быстрее робот будет принимать решения о действиях на рынке.
Если провести оптимизацию по параметру количества отклонений и параметру средней SMA, результаты системы будут значительно лучше, но при этом, сама суть идеи пропадает, так как оптимизатор ничего не знает о моих умозаключениях и просто подгоняет систему под историческую выборку цен. Приведу пример на 5 минутном графике:

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

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

Всем удачи!

Материалы.
 StDev_channel_5min.tscript (Скачайте файл. Откройте в программе TSLab "Лаб" -> "Управление скриптами" → Нажмите кнопку "Загрузить из файла").