Эта стратегия сочетает в себе использование индикатора RSI для выявления сигналов перекупленности и перепроданности, полосы Боллинджера для определения ценового прорыва и скользящих средних кроссоверов для оценки рынка на разных стадиях тренда, с целью получения прибыли.
Стратегия состоит из следующих основных показателей:
Индикатор RSI: когда линия RSI пересекает порог перекупленности или пересекает порог перепроданности, соответствующим образом размещаются длинные или короткие сделки.
Болинджерские полосы: когда цена проходит через верхнюю полосу Болинджера, проводится короткая торговля; когда цена проходит через нижнюю полосу Болинджера, проводится длинная торговля.
Движущаяся средняя: высчитываются самые высокие и самые низкие цены за определенный период (например, 5 периодов). Когда цена выше высокой точки за последние 5 периодов, проводится длинная торговля; когда цена ниже самой низкой точки за последние 5 периодов, проводится короткая торговля.
MACD: кросс-овер и кросс-смерть быстрой линии, медленной линии и линии MACD используются в качестве вспомогательных показателей суждения.
Эти индикаторы работают вместе, чтобы судить о рынке на этапах тренда и консолидации. Полосы Боллинджера идентифицируют прорывы и реверсии к среднему значению. Движущиеся средние определяют точки обратного движения тренда во время консолидации. Экстремальные показатели RSI обнаруживают перекупленные / перепроданные рыночные условия для контратендерных сделок.
Преимущества этой стратегии:
Сочетание нескольких индикаторов повышает точность. RSI, полосы Боллинджера, скользящая средняя и многое другое взаимодействуют, чтобы создать надежные торговые сигналы.
Применяется для различных рыночных условий. Боллингерские полосы для тенденций, скользящие средние для консолидации, RSI для крайних.
Разумная частота торговли, параметры индикатора настроены консервативно, чтобы избежать переоценки.
Чистая структура кода. Легко понимать, редактировать и строить.
Некоторые риски требуют внимания:
Неправильные параметры индикатора могут генерировать неправильные торговые сигналы. Параметры нуждаются в постоянном тестировании и оптимизации.
Частые изменения длинной/короткой позиции во время перемены тренда увеличивают затраты на торговлю. Период хранения может быть скорректирован.
Логические недостатки, скрытые в коде, могут привести к ненормальным сделкам.
Стратегия может быть улучшена в следующих аспектах:
Добавьте стоп-лосс, чтобы зафиксировать прибыль и уменьшить убытки.
Включите объем торговли, чтобы избежать ложных сигналов.
Внедрить машинное обучение для поиска оптимальных параметров на основе исторических данных.
Создать графический интерфейс для интуитивного отображения производительности.
Провести обратное тестирование, чтобы найти лучшие комбинации параметров.
Эта стратегия сочетает в себе скользящую среднюю, полосы Боллинджера, RSI и многое другое для генерации торговых сигналов. Ее универсальность и точность являются явными достоинствами, в то время как необходимо управлять рисками настройки параметров и кодирования. Следующими шагами являются добавление остановок, машинное обучение для оптимизации параметров, GUI для мониторинга и улучшение обработки исключений.
/*backtest start: 2024-01-19 00:00:00 end: 2024-02-15 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("MD strategy", overlay=true) lengthrsi = input( 14 ) overSold = input( 30 ) overBought = input( 70 ) price = close source = close lengthbb = input(20, minval=1) mult = input(2.0, minval=0.001, maxval=50) direction = input(0, title = "Strategy Direction",minval=-1, maxval=1) fastLength = input(12) slowlength = input(26) MACDLength = input(9) consecutiveBarsUp = input(3) consecutiveBarsDown = input(3) lengthch = input( minval=1, maxval=1000, defval=5) upBound = highest(high, lengthch) downBound = lowest(low, lengthch) ups = price > price[1] ? nz(ups[1]) + 1 : 0 dns = price < price[1] ? nz(dns[1]) + 1 : 0 MACD = ema(close, fastLength) - ema(close, slowlength) aMACD = ema(MACD, MACDLength) delta = MACD - aMACD strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long)) basis = sma(source, lengthbb) dev = mult * stdev(source, lengthbb) upper = basis + dev lower = basis - dev vrsi = rsi(price, lengthrsi) if (not na(vrsi)) if (crossover(vrsi, overSold)) strategy.entry("RsiLE", strategy.long, comment="RsiLE") if (crossunder(vrsi, overBought)) strategy.entry("RsiSE", strategy.short, comment="RsiSE") if (crossover(source, lower)) strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", comment="BBandLE") else strategy.cancel(id="BBandLE") if (crossunder(source, upper)) strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands", comment="BBandSE") else strategy.cancel(id="BBandSE") if (not na(close[lengthch])) strategy.entry("ChBrkLE", strategy.long, stop=upBound + syminfo.mintick, comment="ChBrkLE") strategy.entry("ChBrkSE", strategy.short, stop=downBound - syminfo.mintick, comment="ChBrkSE") //plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)