Эта стратегия использует перекресток двух скользящих средних для определения изменений тенденций на рынке и принимает решения о покупке/продаже на основе направления тренда.
В основе этой стратегии лежат две скользящие средние: быстрый MA (период 32 по умолчанию) и медленный MA (также период 32 по умолчанию, регулируемый с помощью параметров). Когда цена закрытия пересекает канал, образованный этими двумя MA, это указывает на изменение тренда, и стратегия генерирует соответствующие сигналы покупки / продажи:
С помощью этого метода перекрестного использования MA стратегия может следовать тренду, удерживая длинные позиции в восходящих тенденциях и короткие позиции в нисходящих тенденциях, пока не появится сигнал об обратном движении.
Для решения этих рисков можно рассмотреть возможность добавления соответствующих фильтров, таких как ATR или фильтры среднего истинного диапазона, для уменьшения переоценки на рыночных рынках; установления разумных стоп-лосс для контроля потерь на одной сделке; и непрерывной оптимизации параметров для адаптации к рынку.
Вышеперечисленные оптимизации могут улучшить способность стратегии справляться со сложными рынками, но необходимо следить за тем, чтобы избежать чрезмерной оптимизации, которая может привести к корректировке кривой и плохой будущей производительности.
Двойная стратегия MA, следующая за трендом, улавливает тенденции через кроссоверы MA. Она проста, проста в использовании и широко применима. Однако она плохо работает на различных рынках, неадекватно реагирует на экстремальные движения и сталкивается с трудностями в оптимизации параметров.
Стратегия может быть оптимизирована путем внедрения большего количества фильтрующих индикаторов, динамических стоп-лоссов, размеров позиций, многочасового анализа и адаптивных параметров.
В целом, эта стратегия может служить базовой стратегией, следующей за трендом, но она сложна в одиночку и лучше подходит как часть портфеля стратегий.
/*backtest start: 2023-03-16 00:00:00 end: 2024-03-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 //study(title="Demo - SSL Basic", shorttitle="Demo - SSL Basic", overlay=true) strategy(title='Demo - SSL Basic', shorttitle='Demo - SSL Basic', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, commission_value=0.15) // Backtest Date Range start_date_long = input(title='Backtest Long Start Date', defval=timestamp('01 Jan 2018 00:00 +0530')) end_date_long = input(title='Backtest Long End Date', defval=timestamp('25 Jan 2030 00:00 +0530')) backtest_range = true // Inputs maType = input.string(title='SSL MA Type', options=['SMA', 'EMA', 'WMA'], defval='SMA') sslLen = input(title='SSL Length', defval=32) showCross = input(title='Show Crossover?', defval=true) showEntry = input(title='Show Entry?', defval=true) showTrend = input(title='Show Trend Colors?', defval=true) // Calc MA for SSL Channel calc_ma(close, len, type) => float result = 0 if type == 'SMA' // Simple result := ta.sma(close, len) result if type == 'EMA' // Exponential result := ta.ema(close, len) result if type == 'WMA' // Weighted result := ta.wma(close, len) result result // Add SSL Channel maHigh = calc_ma(high, sslLen, maType) maLow = calc_ma(low, sslLen, maType) Hlv = int(na) Hlv := close > maHigh ? 1 : close < maLow ? -1 : Hlv[1] sslDown = Hlv < 0 ? maHigh : maLow sslUp = Hlv < 0 ? maLow : maHigh ss1 = plot(sslDown, title='Down SSL', linewidth=2, color=showTrend ? na : color.red) ss2 = plot(sslUp, title='Up SSL', linewidth=2, color=showTrend ? na : color.lime) // Conditions longCondition = ta.crossover(sslUp, sslDown) shortCondition = ta.crossover(sslDown, sslUp) // Strategy if shortCondition strategy.close('Long', comment='Long Exit', alert_message='JSON') if longCondition strategy.close('Short', comment='Short Exit', alert_message='JSON') if backtest_range and longCondition strategy.entry('Long', strategy.long, comment='Long Entry', alert_message='JSON') if backtest_range and shortCondition strategy.entry('Short', strategy.short, comment= 'Short Entry', alert_message='JSON') // Plots fill(ss1, ss2, color=showTrend ? sslDown < sslUp ? color.new(color.lime, transp=75) : color.new(color.red, transp=75) : na, title='Trend Colors')