ADX 기반 한 시간 TENKAN KIJUN 크로스 트렌드 추적 전략

저자:차오장, 날짜: 2023-12-08 15:37:00
태그:

img

전반적인 설명

이것은 ICHIMOKU 시스템에서 1시간의 시간 프레임 TENKAN과 KIJUN 교차를 기반으로 한 간단하지만 수익성있는 트렌드 추적 전략으로 ADX 지표와 결합하여 약한 트렌딩 시장을 필터링하여 거래 신호를 생성합니다. ETH/BTC와 같은 큰 시가총액 altcoin BTC 쌍에서 가장 잘 작동합니다.

전략 논리

이 전략은 이치모쿠 시스템에서 전환선 (TENKAN) 과 기본선 (KIJUN) 을 교차하여 시장 트렌드 방향을 결정합니다. TENKAN 라인은 빠른 전환선을 나타내는 지난 18 개의 촛불의 가장 높고 가장 낮은 평균을 기반으로 계산됩니다. KIJUN 라인은 표준 전환선을 나타내는 58 개의 촛불 기간을 기반으로합니다.

TENKAN이 KIJUN 위를 넘으면 상승 신호입니다. TENKAN이 KIJUN 아래를 넘으면 하락 신호입니다. 이것은 중장기 트렌드 반전을 포착하는 것을 목표로합니다.

또한 ADX 지표는 트렌드의 강도를 측정하는 데 사용됩니다. ADX가 20보다 높을 때만 강력한 트렌드를 나타냅니다.

요약하자면 이 전략은 TENKAN과 KIJUN의 교차를 통해 중장기 트렌드 방향을 파악하고 ADX를 사용하여 거짓 브레이크오웃을 필터링하여 장기 트렌드를 추적합니다.

이점 분석

이 전략의 주요 장점은 다음과 같습니다.

  1. 성숙하고 신뢰할 수 있는 이치모쿠 시스템을 사용하여 트렌드 방향과 전환점을 결정합니다.

  2. ADX를 사용하여 약한 트렌딩 시장을 필터링하여 통합에서 윙사브를 피합니다.

  3. 1시간 시간 프레임은 시장 소음을 필터링하고 중장기 동향만을 포착합니다.

  4. 이 논리는 트렌드 트레이더들에게 간단하고 쉽게 따라갈 수 있습니다.

  5. 특히 ETH/BTC와 같은 고시장 자본화 코인들에 대한 탄탄한 백테스팅 결과입니다.

위험 분석

이 전략에 대해 주목해야 할 몇 가지 위험:

  1. 이치모쿠 매개 변수는 민감해서 다른 쌍에 맞게 조정해야 합니다.

  2. ADX가 늦어질 수도 있고

  3. 빈번한 스톱 러스 타겟이 있는 다양한 시장에서 실적이 떨어집니다.

  4. 성능은 서로 다른 쌍과 시간대에 따라 크게 다릅니다.

  5. 포지션의 장기 보유는 위험할 수 있고 적절한 스톱 로스/트랙 이윤이 필요합니다.

최적화는 ADX 매개 변수 조정, 잘못된 신호를 줄이기 위해 MACD와 같은 필터를 추가하거나 견고성을 위해 매개 변수를 동적으로 조정하여 수행 할 수 있습니다.

최적화 방향

전략 개선을 위한 주요 방향:

  1. 더 나은 적응을 위해 TENKAN 및 KIJUN 매개 변수의 동적 최적화

  2. ADX를 대체하거나 결합할 수 있는 더 나은 트렌드 지표를 찾고 있습니다.

  3. 위험/이익 비율을 제어하기 위해 스톱 로스/이익을 추가합니다.

  4. 안정성을 높이기 위해 모형화를 보완적인 지표와 결합합니다.

  5. 더 많은 쌍에서 매개 변수를 조정하는 모듈화와 유연성

  6. 수량적 위험 관리, 예를 들어 극심한 움직임에 대한 최대 유출 통제.

결론

결론적으로, 이것은 중장기 트렌드를 식별하고 신호를 생성하기 위해 주로 TENKAN/KIJUN 크로스 및 ADX를 기반으로 한 간단하면서도 실용적인 트렌드 추적 전략입니다. 특히 ETH/BTC와 같은 높은 시가총액 BTC 쌍에서 비교적 안정적인 수익성으로 긍정적 인 백테스팅 결과를 보여주었습니다. 그러나 또한 매개 변수 조정에 의존하고 쌍별 최적화를 필요로합니다. 트렌드가 역전될 때 손실을 제한하기 위해 거래 당 위험 통제도 필요합니다. 전반적으로 이것은 algo 트레이더에 대한 가치있는 트렌드 다음 전략의 참조를 제공합니다.


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

//@version=2
strategy(title="Odin's Kraken (TK Cross Strategy)", shorttitle="Odin's Kraken", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

src = input(close, title="Source")

// define tk in ichimoku

conversionPeriods = input(18, minval=1, title="Conversion Line Periods (Tenkan)"),
basePeriods = input(58, minval=1, title="Base Line Periods (Kijun)")

donchian(len) => avg(lowest(len), highest(len))

conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)

TK_Uptrend = crossover(conversionLine,baseLine)
TK_Downtrend = crossunder(conversionLine,baseLine)

plot(conversionLine, color=lime, title="Tenkan", linewidth=3)
plot(baseLine, color=red, title="Kijun", linewidth=3)

// define ADX

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
th = input(title="threshold", defval=20)
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)
	
[plus, minus] = dirmov(dilen)
sig = adx(dilen, adxlen)

// backtesting range

// From Date Inputs
fromDay = input(defval = 3, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2018, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 3, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 9, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2019, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

// open long and short

longCondition = TK_Uptrend
if (longCondition and sig > 12 and time_cond)
    strategy.entry("LONG", strategy.long)

shortCondition = TK_Downtrend
if (shortCondition and sig > 12 and time_cond)
    strategy.entry("SHORT", strategy.short)

// close trade if backtesting criteria not met

if (not time_cond)
    strategy.close_all()




더 많은