В процессе загрузки ресурсов... загрузка...

Хаотические правила торговли Стратегия остановки потерь

Автор:Чао Чжан, Дата: 2023-11-07 16:44:31
Тэги:

img

Обзор

Основная идея этой стратегии заключается в добавлении некоторых ключевых правил управления торговлей на основе стратегии RSI, включая стоп-лосс, прибыль, отслеживание стоп-лосса и отслеживание стоп-лосса с использованием рычагов. Это позволяет стратегии достигать более высокой доходности на трендовых рынках и минимизировать потери на рыночных рынках.

Логика стратегии

Стратегия сначала рассчитывает индикатор RSI. Она идет длинным, когда RSI ниже уровня перепродажи, и идет коротким, когда RSI выше уровня перекупки.

После того, как длинный сигнал запускается, самая высокая цена в это время записывается как эталонная точка остановки потери.

После того, как сигнал короткого действия запускается, самая низкая цена в это время записывается как эталонная точка остановки потери.

В то же время устанавливаются фиксированные расстояния получения прибыли и остановки убытков. Если цена достигает расстояния получения прибыли, принимайте прибыль на закрытие позиции. Если она достигает расстояния остановки убытков, закрывайте позицию путем остановки убытков.

Если цена достигает линии стоп-лосса, позиция закрывается стоп-лосом.

Следуя за самой высокой ценой во время восходящих тенденций и самой низкой ценой во время нисходящих тенденций, в сочетании с фиксированными дистанциями получения прибыли и остановки убытков, можно достичь более высокой доходности на трендовых рынках.

Анализ преимуществ

Наибольшее преимущество этой стратегии заключается в внедрении множества правил управления торговлей, которые лучше контролируют риски, используя сильные стороны стратегии RSI.

В частности, преимущества:

  1. Следующая стоп-лосс может непрерывно следовать тренду, чтобы получить более высокую прибыль во время трендовых рынков.

  2. Фиксированная прибыль и остановка потерь блокируют некоторые прибыли и избегают полного уничтожения прибыли при обратном тренде.

  3. Отслеживание стоп-лосса с помощью рычага помогает избежать увеличения потерь и контролирует риск.

  4. Комбинация различных методов стоп-лосса может использовать свои сильные стороны в различных рыночных условиях, улучшая общую стабильность стратегии.

  5. Гибкая корректировка параметров стратегии подходит для различных торговых инструментов и рыночных условий.

  6. Логика, которую легко понять, облегчает проверку, оптимизацию и применение.

Анализ рисков

Основными рисками этой стратегии являются:

  1. Стратегия RSI сама по себе имеет некоторые риски, которые могут вызвать стоп-лосс.

  2. Колебания вокруг точек стоп-лосса могут часто вызывать стоп-лосс.

  3. Расстояние добычи не может полностью зафиксировать прибыль на трендовых рынках.

  4. Фиксированное расстояние стоп-лосса может быть слишком малым, чтобы полностью избежать потерь.

  5. Слишком высокий уровень кредитного плеча приводит к тому, что стоп-лосс слишком близко к начальной цене.

  6. Период обратного тестирования может не полностью отражать будущие рыночные условия.

Вышеперечисленные риски могут быть смягчены путем настройки параметров, оптимизации механизмов остановки потерь, контроля рисков и т. Д. Но ни одна стратегия не может полностью избежать рыночных рисков.

Руководство по оптимизации

Стратегия может быть дополнительно оптимизирована в следующих аспектах:

  1. Оптимизируйте параметры RSI для уменьшения торговли винтовой вилкой и проверьте оптимальные параметры для разных рынков.

  2. Попробуйте другие индикаторы, такие как KD, MACD в сочетании с RSI, чтобы отфильтровать записи.

  3. Используйте машинное обучение для динамической оптимизации параметров остановки потерь и получения прибыли.

  4. Испытать более сложные механизмы остановки потери, такие как колеблющаяся остановка потери, средняя остановка потери, динамическая остановка потери и т.д.

  5. Оптимизировать установку кредитного плеча и изучить влияние на контроль прибыли и риска.

  6. Автоматическое регулирование параметров на основе изменений рыночного режима, например, α-Dual Thrust.

  7. Включить другие факторы для определения сохранности тренда, например, энергию объема.

  8. Использовать модели глубокого обучения для разработки более надежных и интерпретируемых способов остановки потерь.

  9. Испытать данные из различных инструментов и временных периодов для оценки надежности стратегии.

Заключение

Эта стратегия дополняет стратегию 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)

Больше