Эта стратегия основана на динамическом индикаторе скользящей средней для отслеживания ценовой тенденции в режиме реального времени и генерации торговых сигналов при прорыве скользящей средней.
Эта стратегия использует динамические показатели скользящей средней, включая ALMA, EMA, SMA и многое другое. Принцип заключается в том, чтобы идти длинным, когда цена превышает скользящую среднюю, и идти коротким, когда она превышает ее. То есть скользящая средняя служит барометром для ценовой тенденции, и сигналы могут генерироваться, когда происходит изменение тренда.
В частности, стратегия использует скользящие средние, сформированные высокими и низкими ценами. Низкая цена MA служит линией сигнала для длинных сигналов, в то время как высокая цена MA служит линией для шортов. Когда цена закрытия повышается выше низкой цены MA, идти долго. Когда закрытие падает ниже высокой цены MA, идти коротко.
Судя по ценовой тенденции с помощью MA и в сочетании с принципом прорыва для генерации сигналов, формируется простая и практичная стратегия следования тренду.
Эта стратегия оценивает направление тренда с помощью MA и генерирует сигналы, основанные на принципах прорыва. Она проста в использовании и подходит для средне- и долгосрочного хранения. Параметры также могут быть скорректированы для адаптации к изменениям рынка. Риски от краткосрочных колебаний и длительного хранения необходимо управлять с помощью стоп-лосса/прибыли. Есть возможность для улучшения путем включения большего количества индикаторов и поиска оптимальных параметров с помощью машинного обучения.
/*backtest start: 2023-12-02 00:00:00 end: 2024-01-01 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Baseline Strategy - evo", shorttitle="Baseline", overlay=true) //INPUTS mat = input("ALMA", "MA Type", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "ALMA"]) baseline = input(55, title="MA Length") src = input(ohlc4, title="Closing Source") offset = input(0.85, step=0.05, title="Offset (alma only)") sigma = input(10, title="Sigma (alma only)") useCurrentRes = input(true, title="Use Current Resolution") resCustom = input("1440", title="Timeframe") showsignals = input(false, title="Show Signals ?") //BASELINE baselinehigh = mat=="SMA" ? sma(high,baseline) : mat=="EMA" ? ema(high,baseline) : mat=="WMA" ? wma(high,baseline) : mat=="HMA" ? wma(2*wma(high, baseline/2)-wma(high, baseline), round(sqrt(baseline))) : mat=="VWMA" ? vwma(high,baseline) : mat=="RMA" ? rma(high,baseline) : mat=="ALMA" ? alma(high, baseline, offset, sigma) : na baselinelow = mat=="SMA" ? sma(low,baseline) : mat=="EMA" ? ema(low,baseline) : mat=="WMA" ? wma(low,baseline) : mat=="HMA" ? wma(2*wma(low, baseline/2)-wma(low, baseline), round(sqrt(baseline))) : mat=="VWMA" ? vwma(low,baseline) : mat=="RMA" ? rma(low,baseline) : mat=="ALMA" ? alma(low, baseline, offset, sigma) : na //RESOLUTION res = useCurrentRes ? timeframe.period : resCustom mtfhigh = security(syminfo.tickerid, res, baselinehigh) mtflow = security(syminfo.tickerid, res, baselinelow) //PLOTS plot(mtfhigh, color=color.navy, linewidth=2, transp=0, title="Baseline High") plot(mtflow, color=color.navy, linewidth=2, transp=0, title="Baseline Low") long = src > mtfhigh short = src < mtflow barcolor(long ? #ffe0b2 : short ? #2a2e39 : not long and not short ? #b09e82 : na, title="BaseLine BarColor") signal = 0 signal := long ? 1 : short ? 2 : nz(signal[1]) plotshape(showsignals ? (signal != signal[1] and long ? mtflow : na) : na, title="Long", location=location.absolute, size=size.small, style=shape.labelup, text="Long", textcolor=color.black, transp=40, color=#00ff00) plotshape(showsignals ? (signal != signal[1] and short ? mtfhigh : na) : na, title="Short", location=location.absolute, size=size.small, style=shape.labeldown, text="Short", textcolor=color.white, transp=40, color=#ff0000) alertcondition(signal != signal[1], title="Trend Change !", message="Trend Change !") if (long) strategy.entry("Long", strategy.long) if (short) strategy.entry("Short", strategy.short)