이치모쿠 클라우드 트렌드 전략

저자:차오장, 날짜: 2024-02-01 11:34:23
태그:

img

I. 전략 이름: 이치모쿠 클라우드 트렌드 다음 전략

전략 개요

이 전략은 여러 Ichimoku Cloud 신호를 활용하여 중장기 트렌드를 포착하고 통합을 필터링하고 강력한 트렌드 방향을 따르는 순수한 트렌드 다음 전략을 설계합니다.

III. 전략 원칙

이 전략은 주로 이치모쿠 클라우드의 텐칸센, 키준센, 치코 스판 및 기타 주요 지표를 사용합니다. 장기적인 트렌드를 판단하기 위해 선두와 뒤떨어진 스판 사이의 관계에 초점을 맞추고 있으며, 특정 입출 시점에서는 텐칸센과 키준센의 크로스오버와 클라우드와 가격 관계 변화에 초점을 맞추고 있습니다.

요약하자면 핵심 논리는: 중장기 트렌드를 확인 -> 강한 트렌드 재개 신호를 기다립니다 -> 트렌드를 따르기 위해 입력 -> 트레일링 스톱 로스로 출입합니다.

특히, 중장기 트렌드를 결정하기 위해 선두와 후진 스판 사이의 관계를 사용합니다. 더 큰 트렌드를 확인한 후, 텐칸 센과 키준 센 사이의 크로스오버와 가격 브레이크 아웃 신호가 트렌드 재개를 식별하는 데 사용됩니다. 진입 후, 키준 센은 출구에 대한 후속 스톱 로스로 사용됩니다.

이것은 단기와 중장기 통합을 필터링하고 시장에서 일관성 있는 우수한 성과를 위해 강한 추세를 포착 할 수 있습니다.

IV. 장점

(1) 중장기 트렌드 방향을 결정하기 위해 이치모쿠 클라우드를 사용하는 것은 주요 방향 가장자리를 찾는 데 유용합니다.

(2) 텐칸센/키준센 크로스오버와 클라우드와의 가격 관계 변화로 통합을 효과적으로 필터링하고 강력한 추세를 조기에 파악할 수 있습니다.

(3) 후속 스톱 손실 출구 메커니즘은 큰 추세를 타고 동시에 고립 손실을 효과적으로 제어 할 수 있습니다.

(4) 다양한 이치모쿠 신호를 결합하면 견고한 시스템을 만들어 트렌드를 원활하게 따라갑니다.

V. 위험

(1) 더 큰 트렌드를 잘못 파악할 수 있는 체계적 위험. 더 큰 트렌드가 잘못 진단되면, 모든 후속 행동은 잘못된 방향의 위험을 초래할 것이다.

(2) 잘못된 입시 타이밍의 위험. 부적절한 입시 타이밍은 불리한 가격 위프스를 위험에 빠뜨립니다.

(3) 너무 단단하게 배치 된 스톱 으로 인한 위험. 극단적 인 가격 움직임은 계획되지 않은 손실로 이어지는 너무 단단한 스톱을 제거 할 수 있습니다.

(4) 과도한 거래 비용을 초래하는 높은 거래 빈도. 매개 변수 조정이 잘못되면 과도한 거래 빈도와 비용이 발생할 수 있습니다.

VI. 증진 지역

(1) 최적의 매개 변수를 찾기 위해 Ichimoku 입력 기간의 다양한 조합을 테스트합니다.

(2) 높은 품질의 항목을 보장하기 위해 입력 필터를 최적화하십시오.

(3) 위험과 보상 균형을 맞추기 위해 정지 거리를 조정합니다.

(4) 가격 키 지표 거리를 기반으로 수익 목표 수준을 추가하여 적응적인 수익 취득 메커니즘을 만듭니다.

결론

이 이치모쿠 클라우드 트렌드 추후 전략은 트렌드, 시간 입력 및 트레일 정지를 진단하기 위해 여러 이치모쿠 신호를 합성합니다. 실습은 중장기 트렌드를 효과적으로 캡처하고 통합을 필터링하여 일관성있는 초과 성능을 달성 할 수 있음을 보여줍니다. 미래의 최적화와 테스트는 뛰어난 수익을 위해 성능을 더욱 향상시킬 수 있습니다.


/*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())


더 많은