Стратегия скальпинга, основанная на индикаторе RSI с последующим остановкой потери

Автор:Чао Чжан, Дата: 2023-12-12 15:46:49
Тэги:

img

Обзор

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

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

Входные сигналы этой стратегии в основном определяются индикатором RSI и кроссоверами MA. Параметр RSI установлен на 2 периода, чтобы быстро улавливать ситуации с перекуплением и перепродажей для возможностей реверсии. Быстрый MA и медленный MA установлен на 50 и 200 периодов соответственно, чтобы определить направление тренда. В частности, логика входа заключается в следующем:

Длинный вход: быстрая MA пересекает медленную MA, цена превышает медленную MA, а RSI ниже уровня перепроданности (10% по умолчанию); Короткий вход: быстрый MA переходит ниже медленного MA, цена ниже медленного MA, а RSI выше уровня перекупленности (дефолт 90%).

Кроме того, в стратегии есть дополнительный фильтр волатильности. Он рассчитывает разницу между уклонами быстрых и медленных MAs. Позиции будут открываться только тогда, когда разница превысит порог. Цель состоит в том, чтобы избежать открытия позиций, когда нет четкого направления во время колебаний рынка.

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

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

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

  1. RSI, установленный на 2 периода, может быстро улавливать ситуации перекупки и перепродажи для возможностей реверсии.
  2. Быстрые и медленные МА могут эффективно определить направление тренда и поворотные моменты.
  3. Сочетание двойных индикаторов RSI и MA позволяет избежать ложных прорывов.
  4. Фильтр волатильности избегает открытия позиций, когда во время колебаний нет четкого направления.
  5. Процентные остановки потери могут быть скорректированы на основе волатильности рынка для эффективного контроля рисков.

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

В этой стратегии также есть некоторые риски:

  1. Показатели RSI и MA имеют некоторое отставание, могут упустить некоторые возможности для изменения.
  2. Процентный стоп-лосс, скорее всего, будет задействован при снижении объемов.
  3. С значительными колебаниями цен за сутки и перед рыночными изменениями не справляются эффективно.

Направления оптимизации рисков:

  1. Настройка параметра RSI на 1 период для уменьшения задержки.
  2. Оптимизировать периоды MA на основе характеристик символов.
  3. Процентный уровень стоп-потери регулируется с учетом баланса между стоп-потерями и толерантностью к колебаниям.

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

Направления оптимизации этой стратегии:

  1. Добавьте другие показатели, такие как объем, чтобы избежать ложных сигналов прорыва.
  2. Добавьте предсказания модели машинного обучения, чтобы помочь в принятии решений.
  3. Оптимизировать время пирамиды и размещение позиций для дальнейшего улучшения доходности.
  4. Установите фильтры для колебаний цен за одну ночь и до рынка.

Заключение

В целом, это относительно стабильный тренд, следующий за стратегией. Сочетая двойные индикаторы RSI и MA, он обеспечивает определенную стабильность, захватывая более четкие возможности для обратного тренда. Фильтр волатильности избегает некоторых рисков, а процентный стоп-лосс также эффективно контролирует одиночные торговые потери. Эта стратегия может быть использована в качестве общей стратегии с несколькими символами, а также может быть оптимизирована на параметрах и моделях для конкретных символов для достижения лучших результатов.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// Scalping strategy
// © Lukescream and Ninorigo
// (original version by Lukescream - lastest versions by Ninorigo) - v1.3
//

//@version=4
strategy(title="Scalping using RSI 2 indicator", shorttitle="RSI 2 Strategy", overlay=true, pyramiding=0, process_orders_on_close=false)

var bool ConditionEntryL = false
var bool ConditionEntryS = false


//***********
// Costants
//***********
def_start_date = timestamp("01 Jan 2021 07:30 +0000")
def_end_date   = timestamp("01 Dec 2024 07:30 +0000")

def_rsi_length = 2
def_overbought_value = 90
def_oversold_value   = 10

def_slow_ma_length = 200
def_fast_ma_length = 50
def_ma_choice      = "EMA"

def_tick   = 0.5
def_filter = true

def_trailing_stop = 1


//***********
// Change the optional parameters
//***********
start_time  = input(title="Start date", defval=def_start_date, type=input.time)
end_time    = input(title="End date", defval=def_end_date, type=input.time)
// RSI
src         = input(title="Source", defval=close, type=input.source)
rsi_length  = input(title="RSI Length", defval=def_rsi_length, minval=1, type=input.integer)
overbought_threshold = input(title="Overbought threshold", defval=def_overbought_value, type=input.float)
oversold_threshold   = input(title="Oversold threshold", defval=def_oversold_value, type=input.float)
// Moving average
slow_ma_length = input(title="Slow MA length", defval=def_slow_ma_length, type=input.integer)
fast_ma_length = input(title="Fast MA length", defval=def_fast_ma_length, type=input.integer)
ma_choice = input(title="MA choice", defval="EMA", options=["SMA", "EMA"])
// Input ticker
tick   = input(title="Ticker size", defval=def_tick, type=input.float)
filter = input(title="Trend Filter", defval=def_filter, type=input.bool)
// Trailing stop (%)
ts_rate = input(title="Trailing Stop %", defval=def_trailing_stop, type=input.float)


//***********
// RSI
//***********
// Calculate RSI
up   = rma(max(change(src), 0), rsi_length)
down = rma(-min(change(src), 0), rsi_length)
rsi = (down == 0 ? 100 : (up == 0 ? 0 : 100-100/(1+up/down)))


//***********
// Moving averages
//***********
slow_ma = (ma_choice == "SMA" ? sma(close, slow_ma_length) : ema(close, slow_ma_length))
fast_ma = (ma_choice == "SMA" ? sma(close, fast_ma_length) : ema(close, fast_ma_length))
// Show the moving averages
plot(slow_ma, color=color.white,  title="Slow MA")
plot(fast_ma, color=color.yellow, title="Fast MA")


//***********
// Strategy
//***********
if true
    // Determine the entry conditions (only market entry and market exit conditions)
    // Long position
    ConditionEntryL := (filter == true ? (fast_ma > slow_ma and close > slow_ma and rsi < oversold_threshold) : (fast_ma > slow_ma and rsi < oversold_threshold))
    // Short position
    ConditionEntryS := (filter == true ? (fast_ma < slow_ma and close < slow_ma and rsi > overbought_threshold) : (fast_ma < slow_ma and rsi > overbought_threshold))
   
    // Calculate the trailing stop
    ts_calc = close * (1/tick) * ts_rate * 0.01

    // Submit the entry orders and the exit orders
    // Long position
    if ConditionEntryL
        strategy.entry("RSI Long", strategy.long)
    // Exit from a long position
    strategy.exit("Exit Long", "RSI Long", trail_points=0, trail_offset=ts_calc)

    // Short position 
    if ConditionEntryS
        strategy.entry("RSI Short", strategy.short)
    // Exit from a short position
    strategy.exit("Exit Short", "RSI Short", trail_points=0, trail_offset=ts_calc)

// Highlights long conditions
bgcolor (ConditionEntryL ? color.navy : na, transp=60, offset=1, editable=true, title="Long position band")
// Highlights short conditions
bgcolor (ConditionEntryS ? color.olive : na, transp=60, offset=1, editable=true, title="Short position band")


Больше