ADX 지표를 기반으로 한 추세 반전 전략


생성 날짜: 2023-09-13 17:02:31 마지막으로 수정됨: 2023-09-13 17:02:31
복사: 3 클릭수: 915
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

이 전략의 이름은 ADX 지표에 기반한 트렌드 반전 전략이다. 이 전략은 ADX 지표를 사용하여 트렌드 강도를 판단하고, 과매매할 때 반전 기회를 잡는다.

ADX는 평균 트렌드 지수를 나타내며 트렌드의 강도를 나타냅니다. ADX 값이 높을수록 트렌드가 강하다는 것을 나타냅니다. ADX가 25보다 크면 더 분명한 트렌드가 있다고 생각합니다.

DMI는 DI+와 DI-의 양선을 포함한다. DI+는 상승세를 나타내고, DI-는 하락세를 나타낸다.

이 전략의 거래 논리:

  1. ADX가 45보다 높을 때, 동향이 매우 강하다고 생각합니다.

  2. 이 때 DI+가 DI-보다 낮으면 과매매 상태라고 판단하고, 트렌드 반전의 기회가 생겨 더 많이 한다.

  3. 반대로, DI-가 DI+보다 낮다면, 과매매 상태로 판단되며, 반전 기회가 발생하고, 공백이 발생한다.

  4. 뒤집은 뒤에서 멈춰야 한다.

이 전략의 장점은 ADX를 사용하여 강력한 트렌드의 반전점을 판단하는 것이며, 높은 ADX 값은 흔들리는 시장의 가짜 신호를 효과적으로 필터링 할 수 있다. 그러나 ADX 매개 변수는 최적화가 필요하며, 손해 방지 전략도 중요하다.

일반적으로 ADX 지표는 강세 트렌드 반전의 시기를 더 잘 판단한다. 그러나 거래자는 더 많은 요소를 주의해야 한다. ADX는 보조 판단 지표 중 하나일 뿐이다.

전략 소스 코드
/*backtest
start: 2023-08-13 00:00:00
end: 2023-09-12 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(shorttitle='DMI swings',title='DMI swings', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true        // create function "within window of time"

[pos_dm, neg_dm, avg_dm] = dmi(14, 14)

//Entry 
strategy.entry(id="long", long = true, when = avg_dm > 45 and pos_dm < neg_dm and window())

//Exit
strategy.close("long", when = avg_dm > 45 and pos_dm > neg_dm and window())