다이나믹 채널 돌파 전략 기반


생성 날짜: 2024-02-27 15:15:07 마지막으로 수정됨: 2024-02-27 15:15:07
복사: 0 클릭수: 567
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

다이나믹 채널 돌파 전략 기반

개요

이 전략은 켈트너 채널 지표를 사용하여 이동 평균과 결합하여 다이내믹 브레이크 구매 및 판매 가격을 설정하여 낮은 가격과 높은 가격의 브레이크 작업을 수행합니다. 전략은 채널 브레이크 구매 및 판매 기회를 자동으로 식별합니다.

전략 원칙

  1. 채널 중간 궤도를 계산: 지수를 사용하여 이동 평균을 계산 가격 중간 궤도
  2. 채널 대역을 계산합니다: 실제 파도 또는 평균 실제 파도 또는 가격 상승을 사용하는 이동 평균 채널 대역을 계산합니다.
  3. 통로 상궤도 및 하궤도: 중궤도 ±N배의 통로 대역폭
  4. 진입 순서: 가격이 상반선을 터치할 때, 브레이크를 설정하고 구매 가격을 기다립니다. 가격이 하반선을 터치할 때, 브레이크를 설정하고 판매 가격을 기다립니다.
  5. 출구 순서: 매입 후 중간 궤도에 다시 떨어지거나 최고 가격이 입구 가격을 초과할 때 상쇄; 매각 후 중간 궤도에 반발하거나 최저 가격이 입구 가격을 초과할 때 상쇄

우위 분석

  1. 동적 채널을 사용하여 시장 추세 변화를 빠르게 파악할 수 있습니다.
  2. 중간 궤도를 이용하면 가격의 방향을 알 수 있다.
  3. N배의 대역폭 설정으로 통로 범위가 합리적이고, 포지션을 자주 조정하지 않습니다.
  4. 트렌드 이론에 따라 돌파구 메커니즘을 사용해서
  5. 스톱 손실 조건을 설정하고 위험을 엄격히 통제합니다.

위험 분석

  1. 중궤도선 계산 방법 선택은 채널 범위와 가격 매칭 효과에 영향을 미칩니다.
  2. N배수를 너무 크고 너무 작게 설정하면 전략 수익률에 영향을 미칠 수 있습니다.
  3. 파격적인 거래는 가짜 신호를 만들어내기 쉽다.

최적화 방향

  1. 다른 중궤도선 계산 방법을 사용해 최적의 변수를 찾아보세요.
  2. 다른 N값을 테스트하여 최적의 곱수를 찾습니다.
  3. 은 신호를 피하기 위해 을 늘리세요.
  4. 단위 손실을 엄격하게 통제하는 최적화된 스톱 로직

요약하다

이 전략은 전반적으로 과학을 합리적으로 사용하여, 동적 통로 지표를 통해 가격 움직임과 방향을 판단하고, 합리적인 파라미터를 설정하여 돌파 신호를 포착하고, 낮은 가격과 높은 가격의 판매를 달성하고, 그 결과 초과 수익을 얻습니다. 전략의 위험을 지속적으로 최적화하면서 여러 시장에서 안정적으로 작동 할 수 있도록합니다.

전략 소스 코드
/*backtest
start: 2024-01-27 00:00:00
end: 2024-02-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Keltner Strategy", overlay=true)
length = input.int(20, minval=1)
mult = input.float(2.0, "Multiplier")
src = input(close, title="Source")
exp = input(true, "Use Exponential MA")
BandsStyle = input.string("Average True Range", options = ["Average True Range", "True Range", "Range"], title="Bands Style")
atrlength = input(10, "ATR Length")
esma(source, length)=>
	s = ta.sma(source, length)
	e = ta.ema(source, length)
	exp ? e : s
ma = esma(src, length)
rangema = BandsStyle == "True Range" ? ta.tr(true) : BandsStyle == "Average True Range" ? ta.atr(atrlength) : ta.rma(high - low, length)
upper = ma + rangema * mult
lower = ma - rangema * mult
crossUpper = ta.crossover(src, upper)
crossLower = ta.crossunder(src, lower)
bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1])
sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice[1])
crossBcond = false
crossBcond := crossUpper ? true
     : na(crossBcond[1]) ? false : crossBcond[1]
crossScond = false
crossScond := crossLower ? true
     : na(crossScond[1]) ? false : crossScond[1]
cancelBcond = crossBcond and (src < ma or high >= bprice )
cancelScond = crossScond and (src > ma or low <= sprice )
if (cancelBcond)
	strategy.cancel("KltChLE")
if (crossUpper)
	strategy.entry("KltChLE", strategy.long, stop=bprice, comment="KltChLE")
if (cancelScond)
	strategy.cancel("KltChSE")
if (crossLower)
	strategy.entry("KltChSE", strategy.short, stop=sprice, comment="KltChSE")