Основная идея этой стратегии заключается в добавлении некоторых ключевых правил управления торговлей на основе стратегии 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)