전략에 따른 원유 ADX 트렌드

저자:차오장, 날짜: 2024-01-25 15:18:15
태그:

img

전반적인 설명

이 전략은 케빈 데이비의 무료 원유 선물 거래 전략에서 채택되었습니다. 원유 시장의 추세를 결정하기 위해 ADX 지표를 활용하고 가격 브레이크프린시프와 결합하여 원유에 대한 간단하고 실용적인 자동화 거래 전략을 구현합니다.

전략 원칙

  1. 14기 ADX 지표를 계산합니다.
  2. ADX> 10일, 시장은 추세가 있다고 간주됩니다.
  3. 닫기 가격이 65 바 전에 닫기 가격보다 높다면, 그것은 가격 브레이크와 긴 신호를 나타냅니다.
  4. 닫기 가격이 65 바 전에 닫기 가격보다 낮다면, 그것은 가격 브레이크와 짧은 신호를 나타냅니다.
  5. 포지션에 진입한 후 스톱 로스를 설정하고 이윤을 취합니다.

이 전략은 주로 ADX 지표에 의존하여 트렌드를 결정하고, 트렌드 조건 하에서 고정 주기의 가격 브레이크에 기반한 거래 신호를 생성합니다. 전체 전략 논리는 매우 간단하고 명확합니다.

이점 분석

  • ADX를 사용하여 트렌드를 파악하고 트렌드 기회를 놓치지 않도록 합니다.
  • 고정 주기의 가격 파업은 좋은 백테스트 결과를 가진 신호를 생성합니다.
  • 직관적이고 간단한 코드, 이해하기 쉽고 수정하기 쉽습니다
  • 케빈 데이비의 수년간의 라이브 트레이딩 검증, 곡선 맞춤

위험 분석

  • 주요 지표로서 ADX는 매개 변수 선택과 브레이크아웃 사이클 선택에 민감합니다.
  • 일정한 주기의 브레이크업은 어떤 기회를 놓칠 수 있습니다.
  • 부적절한 스톱 로스 설정과 수익 취득 설정은 손실을 증가시킬 수 있습니다.
  • 라이브 거래 결과와 백테스트 결과 사이에 차이가 있을 수 있습니다.

최적화 방향

  • ADX 매개 변수 및 브레이크아웃 사이클을 최적화
  • 위치 크기의 동적 조정 증가
  • 백테스트 결과와 실시간 거래 검증을 기반으로 전략을 지속적으로 수정하고 개선합니다.
  • 전략 최적화를 위한 기계 학습 및 딥 러닝 기술을 도입

요약

전체적으로 이것은 매우 실용적인 원유 거래 전략이다. ADX 지표를 사용하여 트렌드를 매우 합리적으로 결정한다. 가격 브레이크아웃 원칙은 좋은 백테스트 결과로 간단하고 효과적이다. 동시에, 케빈 데이비의 공개 무료 전략으로, 실제 전투에서 매우 강력한 신뢰성을 가지고 있다. 전략에 대한 개선의 여지가 여전히 있지만, 그것은 초보자와 작은 자본 거래자가 시작하고 연습하기 위해 매우 적합한 선택이다.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// Strategy idea coded from EasyLanguage to Pinescript
//@version=5
strategy("Kevin Davey Crude free crude oil strategy", shorttitle="CO Fut", format=format.price, precision=2, overlay = true, calc_on_every_tick = true)
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up = ta.change(high)
	down = -ta.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 = ta.rma(ta.tr, len)
	plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
	minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
plot(sig, color=color.red, title="ADX")

buy = sig > 10 and (close - close[65]) > 0 and (close - close[65])[1] < 0
sell = sig > 10 and (close - close[65]) < 0 and (close - close[65])[1] > 0

plotshape(buy, style = shape.arrowup, location = location.belowbar,size = size.huge)
plotshape(sell, style = shape.arrowdown, location = location.abovebar,size = size.huge)

if buy
	strategy.entry("long", strategy.long)
if sell
	strategy.entry("short", strategy.short)

if strategy.position_size != 0
	strategy.exit("long", profit = 450, loss = 300)
	strategy.exit("short", profit = 450, loss = 300)


// GetTickValue() returns the currency value of the instrument's
// smallest possible price movement.
GetTickValue() =>
    syminfo.mintick * syminfo.pointvalue

// On the last historical bar, make a label to display the
// instrument's tick value
if barstate.islastconfirmedhistory
    label.new(x=bar_index + 1, y=close, style=label.style_label_left,
         color=color.black, textcolor=color.white, size=size.large, 
         text=syminfo.ticker + " has a tick value of:\n" + 
             syminfo.currency + " " + str.tostring(GetTickValue()))

더 많은