Ichimoku Cloud Trend theo chiến lược

Tác giả:ChaoZhang, Ngày: 2024-02-01 11:34:23
Tags:

img

I. Tên chiến lược: Ichimoku Cloud Trend Following Strategy

II. Tổng quan chiến lược

Chiến lược này sử dụng nhiều tín hiệu đám mây Ichimoku để thiết kế một chiến lược theo xu hướng thuần túy nhằm mục đích nắm bắt xu hướng trung và dài hạn, lọc ra sự hợp nhất và theo hướng xu hướng mạnh.

III. Nguyên tắc chiến lược

Chiến lược này chủ yếu sử dụng Tenkan-sen, Kijun-sen, Chikou Span và các chỉ số chính khác từ đám mây Ichimoku.

Tóm lại, logic cốt lõi là: xác nhận xu hướng trung dài hạn -> chờ các tín hiệu tiếp tục xu hướng mạnh -> nhập để theo xu hướng -> thoát với lệnh dừng lỗ.

Cụ thể, để xác định xu hướng trung dài hạn, nó sử dụng mối quan hệ giữa Span dẫn đầu và tụt hậu (trên Span dẫn đầu màu xanh lá cây báo hiệu xu hướng tăng và ngược lại). Sau khi xác nhận xu hướng lớn hơn, giao thoa giữa Tenkan-sen và Kijun-sen cùng với các tín hiệu đột phá giá được sử dụng để xác định sự nối lại xu hướng; sau khi vào, Kijun-sen được sử dụng như là dừng lỗ để ra khỏi.

Điều này lọc ra các sự củng cố ngắn hạn đến trung hạn và cho phép nắm bắt các xu hướng mạnh mẽ cho hiệu suất vượt trội nhất quán trên thị trường.

IV. Lợi thế

(1) Sử dụng đám mây Ichimoku để xác định hướng xu hướng trung dài là có lợi cho việc định vị các cạnh hướng chính.

(2) Sự chéo giữa Tenkan-sen/Kijun-sen và thay đổi mối quan hệ giá với đám mây cho phép lọc hiệu quả các sự hợp nhất và bắt kịp xu hướng mạnh mẽ.

(3) Cơ chế dừng lỗ cuối cùng cho phép lái xe xu hướng lớn trong khi cũng kiểm soát các tổn thất cô lập một cách hiệu quả.

(4) Kết hợp các tín hiệu Ichimoku khác nhau tạo ra một hệ thống mạnh mẽ theo xu hướng trơn tru.

V. Rủi ro

(1) Rủi ro hệ thống của việc xác định sai xu hướng lớn hơn Nếu xu hướng lớn hơn được chẩn đoán sai, tất cả các hành động tiếp theo sẽ mang lại rủi ro sai hướng.

(2) Rủi ro từ thời gian nhập cảnh không được lựa chọn đúng.

(3) Rủi ro từ các điểm dừng được đặt quá chặt chẽ.

(4) Tần suất giao dịch cao dẫn đến chi phí giao dịch quá cao.

VI. Khu vực tăng cường

(1) Kiểm tra các kết hợp khác nhau của các khoảng thời gian đầu vào Ichimoku để tìm các thông số tối ưu.

(2) Tối ưu hóa các bộ lọc nhập để đảm bảo nhập chất lượng cao.

(3) Điều chỉnh khoảng cách dừng để cân bằng rủi ro-lợi ích.

(4) Thêm các mức mục tiêu lợi nhuận dựa trên khoảng cách giữa các chỉ số giá-chìa khóa để tạo ra các cơ chế thu lợi nhuận thích nghi.

VII. Kết luận

Chiến lược theo xu hướng của Ichimoku Cloud này tổng hợp nhiều tín hiệu Ichimoku để chẩn đoán xu hướng, thời gian nhập và dừng theo dõi. Thực hành cho thấy nó có thể nắm bắt hiệu quả các xu hướng trung dài hạn, lọc các sự hợp nhất và đạt được hiệu suất vượt trội nhất quán. Tối ưu hóa và thử nghiệm trong tương lai có thể cải thiện hơn nữa hiệu suất để có lợi nhuận vượt trội.


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


Thêm nữa