Основная идея этой стратегии заключается в определении текущего диапазона цен путем объединения индикаторов RSI различных циклов и принятия соответствующих действий по покупке или продаже в более мелких циклах, когда происходит прорыв в более крупном цикле RSI. Эта стратегия использует преимущества технических индикаторов в разные периоды для оценки относительного значения текущей цены из нескольких временных измерений и определения лучших точек входа.
Основными шагами этой стратегии для определения ценового диапазона и поиска торговых возможностей являются:
Например, когда ежедневный RSI выходит из предыдущего максимума, мы судим, что это на данный момент бычий рынок. А когда ежедневный RSI выходит ниже предыдущего минимума, мы судим, что это медвежий рынок. В обоих случаях мы принимаем длинные и короткие действия соответственно в графике 5 мин.
По сравнению с традиционными стратегиями, которые сосредоточены только на одном периоде, эта стратегия имеет следующие преимущества:
Более точная оценка текущей относительной цены. Более крупные циклы, такие как ежедневные, могут отфильтровывать краткосрочный рыночный шум и определять общую тенденцию и область стоимости.
Комбинирование индикаторов между периодами повышает надежность сигнала.
Большой цикл прорыва указывает на общее направление, в то время как нам нужно только найти возможность в небольших циклах, как 5 минут, чтобы получить прибыль.
Смешанные периоды помогают избежать ловушки. Мы можем быстро выйти, когда большие показатели цикла начинают меняться.
Основные риски этой стратегии заключаются в:
Ошибочное суждение в крупных циклических индикаторах. Неэффективное определение значения области в ежедневном RSI и т. Д. может привести к неисправным сигналам. Для улучшения точности необходима настройка параметров RSI.
Дивергенция между движением цены небольшого цикла и определением большого цикла. Иногда краткосрочные движения противодействуют тенденциям большой картины. Нам нужно установить правильную остановку потери, чтобы контролировать потерю.
Неправильное управление рисками. Чрезмерные потери в единой торговле из-за плохого размещения позиций могут привести к невозобновляемому снижению. Необходимо внедрить разумные правила размещения.
В этой стратегии есть еще много возможностей для совершенствования, в основном в следующих аспектах:
Проверьте больше комбинаций периодов, чтобы найти оптимальные параметры.
Настройка параметров RSI. Настройка параметров RSI lookback и т. д. для повышения точности суждения.
Добавьте больше индикаторов, таких как MA, чтобы помочь определить направление тренда.
Улучшить механизм стоп-лосса. Динамически регулировать точки стоп-лосса на основе условий снижения.
Оптимизировать правила размещения позиций. Управлять конкретными размерами позиций для каждой торговли более научно.
Эта стратегия реализует арбитраж между различными временными измерениями путем оценки бычьего состояния в кросс-периодных РСИ. Такая идея кросс-периодного суждения заслуживает дальнейшей эксплуатации. Мы можем продолжать улучшать ее с помощью настройки параметров, оптимизации стоп-лосса, комбинаций индикаторов, чтобы сделать ее более выгодной. В целом, эта стратегия имеет уникальную идею и огромный потенциал для расширения.
/*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)