이 전략은 이치모쿠 기술 지표에 기반한 정량화 트렌드 추적 전략으로, 주로 특정 평평선 차이를 통해 특정 조건에서 다중 공명서를 구성하여 시장의 흐름을 추적하고, 특정 스톱 메커니즘과 결합하여 위험을 제어한다.
이 전략의 핵심은 일정한 변수 설정하에 거래 신호를 구축하는 이치모쿠 지표이다. 이치모쿠 지표는 전환선, 기준선, 전방선, 후방선 네 줄로 이루어져 있으며, 이 중 전환선은 천체라고, 기준선은 지선이라고 한다. 이 전략은 천체와 지선의 다른 변수를 설정하여 금叉死叉 거래 신호를 형성한다.
특히, 전략은 다음과 같은 몇 가지 거래 규칙에 따라 이루어집니다.
가격 상승이 천장을 가로질러 올라가면 더 많은 것을 할 수 있습니다.
“가격이 안테나를 통과할 때, 평평한 상태에서 더 많은 포지션을 취합니다.
“가격이 지평선 아래로 내려가 구름대에 들어갔을 때, 공백이 생겼습니다.
가격 상승이 안테나를 통과할 때 공백기
이러한 다공간 거래 규칙을 통해 시장의 추세를 효과적으로 포착할 수 있다. 동시에, 클라우드 밴드의 돌파구를 필터링 조건으로 결합하여, 잘못 사고를 어느 정도 피할 수 있다.
다른 일반적인 평행 거래 전략에 비해 이 전략은 다음과 같은 장점을 가지고 있다:
이치모쿠 지표에 기초하여, 트렌드 판단에 더 정확하다. 이치모쿠 지표는 여러 개의 평균선으로 구성되어 있으며, 통합 판단 트렌드는 더 신뢰할 수 있으며, 단일 평균선으로 발생하는 소음을 피한다.
다중 평선 조합으로 거래 필터링 효과가 더 좋습니다. 추가 조건으로 클라우드 대역을 뚫는 것은 잘못된 신호를 피할 수 있습니다.
위험 조절 가능. 스톱 피해 안테나를 설정하여 적시에 스톱 피해를 발생시키고, 효과적으로 위험을 제어할 수 있다.
회수량이 작다. 다른 트렌드 전략에 비해 더 적은 시간 동안 역시장 동작을 일으켜 회수 손실을 최소화한다.
매개 변수 조정 유연함. 시장 상황에 따라 평균선 매개 변수를 조정하여 다양한 상황에 유연하게 적응할 수 있다.
이 전략에는 여전히 위험성이 있습니다.
불안한 상황이 좋지 않다. 장기간 불안한 시장이 발생했을 때, 이 전략은 소규모의 반복 거래가 발생할 수 있으며, 이로 인해 부실이 발생한다.
트렌드 반전의 인식이 부족하다. 이치모쿠 지표는 단기간에 트렌드 반전의 판단 능력이 약하여 반전의 기회를 놓치거나 갑작스러운 반전의 위험을 겪을 수 있다.
변수 설정은 경험에 의존한다. 다른 변수 설정은 전략 성능에 큰 영향을 미치며, 풍부한 역사 경험에 의존하는 조정이 필요하다.
위와 같은 위험들에 대해, 이 전략은 다음과 같은 측면에서 최적화될 수 있습니다.
변동성 지표와 같은 변동성 상황을 판단하여 무효 거래를 피하기 위해 전략 상태를 설정하십시오.
트렌드 반전 신호 모듈을 추가하여 이동 평균 반전 교차 조합 판단을 추가한다.
기계 학습과 같은 방법을 사용하여 자동으로 매개 변수를 최적화하여 인적 경험에 대한 의존도를 줄입니다.
다이내믹 스톱로스 라인을 설정한다. 시장의 변동성에 따라 실시간으로 스톱로스의 폭을 조정하고, 위험을 줄인다.
전체적으로 이 전략은 이치모쿠 지표의 장점을 활용하여 트렌드 상황을 포착하는 데 강한 이점을 보여준다. 적절한 매개 변수 설정과 최적화된 조정을 통해 전략의 안정성을 더욱 높일 수 있어 실물 시장에 투자하는 것을 고려할 가치가 있는 효율적인 전략이다.
/*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)