다중 지표에 기초한 횡단 주기 중재 전략

저자:차오장, 날짜: 2024-01-29 11:10:33
태그:

img

전반적인 설명

이 전략은 세 가지 다른 기술적 지표의 조합을 사용하여 다양한 시간 프레임에 걸쳐 가격 동향을 포착하여 낮은 위험 과잉 수익을 달성하는 크로스 사이클 중재 전략을 구축합니다.

전략 논리

이 전략에서 사용되는 세 가지 기술 지표는 켈트너 채널 (KC), 변동성 정지 (Vstop), 윌리엄스 알리게터 (WAE) 이다. 켈트너 채널은 가격이 채널 범위 밖에서 있는지 확인하고 따라서 거래 신호를 생성하는 데 사용됩니다. 변동성 정지 (Volatility Stop) 는 불필요한 스톱 손실을 줄이는 동안 스톱 손실을 보장하기 위해 스톱 손실 위치를 동적으로 조정하는 데 사용됩니다. 윌리엄스 알리게터 지표는 가격이 강한 트렌드에 있는지 확인하는 데 사용됩니다. 구체적으로:

  1. 가격이 켈트너 채널 상부 레일보다 높을 때 상승 신호로 간주됩니다. 가격이 켈트너 채널 하부 레일보다 낮을 때 하향 신호로 간주됩니다.

  2. 변동성 스톱은 가격 변동성과 채널 너비에 따라 스톱 손실 위치를 설정합니다. 과도하게 보수적인 스톱 손실 위치를 피하면서 스톱 손실을 보장하기 위해 동적으로 조정 할 수 있습니다.

  3. 윌리엄스 알리거터 지표는 MACD와 볼링거 밴드 채널 폭을 계산하여 가격이 강한 상승 추세 또는 하락 추세인지 판단합니다.

이 세 가지 지표를 결합함으로써, 서로 다른 시간 프레임에 걸쳐 신호는 교차 검증됩니다. 이것은 잘못된 판단의 가능성을 줄이고 최적화된 전략 논리를 구축합니다.

이점 분석

이 전략의 가장 큰 장점은 여러 지표의 조합에 의해 가져온 정확한 거래 신호입니다. 세 지표는 서로 다른 시간 프레임에서 작동하고 서로 횡단 검증하여 잘못된 판단의 확률을 효과적으로 줄이고 신호의 정확성을 향상시킬 수 있습니다. 또한 변동성 중지 설정은 동적이며 리얼 타임 변동성에 따라 중지 손실 위치를 조정하여 위험을 더 제어 할 수 있습니다.

단일 지표 전략에 비해,이 결합 전략은 더 정확하고 효율적인 거래 신호를 제공할 수 있습니다. 동시에, 세 지표는 여러 시간 프레임 내에서 거래 판단을 형성하기 위해 함께 작동합니다. 이것은 매우 과학적이고 합리적인 논리 설계입니다.

위험 분석

이 전략의 주요 위험은 부적절한 매개 변수 설정으로 인해 과도한 부착이 발생할 수 있다는 것입니다. 세 가지 지표에는 총 8 개의 매개 변수가 있습니다. 부적절한 설정은 전략에 부정적인 영향을 미칠 수 있습니다. 또한, 지표 사이의 무게 관계도 올바르게 구성되어야합니다. 그렇지 않으면 신호가 서로를 중화하고 유효하지 않을 수 있습니다.

이러한 위험을 줄이기 위해 매개 변수 설정 중에 다른 시장 환경에 대한 적응력이 완전히 고려되어야하며 역 테스트 분석을 통해 최적의 매개 변수 조합을 조정해야합니다. 또한 거래 신호가 효과적으로 유발 될 수 있도록 지표 사이의 무게를 적절히 조정하십시오. 연속 손실이 발생하면 손실을 제어하기 위해 위치 크기를 줄이는 것을 고려하십시오.

최적화 방향

이 전략의 최적화 공간은 주로 두 가지 측면에 초점을 맞추고 있습니다: 매개 변수 조정 및 중지 손실 전략의 개선. 구체적으로 다음 측면을 고려 할 수 있습니다:

  1. 더 과학적으로 지표 매개 변수를 선택하고 매개 변수 조합을 최적화합니다. 알고리즘은 수익 극대화 및 위험 최소화와 같은 목표를 가지고 최적의 매개 변수를 찾기 위해 사용될 수 있습니다.

  2. 스톱 로스 전략을 개선하여 불필요한 스톱 로스를 추가로 줄이고 스톱 로스를 보장하여 승률을 향상시킵니다. 예를 들어, 더 많은 지표를 스톱 로스 신호로 통합하거나 스톱 로스 포지션의 점진적 인기를 설정하십시오.

  3. 잘못된 판단율을 줄이기 위해 지표와 거래 신호 판단의 논리 사이의 무게를 최적화합니다. 더 안정적이고 신뢰할 수있는 판단 규칙을 구축하기 위해 더 많은 가격 행동 기능을 도입 할 수 있습니다.

  4. 자동 매개 변수 최적화를 위해 기계 학습 모델을 도입하거나 전략 평가 및 개선에 대한 심층 강화 학습 프로그래밍을 사용하십시오.

요약

이 전략은 켈트너 채널, 변동성 정지 및 윌리엄스 알리게이터의 조합을 통해 크로스 사이클 중재 시스템을 구축합니다. 다중 지표 조합은 신호 정확성을 향상시키고 동적 스톱 손실 통제 위험을 향상시킵니다. 그러나 매개 변수 설정 및 최적화에 개선할 여지가 있습니다. 전반적으로이 전략은 강력한 과학성을 가지고 있으며 추가 연구 및 응용 가치가 있습니다.


/*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"}]
*/

//@version=4
strategy("QuarryLake", overlay=true)  ///Ultilized modified full kelly for this strategy = 36%

///Keltner channel///
nPeriod = input(title="Keltner Period", type=input.integer, defval=200, minval=1)
Mult = input(title="Keltner Mult", type=input.integer, defval=5, minval=1)
xPrice = ema(hlc3, nPeriod)
xMove = ema(high - low, nPeriod)
xMoveMult = xMove * Mult
xUpper = xPrice + xMoveMult
xLower = xPrice - xMoveMult

// plot(xPrice, color=red, title="KSmid")
p1 = plot(xUpper, color=color.white, title="KSup")
p2 = plot(xLower, color=color.white, title="KSdn")
fill(p1, p2, color=close > xUpper ? color.green : close < xLower ? color.red : color.white)

kclongcondition = close > xUpper
kcshortcondition = close < xLower
kccloselongcondition = crossunder(close, xUpper)
kccloseshortcondition = crossover(close, xLower)

///Volatility Stop///
length = input(title="Vstop length", type=input.integer, defval=3, minval=1)
mult1 = 1.5

atr_ = atr(length)
max1 = 0.0
min1 = 0.0
is_uptrend_prev = false
stop = 0.0
vstop_prev = 0.0
vstop1 = 0.0
is_uptrend = false
is_trend_changed = false
max_ = 0.0
min_ = 0.0
vstop = 0.0
max1 := max(nz(max_[1]), close)
min1 := min(nz(min_[1]), close)
is_uptrend_prev := nz(is_uptrend[1], true)
stop := is_uptrend_prev ? max1 - mult1 * atr_ : min1 + mult1 * atr_
vstop_prev := nz(vstop[1])
vstop1 := is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend := close - vstop1 >= 0
is_trend_changed := is_uptrend != is_uptrend_prev
max_ := is_trend_changed ? close : max1
min_ := is_trend_changed ? close : min1
vstop := is_trend_changed ? is_uptrend ? max_ - mult1 * atr_ : min_ + mult1 * atr_ : 
   vstop1

plot(vstop, color=is_uptrend ? color.green : color.red, style=plot.style_line, linewidth=1)

vstoplongcondition = close > vstop
vstoplongclosecondition = crossunder(close, vstop)
vstopshortcondition = close < vstop
vstopshortclosecondition = crossover(close, vstop)

///Waddah Attar Explosion///
sensitivity = input(150, title="Sensitivity")
fastLength = input(20, title="FastEMA Length")
slowLength = input(40, title="SlowEMA Length")
channelLength = input(20, title="BB Channel Length")
mult = input(2.0, title="BB Stdev Multiplier")
DEAD_ZONE = nz(rma(tr(true), 100)) * 3.7
calc_macd(source, fastLength, slowLength) =>
    fastMA = ema(source, fastLength)
    slowMA = ema(source, slowLength)
    fastMA - slowMA
calc_BBUpper(source, length, mult) =>
    basis = sma(source, length)
    dev = mult * stdev(source, length)
    basis + dev
calc_BBLower(source, length, mult) =>
    basis = sma(source, length)
    dev = mult * stdev(source, length)
    basis - dev
t1 = (calc_macd(close, fastLength, slowLength) - 
   calc_macd(close[1], fastLength, slowLength)) * sensitivity
t2 = (calc_macd(close[2], fastLength, slowLength) - 
   calc_macd(close[3], fastLength, slowLength)) * sensitivity
e1 = calc_BBUpper(close, channelLength, mult) - 
   calc_BBLower(close, channelLength, mult)
trendUp = t1 >= 0 ? t1 : 0
trendDown = t1 < 0 ? -1 * t1 : 0

waelongcondition = trendUp and trendUp > DEAD_ZONE and trendUp > e1
waeshortcondition = trendDown and trendDown > DEAD_ZONE and trendDown > e1

///Long Entry///
longcondition = kclongcondition and vstoplongcondition and waelongcondition
if longcondition
    strategy.entry("Long", strategy.long)

///Long exit///
closeconditionlong = kccloselongcondition or vstoplongclosecondition
if closeconditionlong
    strategy.close("Long")

///Short Entry///
shortcondition = kcshortcondition and vstopshortcondition and waeshortcondition
if shortcondition
    strategy.entry("Short", strategy.short)

///Short exit///
closeconditionshort = kccloseshortcondition or vstopshortclosecondition
if closeconditionshort
    strategy.close("Short")

///Free Hong Kong, the revolution of our time///


더 많은