트리플 슈퍼트렌드 이치모쿠 클라우드 양적 거래 전략

저자:차오장, 날짜: 2023-12-27 15:22:40
태그:

img

요약

이 전략은 트리플 슈퍼트렌드 지표, 이치모쿠 클라우드 지표, 평균 진정한 범위 (ATR) 지표 및 기하급수적인 이동 평균 (EMA) 을 결합한 정량적 거래 전략입니다. 시장 트렌드를 결정하기 위해 트리플 슈퍼트렌드, 지원 및 저항을위한 이치모쿠 클라우드, 스톱 로스를위한 ATR, 트렌드 확인을위한 EMA를 사용하여 비교적 완전한 거래 시스템을 형성합니다.

전략 원칙

이 전략의 핵심 논리는 트리플 슈퍼트렌드 지표에 기반합니다. 슈퍼트렌드 지표는 특정 기간 내 평균 진정한 범위와 가격을 비교하여 트렌드 방향을 결정합니다. 가격이 상단보다 높을 때, 그것은 상승 신호이며, 가격이 하단보다 낮을 때, 그것은 하향 신호입니다. 이 전략은 다른 매개 변수와 함께 세 개의 슈퍼트렌드 지표를 채택합니다. 세 가지 모두 동시에 구매 또는 판매 신호를 할 때 거래 신호가 생성됩니다.

또한 이치모쿠 구름 두께는 일부 잘못된 신호를 필터링하기 위해 현재 트렌드의 강도를 결정하는 데 도움이됩니다. ATR 지표는 스톱 로스를 설정하는 데 사용됩니다. EMA 지표는 중간 및 장기 트렌드를 확인합니다.

특히, 가격이 세 개의 슈퍼 트렌드 지표의 상단 범위를 넘어서면 장거리, 세 가지의 하단 범위를 넘어서면 단거리. 또한 불확실한 신호를 필터하기 위해 이치모쿠 클라우드 위에 또는 아래에 있어야 합니다. 스톱 로스는 엔트리 가격 빼기 동적 트레일링 스톱의 ATR 값으로 설정됩니다.

장점

  1. 세 개의 슈퍼트렌드 지표와 다른 설정은 효과적으로 시장 소음을 필터하고 추세 방향을 더 정확하게 결정할 수 있습니다.

  2. 이치모쿠 클라우드는 트렌드 강도를 결정하여 가짜 브레이크오웃을 피합니다. ATR 스톱 로스 설정은 막대한 손실을 최대한 피하기 위해 합리적입니다.

  3. EMA는 중장기 및 장기적인 트렌드 방향을 확인하고, 슈퍼트렌드 신호를 확인하고, 신뢰성을 더욱 향상시키는데 도움을 줍니다.

  4. 여러 가지 지표를 결합하면 시그널이 더 신뢰할 수 있습니다. 왜냐하면 시장 트렌드를 결정 할 때 서로 확인할 수 있기 때문입니다.

위험성

  1. 이치모쿠 구름이 추가되었지만 구름 두께가 침투하면 유효하지 않은 구역으로 들어가는 위험이 여전히 있습니다. ATR은 어느 정도 손실을 제한합니다.

  2. 변동성이 높을 때, ATR에 의해 설정된 스톱 손실은 직접적으로 활성화 될 수 있으며, 이로 인해 손실 비율이 증가합니다. 매개 변수를 조정하거나 스톱 손실 범위를 증가시킬 수 있습니다.

  3. 부적절한 신호는 슈퍼 트렌드 매개 변수가 적절하게 설정되지 않으면 자주 발생할 수 있습니다. 최적의 조합을 찾기 위해 많은 백테스트가 필요합니다.

강화

  1. 변동성 지수, 볼링거 밴드 같은 더 많은 지표가 신호를 필터링하고 신뢰성을 향상시키는 데 도움이 될 수 있습니다.

  2. ATR 계산을 개선하여 큰 변동에서 손실 비율을 낮추기 위해 동적으로 중지 손실 범위를 조정합니다.

  3. 수동 매개 변수 설정 대신 거래 신호를 판단하기 위해 역사 데이터에 훈련 된 기계 학습 모델을 추가합니다. 신호 정확도는 향상 될 수 있습니다.

결론

이 전략은 트리플 슈퍼트렌드, 이치모쿠 클라우드, ATR 및 EMA를 포함한 네 가지 부분을 결합합니다. 시그널은 시장 트렌드를 결정 할 때 지표에 걸쳐 검증됩니다. 이치모쿠 클라우드 및 ATR 스톱 손실 제어 위험. EMA는 중간 및 장기 트렌드를 확인합니다. 이 전략의 신호는 중장기 보유에 비교적 신뢰할 수 있습니다. 더 나은 전략 성능을 얻기 위해 스톱 손실을 더 이상 최적화하고 더 많은 보조 지표를 추가 할 수 있습니다.


/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="HyperTrend", shorttitle="HyperTrend", overlay=true )

// 
float percent_of_portfo = input.int(2, title = "percent of portfo per order", minval = 0, maxval = 100) / 100

// ichimoku Cloud
conversionPeriods = input.int(9, minval=1, title="Conversion Line Length", group = "ichimoku")
basePeriods = input.int(26, minval=1, title="Base Line Length", group = "ichimoku")
laggingSpan2Periods = input.int(52, minval=1, title="Leading Span B Length", group = "ichimoku")
displacement = input.int(26, minval=1, title="Lagging Span", group = "ichimoku")
donchian(len) => math.avg(ta.lowest(len), ta.highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = math.avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)
p1 = plot(leadLine1, offset = displacement - 1, color=#A5D6A7,
	 title="Leading Span A", display = display.none)
p2 = plot(leadLine2, offset = displacement - 1, color=#ef9a9a,
	 title="Leading Span B", display = display.none)
plot(leadLine1 > leadLine2 ? leadLine1 : leadLine2, offset = displacement - 1, title = "Kumo Cloud Upper Line", display = display.none) 
plot(leadLine1 < leadLine2 ? leadLine1 : leadLine2, offset = displacement - 1, title = "Kumo Cloud Lower Line", display = display.none) 
fill(p1, p2, color = leadLine1 > leadLine2 ? color.rgb(67, 160, 72, 59) : color.rgb(244, 67, 54, 70))


// three supertrend

//1
atrPeriod1 = input(10, "ATR Length1", group="SuperTrend")
factor1 = input.float(1.0, "Factor1", step = 0.01, group="SuperTrend")

[supertrend1, direction1] = ta.supertrend(factor1, atrPeriod1)
supertrend1 := barstate.isfirst ? na : supertrend1

bodyMiddle1 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none)
upTrend1 =    plot(direction1 < 0 ? supertrend1 : na, "Up Trend",   color = color.green, style = plot.style_linebr)
downTrend1 =  plot(direction1 < 0 ? na : supertrend1, "Down Trend", color = color.red,   style = plot.style_linebr)


//2
atrPeriod2 = input(11, "ATR Length2", group="SuperTrend")
factor2 = input.float(2.0, "Factor2", step = 0.01, group="SuperTrend")

[supertrend2, direction2] = ta.supertrend(factor2, atrPeriod2)
supertrend2 := barstate.isfirst ? na : supertrend2

bodyMiddle2 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none)
upTrend2 =    plot(direction2 < 0 ? supertrend2 : na, "Up Trend",   color = color.green, style = plot.style_linebr)
downTrend2 =  plot(direction2 < 0 ? na : supertrend2, "Down Trend", color = color.red,   style = plot.style_linebr)


//3
atrPeriod3 = input(12, "ATR Length2", group="SuperTrend")
factor3 = input.float(3.0, "Factor2", step = 0.01, group="SuperTrend")

[supertrend3, direction3] = ta.supertrend(factor3, atrPeriod3)
supertrend3 := barstate.isfirst ? na : supertrend3

bodyMiddle3 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none)
upTrend3 =    plot(direction3 < 0 ? supertrend3 : na, "Up Trend",   color = color.green, style = plot.style_linebr)
downTrend3 =  plot(direction3 < 0 ? na : supertrend3, "Down Trend", color = color.red,   style = plot.style_linebr)


// ATR
lengthATR = input.int(title="Length (ATR)", defval=14, minval=1, group="ATR")
smoothingATR = input.string(title="Smoothing (ATR)", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"], group="ATR")
ma_function(sourceATR, lengthATR) =>
	switch smoothingATR
		"RMA" => ta.rma(sourceATR, lengthATR)
		"SMA" => ta.sma(sourceATR, lengthATR)
		"EMA" => ta.ema(sourceATR, lengthATR)
		=> ta.wma(sourceATR, lengthATR)
ATR = ma_function(ta.tr(true), lengthATR)
plot(ATR, title = "ATR", color=color.new(#B71C1C, 0), display = display.none)

// EMA
lenEMA = input.int(200, minval=1, title="Length of EMA", group="EMA")
srcEMA = input(close, title="Source of EMA", group="EMA")
offset = input.int(title="Offset (EMA)", defval=0, minval=-500, maxval=500, group="EMA")
outEMA = ta.ema(srcEMA, lenEMA)
plot(outEMA, title="EMA", color=color.blue, offset=offset, display = display.none)

ma(sourceEMA, lengthEMA, type) =>
    switch type
        "SMA" => ta.sma(sourceEMA, lengthEMA)
        "EMA" => ta.ema(sourceEMA, lengthEMA)
        "SMMA (RMA)" => ta.rma(sourceEMA, lengthEMA)
        "WMA" => ta.wma(sourceEMA, lengthEMA)
        "VWMA" => ta.vwma(sourceEMA, lengthEMA)

typeMA = input.string(title = "Method (EMA)", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="EMA")
smoothingLengthEMA = input.int(title = "Smoothing Length (EMA)", defval = 5, minval = 1, maxval = 100, group="EMA")

smoothingLine = ma(outEMA, smoothingLengthEMA, typeMA)
plot(smoothingLine, title="Smoothing Line", color=#f37f20, offset=offset, display=display.none)


//logic



if (open + ATR > supertrend1) and (open + ATR > supertrend2) and (open + ATR > supertrend3) 
	strategy.entry("L", strategy.long)
else if (open < supertrend1 + ATR) and (open < supertrend2 + ATR) and (open < supertrend3 + ATR) 
	strategy.entry("S", strategy.short)
else
	strategy.close_all("C")

더 많은