Стратегия RSI и стохастики на многочасовые отрезки

Автор:Чао Чжан, Дата: 2024-02-21 15:56:37
Тэги:

img

Обзор

Стратегия РСИ и стохастики на несколько временных рамок - это стратегия, которая объединяет индикаторы РСИ и стохастики на нескольких временных раумах для определения условий перекупа и перепродажи на рынке.

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

Индикатор RSI

Показатель RSI - это мощный осциллятор, который измеряет уровни перекупленности и перепродажи на основе величины недавних движений цен.

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

2. Стохастические показатели %K

Стохастика %K - это показатель, показывающий уровни перекупленности/перепродажи на рынке по шкале от 0 до 100.

Стратегия использует конфигурацию 14,3 Stochastics и также получает значения %K из вышеупомянутых временных рамок.

3. Средняя совокупность ценностей

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

Средний показатель RSI = (Ежемесячный RSI + Ежедневный RSI + 4H RSI + 1H RSI) / 4

Среднее значение стохастики = (месячная стохастика + ежедневная стохастика + 4 часа стохастики + 1 час стохастики) / 4

4. Торговые сигналы

Стратегия запускает длинный, когда средний показатель RSI падает ниже 30, а средний показатель Стохастики - ниже 20. Она запускает короткий, когда средний показатель RSI поднимается выше 70 и средний показатель Стохастики превышает 80.

Долгая позиция закрывается, когда средний показатель стохастики поднимается выше 70, а средний показатель RSI поднимается выше 50.

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

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

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

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

  3. Более четкое определение структурных поворотных точек, когда в нескольких временных рамках одновременно наблюдается разрыв ключевых уровней S/R, сигнализирующий об изменении тренда.

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

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

Как и в случае со всеми стратегиями технического анализа, основной риск заключается в ошибках и ложных сигналах.

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

  2. Недействительность ключевых S/R, приводящих к неудачным последующим остановкам.

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

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

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

Возможности для расширения

В связи с обсужденными рисками возможности повышения включают:

  1. Оптимизация механизма стоп-лосса для включения последующих остановок и частичных выходов.

  2. Добавление более высоких временных рамок, таких как квартальный график. Это позволяет более широкому руководству трендом фильтровать ложные сигналы. Приоритетизировать показания из более высоких временных рамок, когда происходит расхождение.

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

  4. тонко настраивать сигналы входа, ожидая прорывов вокруг ключевых исторических S/R или допуская оптимальные отступные записи.

  5. Внедрение адаптивных остановок на основе недавней волатильности и значений ATR для динамического позиционирования остановок.

Заключение

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


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

////////////////////////////////////////// MTF Stochastic & RSI Strategy 🚥 ©️ bykzis /////////////////////////////////////////
//

// *** Inspired by "Binance CHOP Dashboard" from @Cazimiro and "RSI MTF Table" from @mobester16 *** and LOT OF COPY of Indicator-Jones MTF Scanner
// 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//@version=5
strategy('MTF RSI & STOCH Strategy🚥 by kzi', overlay=false,initial_capital=100, currency=currency.USD, commission_value=0.01, commission_type=strategy.commission.percent)


// Pair list
var string GRP1       = '══════════    General    ══════════'
overbought = input.int(80, 'Overbought Level', minval=1, group=GRP1)
oversold = input.int(20, 'Oversold Level', minval=1, group=GRP1)


/// Timeframes
var string GRP2       = '══════════   Timeframes   ══════════'
timeframe1 = input.timeframe(title="Timeframe 1", defval="W", group=GRP2)
timeframe2 = input.timeframe(title="Timeframe 2", defval="D", group=GRP2)
timeframe3 = input.timeframe(title="Timeframe 3", defval="240", group=GRP2)
timeframe4 = input.timeframe(title="Timeframe 4", defval="60", group=GRP2)

// RSI settings
var string GRP3       = '══════════   RSI settings   ══════════'
rsiLength = input.int(14, minval=1, title='RSI length', group=GRP3)
rsiSource = input(close, 'RSI Source', group=GRP3)
rsioverbought = input.int(70, 'RSI Overbought Level', minval=1, group=GRP3)
rsioversold = input.int(30, 'RSI Oversold Level', minval=1, group=GRP3)


/// Get RSI values of each timeframe /////////////////////////////////////////////////////
rsi = ta.rsi(rsiSource, rsiLength)
callRSI(id,timeframe) =>
    rsiValue = request.security(id, str.tostring(timeframe), rsi, gaps=barmerge.gaps_off)
    rsiValue

RSI_TF1 = callRSI(syminfo.tickerid, timeframe1)
RSI_TF2 = callRSI(syminfo.tickerid, timeframe2)
RSI_TF3 = callRSI(syminfo.tickerid, timeframe3)
RSI_TF4 = callRSI(syminfo.tickerid, timeframe4)




/////// Calculate Averages /////////////////////////////////////////////////////////////////
calcAVG(valueTF1, valueTF2, valueTF3, valueTF4) =>
    math.round((valueTF1 + valueTF2 + valueTF3 + valueTF4) / 4, 2)

AVG=calcAVG(RSI_TF1, RSI_TF2, RSI_TF3, RSI_TF4)



// Stochastic settings
var string GRP4       = '══════════   Stochastic settings   ══════════'
periodK = input.int(14, '%K length', minval=1, group=GRP4)
smoothK = input.int(3, 'Smooth K', minval=1, group=GRP4)
stochSource = input(close, 'Stochastic Source', group=GRP4)
stochoverbought = input.int(70, 'Stochastic Overbought Level', minval=1, group=GRP4)
stochoversold = input.int(30, 'Stochastic Oversold Level', minval=1, group=GRP4)


/// Get Stochastic values of each timeframe ////////////////////////////////////////////////
stoch = ta.sma(ta.stoch(stochSource, high, low, periodK), smoothK)
getStochastic(id,timeframe) =>
    stochValue = request.security(id, str.tostring(timeframe), stoch, gaps=barmerge.gaps_off)
    stochValue

Stoch_TF1 = getStochastic(syminfo.tickerid, timeframe1)
Stoch_TF2 = getStochastic(syminfo.tickerid, timeframe2)
Stoch_TF3 = getStochastic(syminfo.tickerid, timeframe3)
Stoch_TF4 = getStochastic(syminfo.tickerid, timeframe4)


AVG_STOCH=calcAVG(Stoch_TF1, Stoch_TF2, Stoch_TF3, Stoch_TF4)


plot(AVG, color = color.blue, title='RSI')
plot(AVG_STOCH, color = color.yellow,title='STOCH')
hline(rsioverbought,color=color.red)
hline(rsioversold, color=color.lime)
hline(50, color=color.white)

//============ signal Generator ==================================//

if AVG <= rsioversold and AVG_STOCH <=stochoversold 
    strategy.entry('Buy_Long', strategy.long)

    
strategy.close("Buy_Long",when=(AVG_STOCH >=70 and AVG >=50 and close >=strategy.position_avg_price),comment="Long_OK")

if AVG >=rsioverbought and AVG_STOCH >=stochoverbought
    strategy.entry('Buy_Short', strategy.short)


strategy.close("Buy_Short",when=(AVG_STOCH <=30 and AVG <=50 and close <=strategy.position_avg_price),comment="Short_OK")


///////////////////////////////////////////////////////////////////////////////////////////





Больше