Стратегия пересечения ценных районов на пересекаемый период

Автор:Чао Чжан, Дата: 2023-12-12 10:58:22
Тэги:

img

Обзор

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

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

Основными шагами этой стратегии для определения ценового диапазона и поиска торговых возможностей являются:

  1. Расчет RSI Swing High и Swing Low на основе более крупного цикла (например, ежедневного).
  2. Определить, достиг ли более крупный цикл RSI нового максимума или минимума в течение периода обратной связи.
  3. Если произойдет прорыв, оценить ценовую тенденцию (бычью или медвежью) в более коротком цикле (например, 5 минут) и предпринять соответствующие действия по покупке или продаже.

Например, когда ежедневный RSI выходит из предыдущего максимума, мы судим, что это на данный момент бычий рынок. А когда ежедневный RSI выходит ниже предыдущего минимума, мы судим, что это медвежий рынок. В обоих случаях мы принимаем длинные и короткие действия соответственно в графике 5 мин.

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

По сравнению с традиционными стратегиями, которые сосредоточены только на одном периоде, эта стратегия имеет следующие преимущества:

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

  2. Комбинирование индикаторов между периодами повышает надежность сигнала.

  3. Большой цикл прорыва указывает на общее направление, в то время как нам нужно только найти возможность в небольших циклах, как 5 минут, чтобы получить прибыль.

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

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

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

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

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

  3. Неправильное управление рисками. Чрезмерные потери в единой торговле из-за плохого размещения позиций могут привести к невозобновляемому снижению. Необходимо внедрить разумные правила размещения.

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

В этой стратегии есть еще много возможностей для совершенствования, в основном в следующих аспектах:

  1. Проверьте больше комбинаций периодов, чтобы найти оптимальные параметры.

  2. Настройка параметров RSI. Настройка параметров RSI lookback и т. д. для повышения точности суждения.

  3. Добавьте больше индикаторов, таких как MA, чтобы помочь определить направление тренда.

  4. Улучшить механизм стоп-лосса. Динамически регулировать точки стоп-лосса на основе условий снижения.

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

Заключение

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


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

//@version=3

strategy("Swing MTF", shorttitle="Swing MTF", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 10000, slippage = 5)
//
otf_period = input(defval=2, title="Look Back Period (2nd Timeframe)")
otf = input(defval="180", title="Second Momentum Timeframe")

// Function to dectect a new bar
is_newbar(res) =>
    t = time(res)
    change(t) != 0 ? true : false

// Check how many bars are in our upper timeframe
since_new_bar = barssince(is_newbar(otf))
otf_total_bars = na
otf_total_bars := since_new_bar == 0 ? since_new_bar[1] : otf_total_bars[1]

//Calculate RSI Values
ctf_rsi = rsi(open, otf_period)

breakline=input(title="Breaks in lines", defval = true, type=bool)

so = request.security(syminfo.tickerid, otf, rsi(open, otf_period))
sc = request.security(syminfo.tickerid, otf, rsi(close, otf_period))


final_otf_so = na
final_otf_so := barstate.isrealtime ? since_new_bar == otf_total_bars ? so : final_otf_so[1] : so

final_otf_sc = na
final_otf_sc := barstate.isrealtime ? since_new_bar == otf_total_bars ? sc : final_otf_sc[1] : sc

barsback = input(11, title='Bars back to check for a swing')
// showsig = input(false, title='Show Signal Markers')
 
swing_detection(index)=>
    swing_high = false
    swing_low = false
    start = (index*2) - 1 // -1 so we have an even number of
    swing_point_high = final_otf_so[index]
    swing_point_low = final_otf_sc[index]
    
    //Swing Highs
    for i = 0 to start
        swing_high := true
        if i < index 
            if final_otf_so[i] > swing_point_high 
                swing_high := false
                break
        // Have to do checks before pivot and after seperately because we can get
        // two highs of the same value in a row. Notice the > and >= difference
        if i > index
            if final_otf_so[i] >= swing_point_high 
                swing_high := false
                break
        
    //Swing lows
    for i = 0 to start
        swing_low := true
        if i < index
            if final_otf_sc[i] < swing_point_low 
                swing_low := false
                break  
        // Have to do checks before pivot and after seperately because we can get
        // two lows of the same value in a row. Notice the > and >= difference
        if i > index
            if final_otf_sc[i] <= swing_point_low 
                swing_low := false
                break 
        
    [swing_high, swing_low]
 
// Check for a swing
[swing_high, swing_low] = swing_detection(barsback)
 

long =  final_otf_so > final_otf_sc
short = final_otf_so < final_otf_sc

if swing_low and long
    strategy.entry("My Long Entry Id", strategy.long)


if swing_high and short
    strategy.entry("My Short Entry Id", strategy.short)

Больше