동력 지표에 기초한 적응형 거래 전략

저자:차오장, 날짜: 2024-01-05 11:43:25
태그:

img

전반적인 설명

이 전략은 모멘텀 지표에 기반한 적응성 있는 주식 거래 전략입니다. 자동 거래에 대한 트렌드 판단, 돌파점 식별 및 스톱 로스 출구 등을 달성하기 위해 볼링거 밴드, 켈트너 채널 및 가격 압축 지표를 통합합니다.

전략 원칙

이 전략의 핵심은 볼링거 밴드 (Bollinger Bands) 와 켈트너 채널 (Keltner Channels) 를 통해 가격 채널을 구축하고 가격이 채널을 통과할 때 거래 신호를 식별하는 것입니다. 가격이 채널을 깨면 긴 포지션을 취하고 가격이 채널을 깨면 짧은 포지션을 취합니다. 또한, 가격이 채널에 압축되면 전략은 가격 압축 지표의 양적 및 부정적인 값을 기반으로 운영 방향을 결정합니다.

구체적으로 볼링거 밴드는 상위 및 하위 레일을 그리기 위해 가격의 표준 편차를 계산하고, 켈트너 채널은 평균 가격 ± 평균 변동성 범위를 기반으로 상위 및 하위 레일을 그래프합니다. 채널 융합이 두 가지 사이에 발생하면 시장이 다음 브레이크오웃을 기다리는 동안 통합에 들어간다고 간주됩니다. 가격 압축 지표는 가격이 두 채널 사이에 압축되었는지 여부를 반영합니다. 전략은 압축 지표의 양적 및 부정적인 값을 기반으로 시장 방향을 결정합니다.

요약하자면 이 전략은 가격 움직임을 판단하기 위한 여러 지표를 통합하고 명확한 장기 및 단기 논리를 형성하여 거짓 브레이크를 효과적으로 필터링하고 높은 확률의 거래 기회를 식별할 수 있습니다.

전략 의 장점

  1. 강력한 판단 능력을 가진 여러 지표를 통합합니다. 지표의 조합은 정확성을 향상시킬 수 있습니다.

  2. 지표 차이를 압축하여 잘못된 브레이크아웃을 줄이십시오. 지표 차이는 불필요한 거래를 피하기 위한 보조 조건으로 사용됩니다.

  3. 적응 채널 스톱 손실, 효과적으로 위험을 관리. 채널은 손실을 줄이기 위해 시장 변동에 따라 자동으로 조정 할 수있는 스톱 손실 위치로 작용합니다.

  4. 간단한 매개 변수 설정, 자동화에 적합. 몇 가지 주요 매개 변수만 사용하여 자동화 거래 시스템에 테스트, 최적화 및 통합하기가 쉽습니다.

전략 의 위험

  1. 시장의 급격한 변동이 발생하면 자주 긴-단순 전환하여 거래 수가 증가합니다.

  2. 부적절한 지표 매개 변수는 좋은 거래 기회를 놓칠 수 있습니다. 최적의 매개 변수를 찾기 위해 충분한 테스트와 최적화가 필요합니다.

  3. 명확한 방향이 있는 주식에만 적용됩니다. 극도로 변동적인 시장에는 적합하지 않습니다. 지표는 쉽게 잘못 인도되어 잘못된 신호를 생성 할 수 있습니다.

최적화 방향

  1. 자본 활용 효율을 최적화하기 위해 위치 제어 모듈을 높여주십시오. 예를 들어, 파업 강도에 따라 자본을 할당하십시오.

  2. 기계 학습 모델을 강화하여 지표 매개 변수를 동적으로 조정하여 지표가 서로 다른 사이클과 다른 주식에 자동으로 적응 할 수 있습니다.

  3. 스톱 로스 전략을 개선하여 더 많은 보조 지표를 도입하여 스톱 로스 타이밍을 결정합니다. 개선된 전략은 주요 지점에서의 스톱 로스 수를 줄일 수 있습니다.

결론

이 전략은 볼링거 밴드, 켈트너 채널 및 가격 압축 지표를 통합하여 판단 및 리스크 제어 시스템을위한 명확한 논리를 형성합니다. 트렌드 판단과 브레이크아웃 작업을 결합하여 시장 조건에 자동으로 적응하고 높은 확률 거래 기회를 식별 할 수 있습니다. 추가 매개 변수 최적화 및 보조 조건 개선으로이 전략은 양적 거래의 중요한 도구로 더욱 강화 될 수 있습니다.


/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © juliopetronilo

//@version=4
strategy("DMI/ADX/Squeeze Robot", shorttitle="DMI/ADX/SQZ", overlay=true)

// Squeeze Momentum Indicator
length = input(20, title="BB Length")
mult = input(2.0, title="BB MultFactor")
lengthKC = input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
useTrueRange = input(true, title="Use TrueRange (KC)")

source = close
basis = sma(source, length)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev

ma = sma(source, lengthKC)
rangeKC = useTrueRange ? tr : (high - low)
rangema = sma(rangeKC, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC

sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz = not (sqzOn or sqzOff)

val = linreg(source - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)), sma(close, lengthKC)), lengthKC, 0)

// DMI/ADX Plot
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
keyLevel = input(23, title="Key Level for ADX")

dirmov(len) =>
    up = change(high)
    down = -change(low)
    truerange = rma(tr, len)
    plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
    minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
    [plus, minus]

adx(dilen, adxlen) =>
    [plus, minus] = dirmov(dilen)
    sum = plus + minus
    adx_val = abs(plus - minus) / (sum == 0 ? 1 : sum) * 100
    [adx_val, plus, minus]

[sig, up, down] = adx(dilen, adxlen)

// Estrategia de Trading
strategy.entry("Buy", strategy.long, when=sqzOn and crossover(up, down) and crossover(val, 0))
strategy.entry("Sell", strategy.short, when=sqzOn and crossunder(up, down) and crossunder(val, 0))
strategy.close("Buy", when=sqzOff)
strategy.close("Sell", when=sqzOff)

// Plot de los indicadores
plot(val, color=color.blue, style=plot.style_histogram, linewidth=4)
plot(0, color=noSqz ? color.blue : sqzOn ? color.black : color.rgb(236, 238, 247), style=plot.style_cross, linewidth=2)
plot(up, color=color.blue, title="+DI")
plot(down, color=color.gray, title="-DI")
plot(keyLevel, color=color.white, title="Key Level")



더 많은