ADX, BB %B, AO 및 EMA를 기반으로 하는 네 가지 요소의 모멘텀 추적 거래 전략

저자:차오장, 날짜: 2023-12-11 16:24:11
태그:

img

##평론 이 전략은 4가지 요소의 모멘텀 트래킹 전략 (Four-factor Momentum Tracking Strategy) 이라고 불립니다. 트렌드 방향을 결정하기 위해 평균 방향 움직임 지수 (ADX), 볼링거 밴드 비율 B (BB %B) 를 통합하여 주식의 상대적 강도를 판단하고 모멘텀을 결정하기 위해 멋진 오시레이터 (AO) 와 다른 사이클의 기하급수적 이동 평균 (EMA) 을 통해 긴 및 짧은 포지션을 판단하여 주식 가격의 동적 추적을 달성하고 강한 주식을 추격하고 약한 주식을 피합니다.

##전략 원칙
이 전략은 4가지 다른 기술적 지표를 사용하여 입점과 출점을 결정합니다. 구체적인 논리는 다음과 같습니다.

긴 진입 조건: 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와 같은 지표는 지연성이 있고 갑작스러운 사건의 영향을 시간적으로 반영할 수 없을 수 있습니다. MA 기간은 적절하게 단축되거나 다른 지표와 함께 사용해야합니다.

  4. 큰 갑작스러운 사건은 지표의 오차를 유발할 수 있습니다. 근본 분석이 결합되어야하며 필요한 경우 전략을 일시적으로 종료 할 수 있습니다.

## 최적화 방향 이 전략은 또한 몇 가지 측면에서 최적화 될 수 있습니다.

  1. 최적의 매개 변수 조합을 찾기 위해 기계 학습을 사용하세요.

  2. CCI와 MACD와 같은 추세를 결정하는 다른 지표를 추가하여 판단의 정확성을 향상시키기 위해 지표 조합을 형성합니다.

  3. 단일 손실을 통제하기 위해 스톱 로스 전략을 추가합니다.

  4. 과도한 탐욕을 피하기 위해 대기 시간을 설정하십시오.

##결과 이 전략은 4인자 모멘텀 추적 전략이라고 불린다. ADX, BB %B, AO 및 EMA 4개 지표를 사용하여 진입점과 출구점을 결정하여 강력한 주식을 동적으로 추적한다. 이 전략은 거래 위험을 제어하기 위해 트렌드 방향과 상대적인 강도를 효과적으로 결정할 수 있다. 다음으로 매개 변수 최적화, 다른 지표 추가, 보유 시간 설정 및 기타 방법을 사용하여 전략을 더욱 향상시킬 수 있다.


/*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)


더 많은