Стратегия пересечения скользящей средней относительного прироста пера


Дата создания: 2023-10-18 11:16:53 Последнее изменение: 2023-10-18 11:16:53
Копировать: 0 Количество просмотров: 390
1
Подписаться
1176
Подписчики

Стратегия пересечения скользящей средней относительного прироста пера

Обзор

Эта стратегия использует основное сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое сопоставимое

Стратегический принцип

Стратегия основана на RBI-индикаторе Вителота, который рассчитывает движущиеся средние по относительному соотношению кромки (RB) на линии K. Расчет RB выполняется следующим образом:

В формуле, RB равен соотношению длины сущности ясных линий к длине целых K линий, принимая положительное значение; RB для отрицательных линий.

RBI-индикатор фильтрует шум с помощью RB-движущегося среднего, захватывая основные особенности рынка. Покупающий сигнал возникает, когда RBI-индикатор пересекает его сигнальную линию; Продающий сигнал возникает, когда RBI-индикатор пересекает сигнальную линию.

Чтобы отфильтровать ложные сигналы в неопределенные фазы с множественными головами, стратегия также определяет, будет ли цена закрытия выше средней линии EMA 13 циклов при прохождении линии сигнала на RBI-индикате, если она выше, то она будет выполнять многоголовую стратегию. Аналогично, стратегия пустоты будет выполняться только тогда, когда цена закрытия будет ниже 13-циклической EMA.

Стратегия также устанавливает механизмы остановки и остановки, чтобы контролировать риск и блокировать прибыль. После открытия позиции будет отслеживаться количество установленных остановочных пунктов, а также устанавливается количество фиксированных остановочных пунктов.

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

  • Индекс RBI фильтрует большое количество шума, чтобы улавливать особенности рыночных тенденций и избегать ложных сигналов, которые могут ввести в заблуждение.

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

  • Установка стоп-стоп помогает снизить риск потери отдельных позиций, при этом блокируя прибыль и повышая общую доходность.

  • Эта стратегия имеет меньше параметров, ее легко понять и она подходит для автоматической торговли.

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

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

  • Неправильная настройка параметров индикатора также может привести к снижению качества торгового сигнала.

  • Любые технические показатели могут потерпеть неудачу в определенных рыночных условиях и не могут полностью избежать потерь.

  • Слишком маленькая стоп-стоп может приводить к слишком частому остановке; слишком большая стоп-стоп может увеличивать одиночные потери.

  • Недостаточное снятие контроля может привести к риску разорения счета.

Направление оптимизации

  • Можно тестировать различные комбинации параметров, оптимизируя параметры RBI.

  • Для улучшения качества сигнала могут быть добавлены другие вспомогательные показатели для фильтрации.

  • Параметры, которые можно оптимизировать с помощью обучения машинному обучению.

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

  • Можно попробовать различные стратегии, такие как ночные позиции или торговля короткой линией.

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2022-10-11 00:00:00
end: 2023-10-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("RBI Backtest /w TSSL", shorttitle="RBI Strategy", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 10000, slippage = 5)
// RBI:
//  The EMA of the relative body (RB) of Japanese candles is evaluated.
//  The RB of a candle (my definition) is simply the ratio of the body with respect to its full length
//  and taken positive for bull candles and negative for bear candles:
//      e.g. a bull "marubozo" has RB=1 a bear "marubozo" has RB=-1;
//      a "doji" has RB=0.
//  This simple indicator grasps the essence of the market by filtering out a great deal of noise.
//
//  A flag can be selected to calculate its very basic binary version, where a bull candle counts as a one
//  and a bear candle counts as a minus one.
//
//  Enter (or exit) the market when the signal line crosses the base line.
//  When the market is choppy we have a kind of alternating bear and bull candles so that
//  RBI is FLAT and usually close to zero. 
//  Therefore avoid entering the market when RBI is FLAT and INSIDE the Exclusion level.
//  The exclusion level is to be set by hand: go back in history and check when market was choppy; a good
//  way to set it is to frame the oscillations of RBI whe price was choppy.
//
//  RBI is more effective when an EMA of price is used as filtering. I found EMA(13) to be
//  a decent filter: go long when base crosses signal upwards AND closing price is above EMA(13);
//  same concept for going short.
//
//  As any other indicator, use it with responsibility: THERE CAN'T BE A SINGLE MAGIC INDICATOR winning
//  all trades.
//
//  Above all, have fun.
//
// Vitelot/Yanez/Vts March 31, 2019

par1 = input(5, title="MA1 Period")
par2 = input(5, title="Signal Period")
exclusion = input(0.2, title="Exclusion level")

useBin = input(false, title="Calculate the binary version")

treshold_long = input(0, title="Treshold Long")
treshold_short = input(0, title="Treshold Short")

fixedSL = input(title="SL Activation", defval=300)
trailSL = input(title="SL Trigger", defval=1)
fixedTP = input(title="TP Activation", defval=120)
trailTP = input(title="TP Trigger", defval=1)

FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 6, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 19, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
startTimeOk()  => true // create function "within window of time" if statement true

ynSimple(t) =>
    s = (close>open)? 1: -1
    ema(sum(s,t),t)

ynRel(t) =>
    s = (close-open)/(high-low)
    ema(sum(s,t),t)

yn = useBin? ynSimple(par1): ynRel(par1) 
sig = ema(yn,par2)


plot(yn, color=aqua, title="RBI", linewidth=3, transp=0)
plot(sig, color=orange, title="Signal", linewidth=2, transp=0)

hline(0, color=white, title="Zero level", editable=false)
hline(exclusion, color=yellow, title="Exclusion level +", editable=true, linestyle=line)
hline( 0-exclusion, color=yellow, title="Exclusion level -", editable=true, linestyle=line)

long = crossover(yn,sig) and yn < treshold_long
short = crossover(sig,yn)  and yn > treshold_short

// === STRATEGY - LONG POSITION EXECUTION ===
strategy.entry("Long", strategy.long, when= long and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP) 
strategy.exit("Exit", when= short)
// === STRATEGY - SHORT POSITION EXECUTION ===
strategy.entry("Short", strategy.short, when= short and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP)
strategy.exit("Exit", when= long)