Ichimoku Cloud Trend Mengikuti Strategi

Penulis:ChaoZhang, Tarikh: 2024-02-01 11:34:23
Tag:

img

I. Nama Strategi: Ichimoku Cloud Trend Mengikut Strategi

II. Ringkasan Strategi

Strategi ini menggunakan beberapa isyarat Ichimoku Cloud untuk merancang strategi trend murni yang bertujuan untuk menangkap trend jangka menengah hingga panjang, menapis penyatuan, dan mengikuti arah trend yang kuat.

III. Prinsip Strategi

Strategi ini terutamanya menggunakan Tenkan-sen, Kijun-sen, Chikou Span dan penunjuk utama lain dari Awan Ichimoku. Untuk menilai trend jangka panjang, ia memberi tumpuan kepada hubungan antara Span terkemuka dan tertinggal; untuk masa masuk dan keluar tertentu, ia melihat silang Tenkan-sen dan Kijun-sen dan perubahan hubungan harga dengan Awan.

Ringkasnya, logik teras adalah: mengesahkan trend jangka menengah -> menunggu isyarat pemulihan trend yang kuat -> masuk untuk mengikuti trend -> keluar dengan stop loss.

Khususnya, untuk menentukan trend jangka menengah dan panjang, ia menggunakan hubungan antara Span terkemuka dan tertinggal (di atas Span hijau terkemuka yang menandakan trend menaik dan sebaliknya).

Ini menapis penyatuan jangka pendek hingga pertengahan dan membolehkan menangkap trend yang kuat untuk prestasi yang lebih baik di pasaran.

IV. Kelebihan

(1) Menggunakan Awan Ichimoku untuk menentukan arah trend jangka menengah dan panjang adalah bermanfaat untuk mencari tepi arah utama.

(2) Penyambungan silang Tenkan-sen/Kijun-sen dan perubahan hubungan harga dengan Awan membolehkan penapisan penyatuan yang berkesan dan menangkap trend yang kuat pada peringkat awal.

(3) Mekanisme keluar stop loss trailing membolehkan menunggang trend besar sambil juga mengawal kerugian yang terpencil dengan berkesan.

(4) Menggabungkan pelbagai isyarat Ichimoku mewujudkan sistem yang kukuh mengikuti trend dengan lancar.

V. Risiko

(1) Risiko sistemik salah mengenal pasti trend yang lebih besar. Jika trend yang lebih besar didiagnosis dengan salah, semua tindakan berikutnya akan membawa risiko arah yang salah.

(2) Risiko daripada masa kemasukan yang tidak dipilih dengan baik.

(3) Risiko daripada berhenti yang diletakkan terlalu ketat. Pergerakan harga yang melampau boleh mengambil berhenti yang terlalu ketat yang mengakibatkan kerugian yang tidak dirancang.

(4) Frekuensi perdagangan yang tinggi yang membawa kepada kos transaksi yang berlebihan.

VI. Kawasan Peningkatan

(1) Uji gabungan yang berbeza tempoh input Ichimoku untuk mencari parameter optimum.

(2) Mengoptimumkan penapis kemasukan untuk memastikan kemasukan berkualiti tinggi.

(3) Sesuaikan jarak berhenti untuk mengimbangi risiko-ganjaran.

(4) Tambah tahap sasaran keuntungan berdasarkan jarak penunjuk kunci harga untuk mewujudkan mekanisme pengambilan keuntungan adaptif.

VII. Kesimpulan

Ini Ichimoku Cloud trend mengikuti strategi mensintesis beberapa isyarat Ichimoku untuk mendiagnosis trend, entri masa, dan jejak berhenti. amalan menunjukkan ia boleh dengan berkesan menangkap trend pertengahan jangka panjang, menapis penyatuan dan mencapai prestasi yang konsisten. pengoptimuman masa depan dan ujian boleh meningkatkan prestasi untuk pulangan yang lebih baik.


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


Lebih lanjut