
Эта стратегия основана на расхождении движущихся средних значений двойных равновесных линий для создания торгового сигнала. Она рассчитывает две средние линии с быстрым и медленным периодом, когда быстрая линия спускается вниз и прорывает медленную линию, создавая сигнал покупки; когда быстрая линия падает сверху и прорывает медленную линию, создавая сигнал продажи.
Центральная логика этой стратегии заключается в вычислении двух движущихся средних SMA ((len1) и SMA ((len2)), а также их разницы. Len1 представляет собой краткосрочный средний цикл, а len2 - долгосрочный.
Когда краткосрочная средняя линия пересекает долгосрочную среднюю линию снизу, то можно купить, показывая, что краткосрочная цена начинает расти выше долгосрочной тенденции; когда она пересекает долгосрочную среднюю линию снизу, то можно продать, показывая, что краткосрочная цена начинает падать ниже долгосрочной тенденции.
Для фильтрации ошибочных операций стратегия также вводит out3 в качестве линии торгового сигнала. out3 является результатом разграничения среднесрочной средней линии от средней цены после ее сглаживания.
В частности, long переменная имеет положительное значение, когда out3 пересекает dif вверх, как сигнал к покупке; short переменная имеет отрицательное значение, когда out3 пересекает dif вниз, как сигнал к продаже.
Это очень простая и интуитивно понятная стратегия для отслеживания трендов. Она использует бинарный цикл, чтобы поймать точки перехода тренда, которые вызывают пересечение средних линий, и может быть более надежной, чем система с одинарной средней линией. И введение фильтрации торговых сигнальных линий может в некоторой степени предотвратить создание ложных сигналов на рынке волатильности.
В отличие от движущихся стоп-моделей, он использует идею отслеживания тренда, чтобы получить максимальную прибыль, и не будет остановлен, когда тренд будет длиннее. В то же время он будет контролировать потери и своевременно ликвидировать позиции, когда тренд изменится.
Стратегия имеет меньше параметров, ее легко освоить и скорректировать, и она подходит для начинающих, изучающих алгоритмическую торговлю.
Наибольший риск этой стратегии заключается в том, что неправильные циклические параметры двойных средних линий приводят к ошибке торговых сигналов. Если краткосрочный средний цикл len1 слишком длинный, то будет упущена возможность начать фазу тренда; если слишком короткий, то увеличится вероятность ложного сигнала.
Для достижения оптимального сочетания можно скорректировать параметры len1 и len2, а также можно попытаться ввести динамические циклы адаптации к равновесию. Кроме того, можно уменьшить количество ложных сигналов, оптимизировав параметры фильтров.
Стратегия отслеживания тенденций также требует внимания к контролю за размером одиночных потерь, которые можно оптимизировать, установив стоп-лосс или введя управление позициями.
Стратегия двулинейного разрыва является очень типичным представителем стратегии отслеживания тенденций. Ее простая двулинейная кросс-система обеспечивает стабильный источник сигнала, и в сочетании с фильтрами можно эффективно избежать помех от рыночных колебаний. Лучшую эффективность стратегии можно получить путем оптимизации параметров равнолинейного цикла.
/*backtest
start: 2022-10-10 00:00:00
end: 2023-10-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//by afrazium
//@version=3
strategy(title="SMA Diff strat", shorttitle="SMAD STR", overlay=false, initial_capital=1, precision=8, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, calc_on_order_fills= false, calc_on_every_tick=false, pyramiding=0)
len1 = input(50, minval=1, title="Length1"), len2 = input(100, minval=1, title="Length2"), smo = input(1, minval=1, title="Smoothing")
src = input(ohlc4, title="Source")
mid = src
expr1 = sma(src, len1), expr2 = sma(src, len2)
dif = (expr1 - expr2), out1 = (mid - expr1), out2 = (mid - expr2), out3 = sma(out1, smo)
long = crossover(out3, dif) ? out3 : na, short = crossunder(out3, dif) ? out3 : na
plot(out3, color=black, linewidth=2), hline(0)
clr = out2 >= out1 ? lime : red, plot(dif, color=clr, linewidth=2)
plot(long, title = 'Crossover', color = green, style = circles, linewidth=4), plot(short, title = 'Crossunder', color = red, style = circles, linewidth=4)
strategy.entry("buy", strategy.long, when=crossover(out1, dif))
strategy.close("buy", when=crossunder(out1, dif))
//plot(out2, color=blue, linewidth=2)
//A = plot(mid/10, color=red, linewidth=1, transp=100), B = plot(mid/20, color=red, linewidth=1, transp=100)
//C = plot(-mid/10, color=green, linewidth=1, transp=100), D = plot(-mid/20, color=green, linewidth=1, transp=100)
//fill(A, B, color=red), fill(C, D, color=green)