옥타곤 클라우드 추적 전략

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

img

전반적인 설명

이치는 이치모쿠 지표에 기반한 양적 트렌드 추적 전략입니다. 이는 주로 시장 트렌드를 추적하기 위해 특정 조건 하에서 긴 포지션과 짧은 포지션을 구성하며 위험을 제어하기 위해 특정 스톱 로스 메커니즘과 결합됩니다.

전략 원칙

이 전략의 핵심은 특정 매개 변수 설정으로 이치모쿠 지표를 기반으로 거래 신호를 구축하는 것입니다. 이치모쿠 지표는 변환선, 기본선, 선도 스펜 A 및 후퇴 스펜 B의 네 가지 라인으로 구성됩니다. 변환선은 일반적으로 텐칸 센, 기본선은 키준 센으로 알려져 있습니다. 이 전략은 금색 십자 및 죽은 십자 거래 신호를 생성하기 위해 텐칸 센과 키준 센에 대해 다른 매개 변수를 설정합니다. 또한 엔트리를 유발하는 보조 조건으로 클라우드 브레이크도 포함합니다.

특히 이 전략은 주로 다음과 같은 거래 규칙을 따르고 있습니다.

  1. 가격이 텐칸센을 넘어서서 클라우드를 떠날 때

  2. 가격이 텐칸센 이하로 떨어지면 긴 포지션을 닫습니다.

  3. 가격이 키준센 아래로 떨어지고 구름으로 올라갈 때

  4. 가격이 텐칸센을 넘어서면 코트 포지션을 닫습니다.

이러한 장기 및 단기 거래 원칙을 통해 전략은 시장의 트렌드 움직임을 효과적으로 포착 할 수 있습니다. 한편, 클라우드 브레이크를 통합하면 어느 정도 잘못된 신호를 필터합니다.

이점 분석

다른 일반적인 이동 평균 거래 전략에 비해 이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 이치모쿠를 기반으로 한 더 정확한 트렌드 판단. 이치모쿠는 여러 이동 평균으로 구성되어 있으며, 트렌드 인식 및 단일 MA의 잡음을 필터링하는 데 더 신뢰할 수 있습니다.

  2. 여러 선으로 더 나은 필터 효과. 더 많은 필터로 구름 파업에서 잘못된 신호를 피합니다.

  3. 통제 가능한 위험. 스톱 로스 라인을 설정하면 신속한 스톱 로스 및 리스크 통제가 가능합니다.

  4. 더 작은 마감: 다른 트렌드 전략에 비해 덜 불리한 거래는 마감 손실을 줄입니다.

  5. 유연한 매개 변수 조정. 매개 변수는 다른 시장 조건에 적응하도록 조정할 수 있습니다.

위험 과 최적화

이 전략에는 여전히 몇 가지 위험이 있습니다.

  1. 범위에 묶인 시장에서 낮은 성과. 플라트 손실로 이어지는 윙사가 발생할 수 있습니다.

  2. 역전 인식 부족: 단기 트렌드 역전 식별에 약하고 기회를 놓칠 수 있거나 갑작스러운 역전에 직면 할 수 있습니다.

  3. 경험적 매개 변수 조정에 의존합니다. 다른 매개 변수들은 풍부한 역사적 경험을 필요로하는 성능에 크게 영향을 줄 수 있습니다.

다음 측면은 위의 위험을 해결하기 위해 최적화 될 수 있습니다.

  1. 변동성 지표를 추가하여 트렌드가 아닌 시장을 감지하고 전략을 일시 중지합니다.

  2. 이동 평균 크로스오버 같은 추가 반전 신호를 포함합니다.

  3. 기계 학습을 사용하여 수동 조정 대신 자동화된 매개 변수 최적화를 합니다.

  4. 시장의 변동성에 따라 동적 스톱 로스 라인을 설정합니다.

결론

일반적으로 이 전략은 트렌드 움직임을 파악하는 Ichimoku의 강점을 활용합니다. 적절한 매개 변수 조정 및 최적화로 더 나은 견고성을 달성하고 라이브 거래에서 고려할만한 효율적인 전략으로 작용 할 수 있습니다.


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

//@version=3
strategy(title="RENKO ICHIMOKU STRATEGY", shorttitle="RENKO ICHIMOKU STRATEGY", overlay=true)
ro = open
rc = close

tenkanSenPeriods = input(10, minval=1, title="Tenkan-sen"),
kijunSenPeriods = input(30, minval=1, title="Kijun-sen")
SenkouSpanBPeriods = input(60, minval=1, title="Senkou Span B"),
displacement = input(30, minval=1, title="Chikou Span (Displacement)")

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

tenkanSen = donchian(tenkanSenPeriods)
kijunSen = donchian(kijunSenPeriods)
SenkouSpanA = avg(tenkanSen, kijunSen)
SenkouSpanB = donchian(SenkouSpanBPeriods)

plot(tenkanSen, color=#0496ff, linewidth=2, title="Tenkan-sen")
// plot(kijunSen, color=#991515, title="Kijun-sen")
// plot(close, offset = -displacement, color=#459915, title="Chikou Span")

p1 = plot(SenkouSpanA, offset = displacement, color=green, title="Senkou Span A")
p2 = plot(SenkouSpanB, offset = displacement, color=red, title="Senkou Span B")
fill(p1, p2, color = SenkouSpanA > SenkouSpanB ? green : red)

// Entry/Exit Signals
tk_cross_bull = tenkanSen > kijunSen
tk_cross_bear = tenkanSen < kijunSen

price_below_tenkan = open < tenkanSen and close < tenkanSen
price_above_tenkan = open > tenkanSen and close > tenkanSen

price_below_kinjun = close < kijunSen
price_above_kinjun = close > kijunSen

tekan_above_kinjun = tenkanSen > kijunSen
tekan_below_kinjun = tenkanSen < kijunSen

ss_high = max(SenkouSpanA[displacement-1], SenkouSpanB[displacement-1])
ss_low = min(SenkouSpanA[displacement-1], SenkouSpanB[displacement-1])
price_inside_kumo = close > ss_high and close < ss_low

price_below_kumo = rc[1] < ro[1] and rc[0] < ro[0] and rc[1] < ss_low 
price_above_kumo = rc[1] > ro[1] and rc[0] > ro[0] and rc[1] > ss_high 

cs_cross_bull = mom(close, displacement-1) > 0
cs_cross_bear = mom(close, displacement-1) < 0

bullish = cs_cross_bull and not price_inside_kumo
bearish = cs_cross_bear and not price_inside_kumo



strategy.entry("Long", strategy.long, when=price_above_kumo and price_above_tenkan )
strategy.close("Long", when=price_below_tenkan )

strategy.entry("Short", strategy.short, when=price_below_kumo and price_below_tenkan )
strategy.close("Short", when=price_above_tenkan )

// longCondition = crossover(sma(close, 14), sma(close, 28))
// if (longCondition)
//     strategy.entry("My Long Entry Id", strategy.long)

// shortCondition = crossunder(sma(close, 14), sma(close, 28))
// if (shortCondition)
//     strategy.entry("My Short Entry Id", strategy.short)

더 많은