
이 전략은 평형스케일 클라우드 지표에서 제공하는 다양한 신호를 활용하여 중·장기 트렌드를 포착하고, 흔들림 평정을 필터링하고, 강력한 트렌드의 방향을 추적하는 것을 목적으로 하는 순수 트렌드 추적 전략을 설계했습니다.
이 전략은 평형 스텝 클라우드 그래프 지표의 변환 라인, 기준 라인 및 지연 라인 등을 주요 신호로 사용합니다. 장기적인 추세 판단에서, 전위 클라우드 및 후위 클라우드의 상하 변화 관계에 초점을 맞추어 추세를 판단합니다. 구체적인 입시 및 출구 시점 선택에서, 변환 라인 및 기준 라인의 교차 및 가격과 클라우드 그래프의 관계가 변화하는 것이 주요 근거입니다.
전체적으로, 이 전략의 핵심 논리는 다음과 같습니다: 중·장기 트렌드 방향을 확인-> 강한 트렌드가 다시 시작될 기회를 기다립니다-> 진입 트렌드를 추적-> 스톱로스를 추적한다.
구체적으로, 중장기 트렌드를 판단할 때, 전두엽 구름과 후두엽 구름의 변화 관계를 통해 결정한다. 중장기 트렌드를 확인한 후, 전환선과 기준선의 교차와 가격 돌파구 그림의 신호를 통해 트렌드를 판단하기 재시작, 출장 신호를 발송한다. 출장 후 기준선을 손해 중단선으로 사용하여 손해 퇴출을 추적한다.
이런 식으로, 중·단기적인 흔들림을 필터링하면서도, 강력한 추세의 기회를 잡을 수 있고, 증권 시장에서 장기적으로 안정적인 초과 수익을 얻을 수 있다.
(a) 중·장기 추세 방향을 판단하기 위해 평형 스케일 클라우드 그래프를 사용하며 주요 방향을 파악하는 데 도움이 됩니다.
(ii) 전환선과 기준선의 교차와 가격과 클라우드 그래프의 관계 변화로 진입 시기를 판단하여, 동요를 효과적으로 필터링하여 강세를 잡을 수 있다.
(3) 대전향이익을 얻을 수 있고, 개별 손실을 효과적으로 통제할 수 있는, 손실을 막고 탈퇴하는 메커니즘을 추적하는 것
(4) 다양한 균형 스케일 클라우드 그래프 신호를 통합하여 체계적인 트렌드 추적 전략을 형성하고, 안정적으로 좋은 성능을 나타냅니다.
(a) 중·장기적으로 잘못된 판단의 체계적인 위험. 중·장기적으로 잘못된 판단이 있다면, 후속 작업은 잘못된 방향의 위험에 직면하게 될 것이다.
(二) 입국시간을 잘못 선택하면 위험하다.
(三) 추적 중지 너무 가까이에서 가져온 위험. 중지 거리가 너무 가까이 있다면, 극단적인 상황이 중단을 뚫고 손실을 초래할 수 있습니다.
(四) 거래 빈도가 너무 높은 거래 수수료 부담. 만약 변수 설정으로 인해 거래 빈도가 너무 높으면 거래 수수료도 증가한다.
(a) 서로 다른 평형 미터 주기 변수의 조합을 테스트하여 최적의 변수를 찾습니다.
(3) 위험과 이익 사이의 최적의 균형을 찾기 위해 스톱 로드 거리를 조정하는 것
(iv) 가격과 핵심 균형지표의 거리를 결합하여 수익성 가격 목표를 추가하여 동적인 수익성 메커니즘을 형성하는 것
이 평형스케일 클라우드 차트 트렌드 추적 전략은, 통합 평형스케일 클라우드 차트 여러 신호 판단 트렌드 방향, 입점 시점, 손해 퇴출. 연습은,이 전략은 효과적으로 중장기 트렌드를 잡을 수, 필터 흔들림, 안정적으로 초과 수익을 얻을 수 있음을 보여줍니다. 미래에 지속적인 최적화 테스트를 통해 전략의 성능을 더 개선하고 더 나은 수익을 얻을 수 있습니다.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Ichimoku trendfollowing", overlay=true, initial_capital=1000, commission_type=strategy.commission.cash_per_order, commission_value=0.04, slippage=2)
//***************************
// INPUT BACKTEST RANGE *
//***************************
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2010, title = "From Year", minval = 2000)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2000)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true
//***************
//* ICHIMOKU *
//***************
//inizializzazione parametri,,
tenkanPeriods = input(9, minval=1, title="Tenkan-Sen")
kinjunPeriods = input(26, minval=1, title="Kinjun-Sen")
senkouSpanBPeriods = input(52, minval=1, title="Senkou Span B")
displacement = input(26, minval=1, title="-ChinkouSpan/+SenkouSpan A")
//definizione Tenkan-Sen (9 Period), Kinjun-Sen (26 Period), Chinkou Span (Lagging Line)
averageHighLow(period) => avg(lowest(period), highest(period))
tenkan= averageHighLow(tenkanPeriods)
kinjun = averageHighLow(kinjunPeriods)
senkouSpanA = avg(tenkan, kinjun)
senkouSpanB = averageHighLow(senkouSpanBPeriods)
//definisco il colore della kumo in base al trend.
senkouSpan1Above = senkouSpanA >= senkouSpanB ? 1 : na
senkouSpan2Below = senkouSpanA <= senkouSpanB ? 1 : na
span1plotU = senkouSpan1Above ? senkouSpanA : na
span2plotU = senkouSpan1Above ? senkouSpanB : na
span1plotD = senkouSpan2Below ? senkouSpanA : na
span2plotD = senkouSpan2Below ? senkouSpanB : na
col = senkouSpanA >= senkouSpanB ? lime : red
//plots Ichimoku
plot(tenkan, title = 'Tenkan-Sen', linewidth=1, color=blue)
plot(kinjun, title = 'Kinjun-Sen', linewidth=1, color=red)
plot(close, title = 'Chinkou Span', linewidth=1, offset = -displacement, color=aqua)
plot( senkouSpanA, title = 'Senkou Span A', style=line, linewidth=1, offset = displacement, color=lime)
plot(senkouSpanB, title = 'Senkou Span B', style=line, linewidth=1, offset = displacement, color=red)
//Cloud Lines Plot
p1 = plot(span1plotU ? span1plotU : na, title = 'Senkou Span A Above Senkou Span B', style=linebr, linewidth=1, offset = displacement, color=col)
p2 = plot(span2plotU ? span2plotU : na, title = 'Senkou Span B (52 Period) Below Span A Cloud', style=linebr, linewidth=1, offset = displacement, color=col)
p3 = plot(span1plotD ? span1plotD : na, title = 'Senkou Span A (26 Period) Below Span B Cloud', style=linebr, linewidth=1, offset = displacement, color=col)
p4 = plot(span2plotD ? span2plotD : na, title = 'Senkou Span B (52 Period) Above Span A Cloud', style=linebr, linewidth=1, offset = displacement, color=col)
//Fills that color cloud based on Trend.
fill(p1, p2, color=lime, transp=70, title='Kumo (Cloud)')
fill(p3, p4, color=red, transp=70, title='Kumo (Cloud)')
//***********************************************
//* condizioni ingresso ed uscita mercato *
//***********************************************
isKumoRialzista = senkouSpanA >= senkouSpanB ? true : false
isSopraKumo = (close > max(senkouSpanA[displacement], senkouSpanB[displacement]))
isSottoKumo = (close < min(senkouSpanA[displacement], senkouSpanB[displacement]))
isChinkouSpanSopra = high[displacement]<close
isChinkouSpanSotto = low[displacement]>close
filtroLong=isSopraKumo and isChinkouSpanSopra
filtroShort=isSottoKumo and isChinkouSpanSotto
//rimbalzato su kijun quando i prezzi stavano ritracciando e il trend era già in atto(tenkan >kijun x entrare long
isPullBackLijunEntryLong = kinjun<tenkan and low<kinjun and (close>kinjun)
isPullBackLijunEntryShort =kinjun>tenkan and high>kinjun and (close<kinjun)
//Breackout Kumo
isBreackoutKumoEntryLong = crossover(close, max(senkouSpanA[displacement], senkouSpanB[displacement])) and (close>tenkan) and (close>kinjun)
isBreackoutKumoEntryShort = crossunder(close, min(senkouSpanA[displacement], senkouSpanB[displacement])) and (close<tenkan) and (close<kinjun)
ConditionEntryLong = (isPullBackLijunEntryLong or isBreackoutKumoEntryLong ) and filtroLong
ConditionEntryShort = (isPullBackLijunEntryShort or isBreackoutKumoEntryLong ) and filtroShort
isExitLong = close<kinjun
isExitShort = close>kinjun
//ingressi ed uscite Mercato
strategy.entry ("Long",long=true, when = window() and ConditionEntryLong)
strategy.entry ("Short",long=false, when = window() and ConditionEntryShort)
strategy.close(id="Long", when=isExitLong)
strategy.close(id="Short", when=isExitShort)
strategy.close_all(when=not window())