Двойная стратегия динамической скользящей средней


Дата создания: 2023-12-13 16:37:05 Последнее изменение: 2023-12-13 16:37:05
Копировать: 2 Количество просмотров: 669
1
Подписаться
1621
Подписчики

Двойная стратегия динамической скользящей средней

Обзор

Эта стратегия использует для принятия торговых решений скольжение скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения скольжения

Стратегический принцип

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

Например, когда MA-склонность и динамическая склонность превышают верхнюю часть, создается сигнал покупки; когда обе кривые падают вниз, создается сигнал продажи. Таким образом, можно отфильтровать некоторые ложные сигналы.

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

Анализ преимуществ

Эта стратегия имеет следующие преимущества:

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

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

  3. Различные параметры позволяют высоко настраивать и оптимизировать для разных сортов.

  4. Содержит функцию без перекрашивания, которая позволяет уменьшить влияние кривой соответствия на результат.

Анализ рисков

Однако есть и другие риски:

  1. Двойная фильтрация может отфильтровывать часть реальных сигналов, что приводит к упущенным возможностям. Можно оптимизировать их, изменяя параметры.

  2. Низкомодульный фильтр для определения порога требует тщательного тестирования. Если параметры неправильные, может возникнуть отклонение сигнала.

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

  4. Функция без репликации не может полностью избежать проблем с соответствием кривой обратной связи. Эффективность на твердом диске еще предстоит проверить.

  5. Высокая степень настройки параметров может привести к усложнению параметрового пространства и увеличению сложности оптимизации.

Направление оптимизации

Эта стратегия может быть оптимизирована в следующих направлениях:

  1. Попробуйте больше комбинаций MA и динамических показателей, чтобы найти наиболее подходящие.

  2. Оптимизация параметров длины MA и динамических показателей, балансировка задержки и шума.

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

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

  5. Испытания на различных сортах и циклах, чтобы найти оптимальный диапазон применения.

  6. Построение механизма адаптации параметров, уменьшение объема ручной оптимизации.

Подвести итог

Эта стратегия в целом является очень гибкой и настраиваемой двойной стратегией MA. Она одновременно ссылается на информацию о ценах и динамике для принятия решений, что позволяет эффективно отфильтровывать ложные сигналы. Фильтр с низкой волатильностью также делает стратегию более гибкой и способной адаптироваться к изменениям рынка.

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

Исходный код стратегии
/*backtest
start: 2023-11-12 00:00:00
end: 2023-12-12 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Allenlk
//@version=4
strategy("DRSI DMA Scalping Strategy", shorttitle="DRSIDMA", overlay=false, initial_capital=1000, pyramiding=2, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

//Inputs
matype             = input(7, minval=1, maxval=8, title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA, 8=Tilson T3", group="Moving Average")
masrc              = input(close, title="MA Source", group="Moving Average")
malen              = input(5, title="Moving Average Length - LookBack Period", group="Moving Average")
factorT3           = input(defval=7, title="Tilson T3 Factor - *.10 - so 7 = .7 etc.", minval=0, group="Moving Average")
maderiv            = input(3, title="MA Slope Lookback", minval=1, group="Moving Average")
masmooth           = input(5, title="MA Slope Smoothing", minval=1, group="Moving Average")
momtype            = input(3, minval=1, maxval=3, title="1=RSI, 2=CCI, 3=RSI/ROC", group="Momentum Moving Average")
momsrc             = input(close, title="Momentum Source", group="Momentum Moving Average")
momlen             = input(3, title="Momentum Length", minval=1, group="Momentum Moving Average")
momderiv           = input(8, title="Momentum Slope Lookback", minval=1, group="Momentum Moving Average")
momsmooth          = input(7, title="Momentum Slope Smoothing", minval=1, group="Momentum Moving Average")
higherTf           = input("1", title="Higher timeframe?", type = input.resolution, group="Time Resolution")
higherTfmult       = input(130, title="MA Slope multiplier for Alternate Resolutions (Make the waves of the blue line similar size as the orange line)", group="Time Resolution")
buffup             = input(0.02, title="Buy when both slopes cross this line", step=0.01, group="Buy and Sell Threshold")
bufflow            = input(-0.03, title="Sell when both slopes cross this line", step=0.01, group="Buy and Sell Threshold")
lowVolMALength     = input(28, title="Big MA Length", minval=1, group="Low Volatility Function")
MAlength           = input(10, title="Low Volatility Moving Average Length", minval=1, group="Low Volatility Function")
MAThresh           = input(0.05, title="Low Volatility Buy and Sell Threshold", step=0.01, group="Low Volatility Function")
Volminimum         = input(2.5, title="Minimum volatility to trade", minval=0, step=0.01, group="Low Volatility Function")

//Low Volatility Function
//When Volatility is low refer to the slope of a long moving average
low_vol_MA         = sma(close, lowVolMALength)
low_vol_down       = (low_vol_MA[3] - low_vol_MA[1]) > MAThresh
low_vol_up         = (low_vol_MA[3] - low_vol_MA[1]) < MAThresh * -1
percent_volatility = (1 - (low / high)) * 100
chng_MA            = sma(percent_volatility, MAlength)
bad_vol            = chng_MA < Volminimum

//No repaint function
nrp_funct(_symbol, _res, _src) => security(_symbol, _res, _src[barstate.isrealtime ? 1 : 0])

//hull ma definition
hullma = wma(2*wma(masrc, malen/2)-wma(masrc, malen), round(sqrt(malen)))

//TEMA definition
ema1 = ema(masrc, malen)
ema2 = ema(ema1, malen)
ema3 = ema(ema2, malen)
tema = 3 * (ema1 - ema2) + ema3

//Tilson T3
factor = factorT3 *.10
gd(masrc, malen, factor) => ema(masrc, malen) * (1 + factor) - ema(ema(masrc, malen), malen) * factor 
t3(masrc, malen, factor) => gd(gd(gd(masrc, malen, factor), malen, factor), malen, factor) 
tilT3 = t3(masrc, malen, factor) 
 
//MA Type 
avg = matype == 1 ? sma(masrc,malen) : matype == 2 ? ema(masrc,malen) : matype == 3 ? wma(masrc,malen) : matype == 4 ? hullma : matype == 5 ? vwma(masrc, malen) : matype == 6 ? rma(masrc,malen) : matype == 7 ? 3 * (ema1 - ema2) + ema3 : tilT3

//MA Slope Percentage
DeltaAvg      = (avg / avg[maderiv]) - 1
SmoothedAvg   = sma(DeltaAvg, masmooth) 
MAout         = nrp_funct(syminfo.tickerid, higherTf, SmoothedAvg) * higherTfmult

//Momentum indicators
Momentum = momtype == 1 ? rsi(momsrc, momlen) : momtype == 2 ? cci(momsrc, momlen) : momtype == 3 ? rsi(roc(momsrc,momlen),momlen) : na

//Momentum Slope Percentage
Deltamom = (Momentum / Momentum[momderiv]) - 1
SmoothedMom = sma(Deltamom, momsmooth) 
Momout   = nrp_funct(syminfo.tickerid, higherTf, SmoothedMom)

//Plottings
plot(buffup, color=color.green, title="Buy line")
plot(bufflow, color=color.red, title="Sell line")
plot(MAout, color=color.blue, linewidth=2, title="MA Slope")
plot(Momout, color=color.orange, linewidth=2, title="Momentum Slope")

longCondition = bad_vol ? low_vol_up : MAout > buffup and Momout > buffup
if (longCondition)
    strategy.entry("Buy", strategy.long)

shortCondition = bad_vol ? low_vol_down : MAout < bufflow and Momout < bufflow
if (shortCondition)
    strategy.entry("Sell", strategy.short)