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