
Chiến lược này sử dụng nhiều tín hiệu được cung cấp bởi chỉ số Equilibrium Scale Cloud Graph và thiết kế một chiến lược theo dõi xu hướng thuần túy, nhằm mục đích nắm bắt xu hướng trung hạn và dài hạn, lọc sự biến động và theo dõi hướng của xu hướng mạnh.
Chiến lược này sử dụng các tín hiệu chính như đường chuyển đổi, đường chuẩn và đường chậm trễ trong chỉ số biểu đồ đám mây cân bằng. Trong phán đoán xu hướng dài hạn, tập trung vào mối quan hệ thay đổi lên xuống của đám mây trước và đám mây sau để đánh giá xu hướng; Trong lựa chọn thời gian nhập cảnh và xuất cảnh cụ thể, giao thoa của đường chuyển đổi và đường chuẩn và sự thay đổi của mối quan hệ giá với biểu đồ đám mây là cơ sở chính.
Nhìn chung, logic cốt lõi của chiến lược này là: xác định hướng xu hướng trung và dài hạn - > chờ cơ hội cho xu hướng mạnh khởi động lại - > theo dõi xu hướng vào - > theo dõi xu hướng thoát lỗ.
Cụ thể, khi đánh giá xu hướng trung và dài hạn, xác định mối quan hệ thay đổi giữa đám mây phía trước và đám mây phía sau (nếu đám mây phía trước ở trên và màu xanh lá cây, đại diện cho xu hướng tăng, ngược lại đại diện cho xu hướng giảm). Khi xác nhận xu hướng trung và dài hạn, đánh giá xu hướng bằng cách chuyển đổi đường và đường viền giao dịch và tín hiệu phá vỡ đám mây của giá.
Do đó, các nhà đầu tư có thể lọc các biến động ngắn hạn và trung bình, và nắm bắt các cơ hội của xu hướng mạnh mẽ để có được lợi nhuận vượt trội trong thị trường chứng khoán trong thời gian dài.
(a) Sử dụng biểu đồ đám mây cân bằng để xác định xu hướng trung và dài hạn, có lợi cho định vị các hướng chính
(ii) Chuyển đổi đường và đường chuẩn giao nhau và thay đổi giá cả với mô hình đám mây để xác định thời gian nhập cảnh, có thể lọc hiệu quả các biến động và nắm bắt xu hướng mạnh
(iii) Theo dõi các cơ chế dừng lỗ, có thể đạt được lợi nhuận theo xu hướng lớn và kiểm soát hiệu quả các tổn thất cá nhân
(IV) tổng hợp nhiều tín hiệu hình ảnh đám mây cân bằng, hình thành chiến lược theo dõi xu hướng có hệ thống, hoạt động ổn định
(a) Rủi ro hệ thống của sai lầm đánh giá trong trung và dài hạn. Nếu sai lầm đánh giá xu hướng trung và dài hạn, thì các hoạt động tiếp theo sẽ phải đối mặt với nguy cơ sai hướng.
(ii) Rủi ro do lựa chọn thời gian nhập cảnh không đúng. Nếu lựa chọn thời gian nhập cảnh không đúng, dễ bị lừa.
(III) Theo dõi các rủi ro gây ra bởi dừng quá gần. Nếu dừng quá gần, các trường hợp cực đoan có thể bị phá vỡ và gây thiệt hại.
(D) Gánh nặng phí giao dịch do tần số giao dịch quá cao. Nếu thiết lập tham số không phù hợp khiến tần số giao dịch quá cao, phí giao dịch cũng sẽ tăng lên.
(a) Kiểm tra các kết hợp của các tham số khác nhau của chu kỳ cân bằng để tìm tham số tối ưu
(ii) Tối ưu hóa điều kiện nhập cảnh, thiết kế bộ lọc nghiêm ngặt hơn, đảm bảo nhập cảnh hiệu quả
(III) Điều chỉnh khoảng cách dừng lỗ để tìm sự cân bằng tối ưu giữa rủi ro và lợi nhuận
(iv) Thêm mục tiêu giá lợi nhuận, kết hợp giá với khoảng cách của các chỉ số cân bằng quan trọng, tạo ra cơ chế lợi nhuận động
Chiến lược theo dõi xu hướng của biểu đồ đám mây cân bằng này, kết hợp nhiều tín hiệu để xác định hướng xu hướng, thời gian nhập cảnh và dừng lỗ. Thực tế cho thấy chiến lược này có thể nắm bắt hiệu quả xu hướng trung và dài hạn, lọc rung động và ổn định để có được lợi nhuận dư thừa. Trong tương lai, thông qua thử nghiệm tối ưu hóa liên tục, hy vọng sẽ cải thiện hơn nữa hiệu suất của chiến lược và nhận được lợi nhuận tốt hơn.
/*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())