모멘텀 지표를 기반으로 한 적응형 거래 전략


생성 날짜: 2024-01-05 11:43:25 마지막으로 수정됨: 2024-01-05 11:43:25
복사: 0 클릭수: 564
avatar of ChaoZhang ChaoZhang
1
집중하다
1619
수행원

모멘텀 지표를 기반으로 한 적응형 거래 전략

개요

이 전략은 동력 지표에 기반한 자기 적응형 주식 거래 전략이다. 그것은 브린 밴드, 켈트너 채널 및 가격 압축 지표를 통합하여 트렌드 판단, 돌파구 식별 및 손실 퇴출을 완전히 자동으로 거래한다.

전략 원칙

이 전략은 주로 브린 벨트와 켈트너 채널을 통해 가격 채널을 구축하고, 채널의 돌파구가 거래 신호를 형성하는 것을 식별한다. 가격이 아래에서 위쪽으로 채널을 돌파할 때, 보이스 오퍼를 취하고; 가격이 위에서 아래로 채널을 돌파할 때, 하향 오퍼를 취한다. 또한, 전략은 가격 압축 지표를 사용하여 현재 가격 채널 내에 있는 것을 판단하고, 지표 차이의 긍정과 부정에 따라 그에 따른 작업을 수행한다.

구체적으로, 브린 띠는 가격의 표준 차이를 계산하여 궤도를 오르내리고; 켈트너 채널은 가격의 평균값± 평균 변동 범위를 계산하여 궤도를 오르내린다. 두 채널이 fdopen이 발생했을 때, 거래가 평형에 들어갔다고 생각하고, 다음 돌파구를 기다린다. 가격 압축 지표는 두 채널 내에서 가격이 압축되었는지 여부를 반영하며, 압축 지표 차이의 긍정적 또는 부정적 상황에 따라 거래의 방향을 판단한다.

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

전략적 이점

  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")