이동평균 전략에 기반한 통합 이치모쿠 켈트너 트레이딩 시스템


생성 날짜: 2023-12-20 13:40:08 마지막으로 수정됨: 2023-12-20 13:40:08
복사: 0 클릭수: 745
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

이동평균 전략에 기반한 통합 이치모쿠 켈트너 트레이딩 시스템

개요

이 전략은 평행선 전략, 이치모쿠 클라우드 그래프 및 켈트너 채널 기술 지표를 통합하여 트렌드 추적 및 브레이크 트레이딩을 구현하여 고주파 알고리즘 트레이딩에 적용됩니다.

전략 원칙

  1. Keltner 통로를 사용하여 가맹점 신호로 가맹점 상하를 초과하는지 판단합니다.
  2. 이치모쿠 클라우드 지도는 Keltner 채널과 함께 트렌드 방향을 판단하는 데 사용됩니다.
  3. 평행선 전략은 평소 포지션 신호를 발송합니다.

우위 분석

  1. 다양한 기술 지표를 통합하고, 통합된 판단을 통해 의사 결정의 정확성을 높이는 것
  2. 켈트너 채널은 과매매를 판단하고, 상위와 하락을 추격하는 포지션을 피합니다.
  3. 이치모쿠 클라우드 그래프: 큰 트렌드를 파악하고 역동적인 거래를 피하는 방법
  4. 일률적 전략 필터링 흔들림, 너무 민감한 것을 방지

위험 분석

  1. 다중 지표 통합, 변수 설정이 복잡하고, 신중한 테스트가 필요합니다.
  2. 클라우드 그래프 변환 라인과 기준 라인이 교차하는 것은 항상 신뢰할 수 없는 거래 신호입니다.
  3. 켈트너 채널은 다른 주식 특성에 맞게 변수를 조정해야 합니다.

최적화 방향

  1. 서버 성능을 평가하고, 적당히 평균 주기를 줄이고, 거래 횟수를 높인다.
  2. 다양한 주식의 변수에 대한 민감성을 테스트하고 적응 변수를 설정합니다.
  3. 단독 손실을 줄이기 위한 손실 차단 전략을 강화

요약하다

이 전략은 이치모쿠 클라우드 그래프, 켈트너 채널 및 평선 전략의 여러 기술 지표를 통합하여 트렌드 추적과 고효율의 브레이크 트레이딩을 구현한다. 단일 지표에 비해 이 전략의 판단은 더 포괄적이고 정확하며, 특정 가짜 신호를 피한다. 또한, 더 복잡한 파라미터 설정이 있어 주식별로 최적화를 필요로 하는 문제도 있다.

전략 소스 코드
/*backtest
start: 2023-11-19 00:00:00
end: 2023-12-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Author: Persio Flexa
// Description: Ichimoku Clouds with Keltner Channel, perfect for margin trading 
strategy("Ichimoku Keltner Strategy", overlay=true) 

// -- Keltner ------------------------------------------------------------------
source = close

useTrueRange = input(true)
length = input(18, minval=1) 
mult = input(1.8)

ma = sma(source, length)
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult

plot(ma, title="BASE", color=orange,transp=85)
plot(upper, title="UPPER", color=red)
plot(lower, title="LOWER", color=green)

//crossUpper = crossover(source, upper)
//crossLower = crossunder(source, lower)
crossUpper = source > upper
crossLower = source  < 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 (source < ma or high >= bprice )
cancelScond = crossScond and (source > ma or low <= sprice )

// ---------------------------------------------------------------------


// -- Ichimoku

ATRlength = input(200, minval=1)
ATRMult = input(2.272, minval=1)

ATR = rma(tr(true), ATRlength)

len = input(26, minval=1, title="EMA Length")
src = input(close, title="Source")
out = ema(src, len)

emaup = out+(ATR*ATRMult)
emadw = out-(ATR*ATRMult)

conversionPeriods = input(15, minval=1),
basePeriods = input(35, minval=1)
laggingSpan2Periods = input(52, minval=1),
displacement = input(26, minval=1)

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

conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)

p1 = plot(leadLine1, offset = displacement, color=green,transp=85, title="Lead 1")
p2 = plot(leadLine2, offset = displacement, color=red,transp=85, title="Lead 2")
fill(p1, p2,silver) 

longCond    = crossover(conversionLine, baseLine)
shortCond   = crossunder(conversionLine, baseLine)
// -------------------------------------------------------------------------

if (crossUpper and (conversionLine > baseLine))
    strategy.entry("long", strategy.long, stop=bprice, comment="LONG")

if (crossLower and (conversionLine < baseLine))
    strategy.entry("short", strategy.short, stop=sprice, comment="SHORT")
    
strategy.close("long", when = (shortCond and source < lower))
strategy.close("short", when = (longCond and source > upper))