
Основная идея этой стратегии основана на стратегии RSI с добавлением нескольких ключевых правил управления торговлей, включая остановки, остановки, отслеживание остановок и отслеживание убытков. Это позволяет стратегии получать более высокую прибыль в трендовых ситуациях во время ретроспективных периодов, а также минимизировать потери в шокирующих ситуациях.
Сначала стратегия рассчитывает RSI, делая прибыль, когда RSI ниже линейки перекупа, и делая убыток, когда RSI выше линейки перепродажи.
После запуска нескольких сигналов, записывается наивысшая цена в этот момент как эталонная точка для отслеживания остановки. Если цена ниже отслеживаемой точки остановки за вычетом величины остановки, то остановка равновесия.
После того, как будет задействован сигнал отмены, запишите наименьшую цену в этот момент в качестве точки отсчета для отслеживания остановки. Если цена превышает точку отслеживания остановки плюс величину остановки, то остановите позицию на уровне.
Одновременно устанавливается фиксированная остановка и остановка убытков. Если цена достигает остановки, она прекращает ликвидацию; если она достигает остановки, она прекращает ликвидацию.
Кроме того, в зависимости от настройки леверанга следует следовать стоп-линии. Если цена касается леверанга следует следовать стоп-линии, ликвидировать убытки.
Вы можете получить более высокую прибыль в трендовых ситуациях, отслеживая самые высокие стопы при повышении тренда и самые низкие стопы при снижении тренда в сочетании с фиксированным стоп-стоп-стапом. При этом установка стоп-стопов с использованием рычагов позволяет максимально избежать расширения убытков.
Основным преимуществом этой стратегии является то, что она включает в себя несколько правил управления сделками, которые позволяют лучше контролировать риски, используя преимущества стратегии RSI.
В частности, преимущества стратегии:
В трендовых ситуациях стоп-лосс может постоянно отслеживать трендовые прибыли, что приводит к более высокой прибыли.
Фиксированная стоп-стоп-стоп может блокировать часть прибыли, чтобы избежать полной прибыли, которая будет заперта в случае обратного тренда.
Леверинг отслеживает остановку убытков, чтобы по возможности избежать их увеличения и контролировать риск.
Сочетание различных методов хранения убытков позволяет использовать свои преимущества в различных рыночных условиях, повышая стабильность стратегии в целом.
Параметры стратегии могут быть гибко адаптированы к различным видам торговли и рыночным условиям.
Логика стратегии четкая и понятная, легко проверяемая, оптимизируемая и применяемая
Основные риски этой стратегии исходят из:
Существует определенный риск ошибочной торговли в самой стратегии RSI, которая может быть вызвана стоп-убытком. Можно оптимизировать ее, изменив параметры RSI.
Часто возникающие колебания вблизи точки остановки могут вызывать остановку.
Стоп-дистанция не может полностью зафиксировать прибыль в трендовых ситуациях. Она может быть объединена с другими показателями, чтобы определить время окончания тренда.
Фиксированный стоп-дистанция может быть слишком маленькой, чтобы полностью избежать потерь. Можно рассмотреть возможность использования колебательного или динамического стоп-дистанции.
Слишком высокий уровень леверинга может привести к тому, что леверинговая слежка за стоп-лосами будет находиться слишком близко к цене открытия позиции. Следует соответственно снизить уровень леверинга.
Временные диапазоны отслеживания не могут полностью представлять будущую ситуацию на рынке. Следует провести контроль риска и проверить эффективность различных временных периодов.
Вышеуказанные риски могут быть смягчены путем корректировки параметров, оптимизации механизма остановки убытков, контроля риска и т. д. Но никакая стратегия не может полностью избежать рыночного риска, необходимо сделать контроль риска.
Эта стратегия может быть оптимизирована в следующих направлениях:
Оптимизация параметров RSI, снижение вероятности ошибочных сделок. Можно тестировать оптимальные комбинации параметров для разных рынков.
Попробуйте другие индикаторы, такие как KD, MACD и т. Д., чтобы определить время входа в игру, в сочетании с RSI, чтобы сформировать множественный фильтр.
Динамическая оптимизация параметров стоп-стоп с использованием методов машинного обучения.
Попробуйте более сложные способы остановки, такие как колебательная остановка, средняя остановка, динамическая остановка и т. д.
Оптимизация настройки уровня леверинга, влияние различных леверингов на доход и контроль риска.
Параметры автоматически корректируются в зависимости от изменения рыночной среды, например, α-Dual Thrust.
Продолжительность тренда определяется в сочетании с другими факторами, такими как энергия объема торговли и т. д.
Разработка более устойчивых и объяснимых методов сдерживания потерь с использованием технологий, таких как глубокое обучение.
Проверить данные для разных видов и периодов времени, чтобы оценить устойчивость стратегии.
Эта стратегия, основанная на стратегии RSI, добавляет множество способов остановки убытков, чтобы в полной мере использовать двойную роль остановки убытков в получении прибыли от тренда и контроле риска. Есть много возможностей для оптимизации стратегии, которая может быть использована во многих аспектах, чтобы повысить преимущество стратегии и снизить риск.
/*backtest
start: 2022-11-06 00:00:00
end: 2023-11-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
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(2016, "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=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)
testPeriod() => true
/////////////// Component Code Stop ///////////////
///////////// 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
long = notna and crossover(vrsi, overSold)
short = notna and crossunder(vrsi, overBought)
last_long = long ? time : nz(last_long[1])
last_short = short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)
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 = 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
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=red)
// plot(short_call, 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)