
Эта стратегия использует RSI, чтобы идентифицировать рыночные состояния, когда акции перекупаются и перепродаются, формируют мертвые форки в зоне перекупа, формируют золотые форки в зоне перепродажи и относятся к стратегии обратного торговли, основанной на показателях. Эта стратегия в сочетании с отслеживанием тренда и фиксированными стоп-стопами позволяет эффективно контролировать риск торговли.
Торговые сигналы этой стратегии производятся на основе RSI. RSI обычно использует 30 как линию перепродажи и 70 как линию перекупа. Когда RSI пересекает линию перепродажи, он создает сигнал покупки.
После входа в рынок, стратегия использует стопроцентный метод отслеживания потерь, постоянно обновляя максимальную или минимальную цену и оставляя определенный процент в качестве места для остановки потерь. В то же время используется фиксированная стоп-стоп-стоп-стоп, которая останавливается при достижении целевой прибыли или максимального убытка. Такая комбинация может хорошо контролировать риск торгов.
Эта стратегия имеет следующие преимущества:
Использование RSI для определения зоны перекупа и перепродажи является более совершенным торговым приемом, который позволяет более точно улавливать точки переворота рынка.
При использовании метода золотой вилки, можно отфильтровать часть шумовых торговых сигналов, что делает торговлю более надежной.
В сочетании с отслеживанием тренда можно максимально закрепить прибыль, а также быстро остановить убыток, снизив убытки.
Фиксированная стоп-стоп-стоп дальность также может эффективно контролировать риски по отдельным сделкам.
В целом, правила стратегии ясны, просты в понимании и реализации, и подходят для начинающих в количественной торговле.
Также существуют следующие риски:
RSI-индикаторы подвержены ошибочным сигналам, имеют высокую вероятность технического срыва формы, что может привести к снятию убытков.
Фиксированный стоп-стоп-убыток, который не может быть скорректирован в зависимости от уровня рыночных колебаний, может привести к преждевременному стоп-убытку или расширению стоп-убытка.
Стоп-стоп отслеживает только самые высокие или самые низкие цены, что может быть слишком радикальным и привести к недостаточной прибыли.
Риск повторной совместимости данных. Параметры этой стратегии могут быть оптимизированы для исторических данных, которые могут оказаться неэффективными в практическом применении.
Частота сделок может быть слишком высокой, что увеличивает сборы и риски проскальзывания.
Эта стратегия может быть оптимизирована в следующих направлениях:
Оптимизация параметров RSI, поиск оптимальных комбинаций параметров индикатора, повышение качества сигнала.
Добавление фильтров других показателей, формирование многозначного резонанса, повышение точности сигнала.
Применение адаптивного механизма остановки убытков, автоматически корректирующего остановку убытков в соответствии с рыночными колебаниями.
Добавление модуля управления частотой транзакций, снижение количества транзакций, снижение транзакционных сборов.
Добавление модуля управления капиталом, контроль за размером отдельных сделок, снижение отдельных потерь.
Проверка стабильности параметров проводится на более длительных периодах времени.
Эта стратегия в целом является типичной стратегией обратного трейдинга, которая использует RSI, чтобы определить зону перепродажи, чтобы создать торговый сигнал, используя методы золотой форки. И использует тренд-следящие остановки и фиксированные остановки для контроля риска.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// Author: © JoshuaMcGowan
// Taken from https://www.tradingview.com/script/GbZGYi6l-Adding-some-essential-components-to-a-prebuilt-RSI-strategy/
// Just updated to compile in version 4.
//@version=4
strategy("Adding some essential components to a prebuilt RSI strategy", overlay=true)
/////////////// Component Code Start ///////////////
testStartYear = input(2011, "Backtest Start Year")
testStartMonth = input(8, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2100, "Backtest Stop Year")
testStopMonth = input(9, "Backtest Stop Month")
testStopDay = input(29, "Backtest Stop Day")
// testStopDay = testStartDay + 1
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)
testPeriod() => true
/////////////// Component Code Stop ///////////////
// Replace RSI Component, Long/Short, and Long Signal/Short Signal conditions with your trade setup components.
///////////// RSI component /////////////
length = input( 14 )
overSold = input( 30 )
overBought = input( 70 )
price = close
vrsi = rsi(price, length)
notna = not na(vrsi)
/////////////// STRATEGY ///////////////
ts = input(99999, "Trailing Stop") / 100
tp = input(99999, "Take Profit") / 100
sl = input(99999, "Stop Loss") / 100
// Update this with your setup.
long = notna and crossover(vrsi, overSold)
short = notna and crossunder(vrsi, overBought)
last_long = 0
last_short = 0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])
// Update this to reflect your setup.
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)
float last_open_long_signal = 0
float last_open_short_signal = 0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])
last_long_signal = 0
last_short_signal = 0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])
in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal
float last_high = 0
float last_low = 0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])
long_ts = not na(last_high) and high <= (last_high - ts) //and high >= last_open_long_signal
short_ts = not na(last_low) and low >= (last_low + ts) //and low <= last_open_short_signal
long_tp = high >= (last_open_long_signal + tp)
short_tp = low <= (last_open_short_signal - tp)
long_sl = low <= (last_open_long_signal - sl)
short_sl = high >= (last_open_short_signal + sl)
leverage = input(200, "Leverage")
long_call = last_open_long_signal - (0.8 + 0.2 * (1/leverage)) / leverage * last_open_long_signal
short_call = last_open_short_signal + (0.78 + 0.2 * (1/leverage)) / leverage * last_open_short_signal
long_call_signal = low <= long_call
short_call_signal = high >= short_call
if testPeriod()
strategy.entry("Long", strategy.long, when=long_signal)
strategy.entry("Short", strategy.short, when=short_signal)
// plot(long_call, color=color.red)
// plot(short_call, color=color.green)
strategy.close("Long", when=long_call_signal)
strategy.close("Short", when=short_call_signal)
strategy.close("Long", when=long_tp)
strategy.close("Short", when=short_tp)
strategy.close("Long", when=long_sl)
strategy.close("Short", when=short_sl)
strategy.close("Long", when=long_ts)
strategy.close("Short", when=short_ts)