Эта стратегия определяет рыночные тенденции и входные сроки, используя скрещивание показателей RSI с двумя различными циклическими средними линиями MA. Стратегия действует только тогда, когда RSI выше своей собственной 26-циклической средней линии, и делает дисконт, когда RSI ниже своей собственной 26-циклической средней линии, чтобы контролировать риск.
Эта стратегия использует две средние линии МА: 12-цикличный и 26-цикличный. Когда 12-цикличный быстрый пересекает 26-цикличный медленный, считается, что рынок входит в рост; когда быстрый пересекает медленный, считается, что рынок входит в спад.
В то же время стратегия вводит индикатор RSI в зону перепродажи. Большие позиции открываются только тогда, когда RSI находится выше собственной 26-циклической средней линии, и только тогда, когда RSI находится ниже собственной 26-циклической средней линии, и только тогда, когда RSI находится ниже собственной 26-циклической средней линии.
Эта стратегия, в сочетании с средней линией и определением тренда и времени входа в RSI, позволяет эффективно отслеживать тренд. Введение RSI в качестве фильтрующего условия позволяет уменьшить количество открытых позиций и избежать задержки в нестабильном рынке. Не устанавливая стоп-лосс, можно полностью отслеживать тренд для получения более высокой прибыли.
Поскольку не устанавливается стоп-потери, если ошибочно судить, то убытки могут быть увеличены. Кроме того, если условия фильтрации RSI не установлены правильно, то лучшее время входа может быть упущено.
Можно рассмотреть возможность установки стоп-лосса для контроля максимальных потерь. Параметры RSI можно корректировать соответствующим образом, чтобы найти лучшие условия фильтрации. Параметры средней линии могут быть корректированы соответствующим образом, чтобы использовать более медленную среднюю линию для определения тренда, если рынок сильно колеблется.
Эта стратегия может быть оптимизирована в следующих аспектах:
Проверить комбинации средней линии МА в различных циклах, чтобы найти параметры средней линии, которые лучше соответствуют текущим характеристикам рынка.
Проверить различные параметры цикла RSI, различные условия фильтрации, оптимизировать время входа.
Добавление других показателей или фильтрационных условий для повышения стабильности системы.
Оптимизировать стратегию остановки, контролируя риски при одновременном отслеживании тенденций. Можно тестировать стратегии остановки, такие как отслеживание остановки, процентная остановка, динамическая остановка.
В целом стратегия является более простой и прямой, а через усредненное перекрестное определение тенденций RSI избегает принудительного открытия позиций, что позволяет отслеживать тенденции с лучшей отдачей. Стратегию можно улучшить путем оптимизации параметров, добавления других индикаторов и т. д., чтобы сделать ее более подходящей для сложной и переменной рыночной среды.
/*backtest start: 2023-02-13 00:00:00 end: 2024-02-19 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title = "EMA Cross Strategy", shorttitle = "EMA Cross",calc_on_order_fills=true,calc_on_every_tick =true, initial_capital=21000,commission_value=.25,overlay = true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100) StartYear = input(2018, "Backtest Start Year") StartMonth = input(1, "Backtest Start Month") StartDay = input(1, "Backtest Start Day") UseStopLoss = input(false,"UseStopLoss") //rsiLong = true rsi1 = rsi(close, 14) window() => true stopLoss = input(20, title = "Stop loss percentage(0.1%)") //stopLoss = input(200, title = "Stop loss percentage(0.1%)") maFastSource = input(defval = open, title = "Fast MA Source") maFastLength = input(defval = 12, title = "Fast MA Period", minval = 1) // long ma maSlowSource = input(defval = open, title = "Slow MA Source") maSlowLength = input(defval = 26, title = "Slow MA Period", minval = 1) maFast = ema(maFastSource, maFastLength) maSlow = ema(maSlowSource, maSlowLength) //12 and 26=9%; 3 and8=2%; 26 and 55=2%; when selling on a cross under //maFastRSI = ema(rsi1, 12) //maSlowRSI = ema(rsi1, 26) fast = plot(maFast, title = "Fast MA", color = #7a8598, linewidth = 2, style = line, transp = 50) slow = plot(maSlow, title = "Slow MA", color = #e08937, linewidth = 2, style = line, transp = 50) longEMA = crossover(maFast, maSlow) exitLong = crossunder(maFast, maSlow) // 5% in 2018 //exitLong = crossunder(close, maFast) // 15% in 2018 //exitLong = crossunder(rsi1, maFastRSI) // 13% shortEMA = crossover(maSlow, maFast) exitShort = crossover(maFast, maSlow) //if (rsi1 < ema(rsi1,7)) //rsiLong = false //if (longEMA and (rsi1 >= highest(rsi1,10))) //if (longEMA) if (longEMA and (rsi1 > ema(rsi1,26))) //RSI ema values optimal from 19 to 35 strategy.entry("LongId", strategy.long, when=window()) //strategy.close_all(when = rsi1 > 60) // 80=26%, 90=n/a, 70=15%, 60=16% long only //strategy.close_all(when = (shortEMA and (rsi1 <= ema(rsi1,26)))) //10% gain in 2018 long only //strategy.close_all(when = (rsi1 <= ema(rsi1,120))) //26=17% 14=2% 42=15% //strategy.close_all(when = (shortEMA)) // 5% gain in 2018 long only //strategy.close_all(when = exitLong) //if (shortEMA and not(rsiLong)) //if (shortEMA) if (shortEMA and (rsi1 <= ema(rsi1,26))) strategy.entry("ShortId", strategy.short, when=window()) if (UseStopLoss) strategy.exit("StopLoss", "LongId", loss = close * stopLoss / 1000 / syminfo.mintick) strategy.exit("StopLoss", "ShortId", loss = close * stopLoss / 1000 / syminfo.mintick)