Эта стратегия использует верхние и нижние полосы линейного регрессионного канала в сочетании с двойным стандартным отклонением для установки сигналов прорыва покупки и продажи, для установления позиций при выходе цен.
Основная логика этой стратегии основана на верхней полосе, нижней полосе и средней линии линейного регрессионного канала.
Вычислить значение линейной регрессии linreg цен, и следующий период
Вычислить наклон наклон и пересечение пересечения линейной регрессионной линии на основе линерег
Расчет отклонения отклонения цен относительно регрессионной линии
Установите множитель дева отклонения, чтобы получить смещение верхних и нижних полос
Когда цена выходит вверх из нижней полосы, настроить сигнал покупки купить
Когда цена выходит вниз из верхней полосы, настроить сигнал продажи продать
Когда цена отступает от средней линии канала, установленный сигнал выхода прибыли
Настройка логики торговли на основе сигналов покупки, продажи и выхода
Наибольшее преимущество этой стратегии заключается в том, что она использует средне- и долгосрочную тенденцию, отраженную линейным регрессивным каналом.
Высшие и нижние диапазоны могут эффективно отражать нормальный диапазон колебаний цен. Использование их для установки торговых сигналов может уменьшить ложные сигналы.
Пересечение середины линии как сигнал получения прибыли может максимизировать прибыль и избежать потерь, вызванных отклонениями после получения прибыли.
Канал линейной регрессии имеет некоторую задержку, которая может эффективно отфильтровать краткосрочный рыночный шум и сделать торговые сигналы более надежными.
Эта стратегия имеет несколько параметров и легко внедряется, подходит для алгоритмической торговли.
Эта стратегия сопряжена с некоторыми рисками:
Задержка линейного регрессивного канала может пропустить тенденции после резких краткосрочных изменений. Период может быть сокращен для оптимизации.
Неправильное настройка множителя отклонений также может привести к ложным сигналам.
Если полагаться только на сигналы прорыва, это может привести к потерям.
Есть некоторые риски, связанные с корректировкой кривой.
Основные направления оптимизации этой стратегии:
Оптимизировать длину линейного регрессионного канала, чтобы сбалансировать задержку и чувствительность.
Оптимизировать множитель отклонений для улучшения качества сигнала при максимальном контроле рисков.
Добавить другие индикаторы для фильтрации сигнала для улучшения показателя выигрыша, например, EMA, KDJ и т.д.
Добавить механизмы остановки потерь, такие как ATR, отслеживающие остановку потерь.
Проверить влияние различных источников данных на стратегию, например, скорректированные закрытия, индексные данные и т.д.
Динамическое регулирование параметров или весов сигнала на основе рыночных условий.
В целом, это система прорыва, использующая линейный регрессионный канал в качестве индикатора сигнала. Логика стратегии ясна и легко понятна, с несколькими параметрами, что делает прямую торговлю относительно легкой для реализации. Однако, как динамически оптимизировать параметры на основе меняющихся рыночных условий и комбинировать другие индикаторы для фильтрации сигнала является ключом к успеху этой стратегии. Благодаря постоянному тестированию и оптимизации эта стратегия может стать стабильной количественной системой, генерирующей прибыль.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Robotrading //@version=4 strategy("robotrading linreg", "linreg", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, commission_value = 0.1) //Settings source = input(close) length = input(100, minval=1) offset = input(0, minval=0) dev = input(2.0, "Deviation") smoothing = input(1, minval=1) mtf_val = input("", "Resolution", input.resolution) signals = input("Recent", "Signals Display", options=["Recent", "All"]) goto = input(0, "End At Bar Index") //Lin.reg. cc(x) => x=="Red"?color.red:x=="Lime"?color.lime:x=="Orange"?color.orange:x=="Teal"?color.teal:x=="Yellow"?color.yellow:x=="Black"?color.black:color.white data(x) => sma(security(syminfo.tickerid, mtf_val!="" ? mtf_val : timeframe.period, x), smoothing) linreg = data(linreg(source, length, offset)) linreg_p = data(linreg(source, length, offset+1)) //Deviation x = bar_index slope = linreg - linreg_p intercept = linreg - x*slope deviationSum = 0.0 for i = 0 to length-1 deviationSum:= deviationSum + pow(source[i]-(slope*(x-i)+intercept), 2) deviation = sqrt(deviationSum/(length)) x1 = x-length x2 = x y1 = slope*(x-length)+intercept y2 = linreg //Cross dm_current = -deviation*dev + y2 dp_current = deviation*dev + y2 ex_current = (dm_current + dp_current) / 2 buy = crossunder(close, dm_current) sell = crossover(close, dp_current) exit = crossover(close, ex_current) or crossunder(close, ex_current) //Channel updating = goto <= 0 or x < goto // if updating // line b = line.new(x1, y1, x2, y2, xloc.bar_index, extend.right, color.aqua, width = 3) // line.delete(b[1]) // line dp = line.new(x1, deviation*dev + y1, x2, deviation*dev + y2, xloc.bar_index, extend.right, color.red, width = 3) // line.delete(dp[1]) // line dm = line.new(x1, -deviation*dev + y1, x2, -deviation*dev + y2, xloc.bar_index, extend.right, color.lime, width = 3) // line.delete(dm[1]) //Lines plot(dm_current, color = color.lime) plot(dp_current, color = color.red) plot(ex_current) //Trading if ex_current > 0 strategy.entry("Long", strategy.long, na, limit = dm_current) strategy.entry("Short", strategy.short, na, limit = dp_current) strategy.exit("ExitLong", "Long", limit = ex_current) strategy.exit("ExitShort", "Short", limit = ex_current)