Четырехфакторная стратегия торговли, основанная на ADX, BB %B, AO и EMA

Автор:Чао Чжан, Дата: 2023-12-11 16:24:11
Тэги:

img

##Обзор Эта стратегия называется Стратегия отслеживания импульса с четырьмя факторами. Она включает в себя средний индекс направленного движения (ADX) для определения направления тренда, процент Bollinger Bands (BB %B) для оценки относительной силы акций, Awesome Oscillator (AO) для определения импульса и различных циклов Экспоненциальные скользящие средние (EMA) для определения длинных и коротких позиций, достигая динамического отслеживания цен на акции и преследования сильных акций и избегания слабых.

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

Условие длинного входа: 5-дневная EMA пересекает 21-дневную EMA, 50-дневная EMA пересекает 200-дневную EMA, BB %B больше установленной перекупленной линии, AO больше установленного положительного значения и ADX больше установленного значения.

Условие короткого входа: 5-дневная EMA пересекает 21-дневную EMA, 50-дневная EMA пересекает 200-дневную EMA, BB %B меньше установленной перепроданной линии, AO меньше установленного отрицательного значения, а ADX больше установленного значения.

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

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

  2. Показатель BB %B определяет, находятся ли отдельные запасы на уровне высоком или низком, что позволяет эффективно избежать преследования максимумов и продажи минимумов.

  3. Показатель AO определяет, существует ли относительно сильная поддержка импульса во время покупки, чтобы обеспечить эффективность прорыва.

  4. Золотой крест/мертвый крест индикатора EMA в сочетании с оценкой основного направления рынка позволяет избежать открытия позиций против тренда.

Таким образом, эта стратегия может эффективно контролировать торговые риски и отслеживать сильные запасы на рынке.

## Анализ рисков Несмотря на то, что стратегия использует множество показателей для контроля рисков, все еще существуют определенные риски:

  1. Комбинация нескольких экспоненциальных показателей чувствительна к корректировке параметров.

  2. Чрезмерное преследование импульса может упустить реальные точки переворота рынка.

  3. Показатели, такие как EMA, имеют отстающий характер и могут не отражать влияние внезапных событий во времени.

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

## направление оптимизации Стратегия также может быть оптимизирована в нескольких аспектах:

  1. Используйте машинное обучение, чтобы найти оптимальную комбинацию параметров.

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

  3. Добавьте стратегии стоп-лосса для контроля одиночных потерь.

  4. Установите время ожидания, чтобы избежать чрезмерной жадности.

## Резюме Эта стратегия называется Четырехфакторная стратегия отслеживания импульса. Она использует четыре индикатора ADX, BB %B, AO и EMA для определения точек входа и выхода для динамического отслеживания сильных акций. Стратегия может эффективно определять направление тренда и относительную силу акций для контроля торговых рисков. Далее, оптимизация параметров, добавление других индикаторов, установка времени удержания и другие методы могут быть использованы для дальнейшего улучшения стратегии.


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

//@version=4

//ADX + BB %B + AO + EMA

strategy("ADX + BB %B + AO + EMA", overlay=true, initial_capital=10000)
take_profit_perc = input(title="Take Profit %", type=input.integer, defval=10, minval=1, maxval=100)
stop_loss_perc = input(title="Stop Loss %", type=input.integer, defval=5, minval=1, maxval=100)
bb_overbought = input(title="BB %B Overbought", type=input.integer, defval=75, minval=1, maxval=100)
bb_oversold = input(title="BB %B Oversold", type=input.integer, defval=25, minval=1, maxval=100)
ao_value = input(title="Awesome Oscillator", type=input.integer, defval=2)
adx_value = input(title="ADX", type=input.integer, defval=15)

startDate = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer, defval=2018, minval=2008, maxval=2200)

inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0))

ema5 = ema(close, 5)
ema21 = ema(close, 21)
ema50 = ema(close, 50)
ema200 = ema(close, 200)

//BB %B
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
bbr = (src - lower)/(upper - lower)

//Awesome Oscillator
ao = sma(hl2,5) - sma(hl2,34)

// ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)

long_strategy = ema5>ema21 and ema50>ema200 and bbr>(bb_overbought/100) and ao>ao_value and sig>adx_value
short_strategy = ema5<ema21 and ema50<ema200 and bbr<(bb_oversold/100) and ao<-ao_value and sig>adx_value

plot(ema5, color=color.blue)
plot(ema21, color=color.aqua)
plot(ema50, color=color.purple)
plot(ema200, color=color.red)
bgcolor(color=long_strategy ? color.green : na, transp=80)
bgcolor(color=short_strategy ? color.purple : na, transp=80)
    
if inDateRange and long_strategy
    strategy.entry("long", strategy.long)
    strategy.exit("exit", "long", stop=close*(100-stop_loss_perc)/100, limit=close*(100+take_profit_perc)/100)
if inDateRange and short_strategy
    strategy.entry("short", strategy.short)
    strategy.exit("exit", "short", stop=close*(100+stop_loss_perc)/100, limit=close*(100-take_profit_perc)/100)


Больше