이 전략은 ?? 4 인자 운동 추적 전략 ?? 이라고 불린다. 이 전략은 종합적으로 평균 방향 운동 지표 ((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는 설정된 값보다 크다.
전략적 강점 분석
이 전략은 트렌드 방향을 판단하는 여러 지표와 주식의 상대적인 강점을 통합하여 가짜 돌파구를 효과적으로 필터링 할 수 있습니다. 구체적인 장점은 다음과 같습니다:
ADX 지표는 유행의 존재와 유행의 강도를 효과적으로 판단하고, 불안정한 시장에서 자주 입장을 취하는 것을 방지합니다.
BB %B 지표는 주가가 고위위치 또는 낮은위치에 있는지 판단하여 고위치와 하위치를 추적하는 것을 효과적으로 피할 수 있습니다.
AO 지표는 구매시 강력한 동력 지원이 있는지 여부를 판단하여 돌파의 유효성을 보장합니다.
EMA 지표의 골드 포크/데이트 포크 조합은 시장의 주요 방향을 판단하여 역동적인 포지션을 피한다.
전체적으로, 이 전략은 거래 위험을 효과적으로 통제하고 시장의 강력한 주식을 추적할 수 있습니다.
이 전략은 여러 지표들을 통합적으로 적용하여 위험을 통제하고 있지만, 다음과 같은 위험 요소들이 존재한다:
여러 지수형 지표 조합이 사용되며, 매개 변수 조정에 민감하며, 부적절한 매개 변수 조합은 효과를 발휘하지 못할 수 있다.
동력을 지나치게 추구하면 시장의 진정한 역전 지점을 놓칠 수 있다. 보유주기를 적절히 통제하고, 적시에 스톱로스를 중지해야 한다.
EMA와 같은 지표는 지연성이 있으며, 갑작스러운 사건의 영향을 적시에 반영하지 못할 수도 있다. 다른 지표와 적절히 연동되거나 MA 주기를 적절히 줄여야 한다.
급격한 주요 사건으로 인해 지표가 분산될 수 있으며, 기본적 분석과 함께 필요한 경우 전략을 일시적으로 종료할 수 있습니다.
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
기계 학습과 같은 방법을 사용하여 최적의 변수 조합을 찾습니다.
CCI, MACD 등과 같은 다른 판단 트렌드 지표에 추가하여 판단 정확도를 높이기 위해 지표 포트폴리오 을 형성합니다.
단편적 손실을 통제하기 위해 스톱 스톱 손실 전략에 참여하십시오.
지분 기간을 정하고 지나친 탐욕을 피하십시오.
이 전략의 이름은 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)