RSI Стратегия торговли длинным коротким сальдо

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

img

Обзор

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

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

  1. Вычислить значения RSI 5-минутных, 15-минутных и 1-часовых временных рамок. Когда 5-минутный, 15-минутный и 1-часовой RSI одновременно находятся ниже 25, он рассматривается как состояние перепродажи и генерирует сигнал покупки. Когда 5-минутный, 15-минутный и 1-часовой RSI одновременно находятся выше 75, он рассматривается как состояние перекупки и генерирует сигнал продажи.

  2. Если цена ниже скользящей средней, генерируется сигнал покупки. Если цена выше скользящей средней, генерируется сигнал продажи.

  3. На основе текущей позиции устанавливается начальный размер сделки и правила пирамиды: 2 контракта для первой записи, а затем каждый раз добавляется 1 контракт, пока позиция не достигнет 2 контрактов.

  4. Стоп-лосс запускается, когда убыток достигает 3%.

Преимущества

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

  2. Объединение скользящей средней генерирует дополнительные торговые сигналы и расширяет торговые возможности.

  3. Установка контроля размеров позиций и коэффициента прибыли/убытка для остановки и получения прибыли управляет рисками.

  4. Увеличение с фиксированным количеством расширяет потенциал прибыли.

Риски

  1. Риск дивергенции RSI. Цена может продолжать развиваться в течение периода после того, как RSI достигнет порога перекупленности или перепроданности до обратного движения. Слепое следование сигналу RSI может привести к потерям.

  2. Движущийся средний торговый сигнал может вводить в заблуждение. Движущийся средний не может своевременно отслеживать изменение цены во время огромных колебаний цен.

  3. Неправильное размещение позиций и неправильное установление коэффициента прибыли/убытка приводят к неправильному контролю рисков.

  4. Условия пирамиды должны быть установлены разумно, чтобы избежать увеличения потерь.

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

  1. Корректировать параметры RSI и тестировать различные комбинации периодов, чтобы найти более надежные сигналы перекупленности/перепроданности.

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

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

  4. Оптимизируйте условия пирамиды, чтобы предотвратить увеличение потерь.

Резюме

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


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

//@version=3
strategy("5M_RSI_Strategy", overlay=true, pyramiding = 1)
len =14 
Initial_Trade_Size = 2
up = rma(max(change(close), 0), len)
down = rma(-min(change(close), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
RSI_1h = request.security(syminfo.tickerid, "60", rsi)
RSI_3h = request.security(syminfo.tickerid, "180", rsi)
RSI_15m = request.security(syminfo.tickerid, "15", rsi)
RSI_5m = request.security(syminfo.tickerid, "5", rsi)
RSI_1m = request.security(syminfo.tickerid, "1", rsi)
ema21_5 = ema(request.security(syminfo.tickerid, "5", close), 21)
ema21_15 = ema(request.security(syminfo.tickerid, "15", close), 21)
//(RSI_3h<=25) and  (RSI_1h<=25) and (RSI_15m<=25) and
Positive = ((RSI_5m<=25) and (RSI_15m<=25) and (RSI_1h<=25))?true:false
//alertcondition(Positive, title='POS', message='POS')        
//plotshape(Positive, style=shape.triangleup,location=location.belowbar, color=green,size =size.tiny)
Negative = (( RSI_5m>=75) and ( RSI_15m>=75) and ( RSI_1h>=75))?true:false
//alertcondition(Negative, title='NEG', message='NEG')
//plotshape(Negative, style=shape.triangledown,location=location.abovebar, color=red,size=size.tiny)          Positive and   Negative and 

lastordersize = abs(strategy.position_size)>=Initial_Trade_Size?abs(strategy.position_size):Initial_Trade_Size
//lastordersize =1
// and ((ema21_15-low)/ema21_15) > 0.077
//Adding to position rules
if (abs(strategy.position_size) >= Initial_Trade_Size and (abs(close - strategy.position_avg_price)/abs(strategy.position_avg_price)>0.03))
    if(strategy.position_avg_price > close and strategy.position_size > 0)
        strategy.entry("Add", strategy.long , qty = lastordersize , when = true)
    if(strategy.position_avg_price < close and strategy.position_size < 0)
        strategy.entry("Add", strategy.short, qty = lastordersize , when = true)
if (strategy.position_size == 0)
    if (Positive or ((ema21_5-low)/ema21_5) > 0.07)
        strategy.entry("1St Entry", strategy.long , qty = lastordersize , when = true)
    // and ((high-ema21_15)/ema21_15) > 0.077
    if (Negative or ((high-ema21_5)/ema21_5) > 0.07)
        strategy.entry("1St Entry", strategy.short, qty = lastordersize , when = true)
//lastordersize := lastordersize * 2
//or (strategy.openprofit / abs(strategy.position_size * close))>=0.01
if(cross(ema21_5, high) or cross(ema21_5, low))
    strategy.close_all()

Больше