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


생성 날짜: 2023-12-27 15:22:40 마지막으로 수정됨: 2023-12-27 15:22:40
복사: 1 클릭수: 1074
avatar of ChaoZhang ChaoZhang
1
집중하다
1623
수행원

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

개요

이 전략은 삼중 초 트렌드 지표, 이치모쿠 클라우드 지표, 평균 실제 파장 (ATR) 지표, 지수 이동 평균 (EMA) 을 결합한 정량 거래 전략이다. 이 전략은 삼중 초 트렌드에서 시장 트렌드 방향을 판단, 이치모쿠 클라우드에서 지지 압력을 판단, ATR 지표 설정 중지, EMA 지표 트렌드 확인을 통해 더 완전한 거래 시스템을 구성한다.

전략 원칙

이 전략의 핵심 논리는 세 개의 초과 트렌드 지표의 판단에 기초한다. 초과 트렌드 지표는 가격과 특정 주기 동안의 평균 실제 파장의 크기와 큰 관계를 비교하여 트렌드의 방향을 판단한다. 가격이 상승할 때 낙관 신호를 발산하고, 가격이 하락할 때 낙관 신호를 발산한다. 이 전략은 세 개의 다른 파라미터의 초과 트렌드 지표를 사용하며, 세 개의 초과 트렌드 지표가 동시에 낙관 또는 낙관 신호를 발산하면 거래 신호를 발산한다.

또한, 이치모쿠 클라우드 지표에 의해 주어진 클라우드 도는 현재 트렌드의 강점을 판단하여 일부 가짜 신호를 제거한다. ATR 지표는 스톱포드를 설정하는 데 사용된다. EMA 지표는 중장선 트렌드를 확인하는 데 사용된다.

구체적으로, 가격이 3개의 초 트렌드 지표의 상단 궤도보다 높을 때 더 많이; 가격이 3개의 초 트렌드 지표의 하단 궤도보다 낮을 때, 공백하십시오. 동시에 가격이 이치모쿠 구름보다 높거나 낮을 것을 요구하고, 불확실한 신호를 필터링하십시오.

전략적 이점

  1. 트리플 초트렌드 지표의 매개 변수 설정이 다르기 때문에 시장의 소음을 효과적으로 필터링하여 트렌드 방향을 더 정확하게 판단할 수 있다.

  2. 이치모쿠 클라우드 지표는 트렌드를 강하거나 약하다고 판단하여 가짜 돌파를 피한다. ATR의 손실을 막는 설정은 합리적이며, 최대 손실을 피한다.

  3. EMA 지표는 중장선 트렌드 방향을 결정하는데 도움을 주며, 초트렌드 판단과 상호 검증하여 신호의 신뢰성을 더욱 높인다.

  4. 다양한 지표와 결합하여 서로 확인 할 수 있으며, 시장의 추세를 종합적으로 판단하여 신호가 더 신뢰할 수 있습니다.

전략적 위험

  1. 이치모쿠 클라우드 지표 판단에 참여하는 동안에도 구름 두께를 뚫고 무효 영역에 들어가는 위험이 있습니다. 이 경우 ATR 지표는 일부 손실을 일정 범위 내에서 제어합니다.

  2. 시장이 급격히 변동할 때, ATR 지표의 설정된 중지점은 직접적으로 유발될 수 있으며, 이로 인해 전략의 손실률이 증가한다. 이 때 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")