이치모쿠 클라우드 기반의 양자 거래 전략

저자:차오장, 날짜: 2024-01-12 14:20:43
태그:

img

전반적인 설명

이 전략은 이치모쿠 클라우드 지표에 기반한 양적 거래 시스템을 설계하며, 주로 좋은 트렌드를 가진 자산에 대한 것입니다. 이 전략은 안정적인 이익을 얻기 위해 스톱 로스, 영업 취득 및 트레일링 스톱 로스 등의 기능을 통합합니다.

전략 원칙

이치모쿠 클라우드는 변환 라인, 베이스 라인, 리딩 스펜 1, 리딩 스펜 2 및 클라우드 차트로 구성됩니다. 이 전략의 거래 신호는 가격과 클라우드 차트 사이의 관계에서 발생합니다. 구체적으로, 가격이 리딩 스펜 1을 넘을 때 구매 신호가 생성됩니다. 가격이 리딩 스펜 1을 넘을 때 판매 신호가 생성됩니다. 또한, 리딩 스펜 2는 보조 판단 지표로도 사용됩니다.

이 전략은 또한 ATR 지표에 기반하여 스톱 로스를 설정하고 이윤을 취합니다. ATR 지표는 시장 변동의 정도를 효과적으로 파악 할 수 있습니다. 스톱 로스는 ATR의 2배로 설정되며 이윤을 취하는 것은 ATR의 4배로 설정됩니다. 이것은 단일 손실을 효과적으로 제어하고 일부 이윤을 잠금 할 수 있습니다.

마지막으로, 전략은 트레일링 스톱 로스 메커니즘을 채택합니다. 특히, 긴 포지션을 위해, 그것은 수익을 잠금하기 위해 실시간으로 스톱 로스 라인을 조정하기 위해 콜백 진폭으로 ATR의 2 배를 사용할 것입니다. 짧은 포지션을 위해, 그것은 수익을 잠금하기 위해 실시간으로 스톱 로스 라인을 조정하기 위해 콜백 진폭으로 ATR의 2 배를 사용할 것입니다.

이점 분석

  1. 이치모쿠 클라우드 차트 지표에 기반하여 트렌드를 효과적으로 파악할 수 있습니다.
  2. ATR에 기반한 스톱 로스와 수익을 취하면 위험을 제어 할 수 있습니다.
  3. 수익을 잘 확보하기 위해 후속 스톱 손실 메커니즘을 채택
  4. 전략 논리는 간단하고 명확하고 이해하기 쉽고 확인하기 쉽습니다.
  5. 매개 변수 설정이 가능하며, 매개 변수는 다른 시장에 따라 조정 할 수 있습니다.

위험 분석

  1. 이치모쿠 클라우드 지도는 매개 변수 설정에 매우 민감합니다. 부적절한 설정은 거래 기회를 놓칠 수도 있고 잘못된 신호를 생성할 수도 있습니다.
  2. 후속 스톱 손실 진폭이 너무 커 설정되면, 스톱 손실은 조기에 발생할 수 있습니다.
  3. 강한 주식은 ATR 지표에서 표시된 스톱 로스 라인이나 트래일링 스톱 로스 라인을 통과할 수 있습니다.
  4. 거래 비용도 수익성에 어느 정도 영향을 줄 것입니다.

대응 위험에 대한 해결책:

  1. 가장 적합한 설정을 찾기 위해 Ichimoku 클라우드 지도의 매개 변수를 최적화
  2. 너무 크거나 너무 작지 않은 합리적인 후속 스톱 손실 진폭을 평가하십시오.
  3. 강한 주식에서는 스톱 로스 범위를 적절히 완화하십시오.
  4. 낮은 수수료를 받는 브로커를 선택하세요

최적화 방향

  1. 잘못된 트레이드를 줄이기 위해 신호 필터링을 위한 다른 기술적 지표를 결합합니다.
  2. 과거 데이터/백트테스팅을 기반으로 매개 변수를 최적화
  3. 다른 품종에 대한 매개 변수는 개별적으로 최적화 할 수 있습니다.
  4. 스톱 손실 진폭을 동적으로 조정하는 것을 고려하십시오.
  5. 더 신뢰할 수 있는 거래 신호를 만들기 위해 기능 엔지니어링을 하기 위해 알고리즘을 결합

요약

일반적으로 이 전략은 안정적인 트렌드 추적 전략이다. 이치모쿠 클라우드 지표를 기반으로 트렌드 방향을 판단하고, ATR 지표를 사용하여 스톱 로스를 설정하고, 이윤을 취한다. 수익을 잠금하기 위해 트레일링 스톱 로스를 사용한다. 장점은 단순 논리이며, 이해하기 쉽다; 단일 손실을 제어할 수 있다; 트렌드를 효과적으로 추적할 수 있다. 그러나 매개 변수 민감성 및 스톱 로스의 일부 위험도 있다. 매개 변수와 전략 자체를 지속적으로 최적화함으로써 더 나은 성능을 얻을 수 있다.


/*backtest
start: 2023-01-05 00:00:00
end: 2024-01-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Ichimoku Cloud Strategy with SL, TP, and Trailing Stop", overlay=true)

conversionPeriods = input(9, "Conversion Line Length")
basePeriods = input(26, "Base Line Length")
laggingSpan2Periods = input(52, "Leading Span B Length")
displacement = input(26, "Lagging Span")
atrLength = input(14, title="ATR Length")

donchian(len) => math.avg(ta.lowest(len), ta.highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = math.avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)

// Plot the Ichimoku Cloud components
plot(conversionLine, color=color.blue, title="Conversion Line")
plot(baseLine, color=color.red, title="Base Line")
plot(leadLine1, color=color.green, title="Leading Span A")
plot(leadLine2, color=color.orange, title="Leading Span B")
plot(leadLine1 > leadLine2 ? leadLine1 : leadLine2, color=color.green, title="Kumo Cloud Upper Line")
plot(leadLine1 < leadLine2 ? leadLine1 : leadLine2, color=color.red, title="Kumo Cloud Lower Line")

// ATR for stop loss and take profit
atrValue = ta.atr(atrLength)
stopLoss = atrValue * 2
takeProfit = atrValue * 4

// Strategy entry and exit conditions
longCondition = ta.crossover(close, leadLine1) and close > leadLine2
shortCondition = ta.crossunder(close, leadLine1) and close < leadLine2

// Plot buy and sell signals
plotshape(series=longCondition ? leadLine1 : na, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(series=shortCondition ? leadLine1 : na, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)

// Execute strategy orders with stop loss and take profit
strategy.entry("Buy", strategy.long, when=longCondition)
strategy.close("Buy", when=shortCondition) // Close buy position when sell condition is met
strategy.entry("Sell", strategy.short, when=shortCondition)
strategy.close("Sell", when=longCondition) // Close sell position when buy condition is met

// Trailing stop
strategy.cancel("Trailing Stop")
var float trailingStopPrice = na
if (longCondition)
    trailingStopPrice := math.max(trailingStopPrice, close - atrValue * 2)
    strategy.exit("Trailing Stop", from_entry="Buy", trail_offset=atrValue * 2, trail_price=trailingStopPrice)
else if (shortCondition)
    trailingStopPrice := math.min(trailingStopPrice, close + atrValue * 2)
    strategy.exit("Trailing Stop", from_entry="Sell", trail_offset=atrValue * 2, trail_price=trailingStopPrice)


더 많은