Chiến lược giao dịch BTC dựa trên Ichimoku Kinko Hyo

Tác giả:ChaoZhang, Ngày: 2023-12-20 13:34:08
Tags:

img

Tổng quan

Chiến lược này được gọi là Ichimoku Kinko Hyo Strategy. Đây là một chiến lược giao dịch BTC dựa trên hệ thống Ichimoku Kinko Hyo kết hợp với các chỉ số kỹ thuật khác.

Chiến lược logic

Chiến lược này chủ yếu dựa trên hệ thống Ichimoku Kinko Hyo, kết hợp nhiều chỉ số kỹ thuật cho giao dịch xu hướng. Các thành phần chính là:

Kijun Sen: đại diện cho hướng xu hướng thị trường. Đây là điểm trung bình của giá cao nhất và thấp nhất trong 26 ngày qua, hoạt động như đường hỗ trợ và kháng cự. Các tín hiệu mua và bán được tạo ra khi giá đóng vượt qua Kijun Sen.

Tenkan Sen: đại diện cho đà tăng của giá. Đó là điểm trung bình của giá cao nhất và thấp nhất trong 9 ngày qua, giúp xác định điểm vào và ra tốt nhất.

Senkou Span A: đại diện cho đường trung hạn của Ichimoku. Đó là mức trung bình của Kijun Sen và Tenkan Sen, hoạt động như đường cảnh báo của Ichimoku.

Senkou Span B: đại diện cho đường xu hướng dài hạn. Nó là điểm trung tâm của 52 ngày qua.

Ngoài ra, chiến lược cũng kết hợp chỉ số RSI để tạo ra các tín hiệu giao dịch trong các khu vực mua quá mức và bán quá mức.

Các tín hiệu mua được tạo ra khi giá đóng phá vỡ trên Kijun Sen và đặt trên đám mây. Các tín hiệu bán được tạo ra khi giá đóng phá vỡ dưới Kijun Sen và đặt dưới đám mây.

Ưu điểm

  1. Hệ thống Ichimoku xác định chính xác xu hướng với tỷ lệ thắng tương đối cao.

  2. Việc kết hợp nhiều chỉ số tránh bỏ lỡ cơ hội.

  3. RSI xác định hiệu quả các điểm đảo ngược.

  4. Mây trực quan trình bày xu hướng dài hạn và ngắn hạn.

Phân tích rủi ro

  1. Hệ thống Ichimoku có một sự chậm trễ, cần kết hợp các chỉ số khác.

  2. Hoạt động rất tốt trong các thị trường xu hướng nhưng khiêm tốn trong các thị trường khác nhau.

  3. Các thông số RSI cần điều chỉnh dựa trên thị trường.

  4. Việc xây dựng đám mây rất phức tạp đòi hỏi phải có sự thao túng kỹ năng.

Các thông số của Ichimoku có thể được tối ưu hóa hoặc thêm các chỉ số.

Hướng dẫn tối ưu hóa

  1. Tối ưu hóa các thông số của Ichimoku để xác định xu hướng nhanh hơn.

  2. Thêm thêm các chỉ số như trung bình động để cải thiện độ chính xác tín hiệu.

  3. Điều chỉnh tham số RSI dựa trên các thị trường khác nhau.

  4. Xem xét thêm các cơ chế dừng lỗ để kiểm soát rủi ro.

Kết luận

Ichimoku kết hợp với các chỉ số như RSI có độ chính xác cao trong việc nắm bắt xu hướng tăng. Sự chậm trễ của Ichimoku và không thích nghi trong các thị trường dao động là những rủi ro lớn.


/*backtest
start: 2022-12-13 00:00:00
end: 2023-12-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("My Ichimoku Strat v2", overlay=true,default_qty_type=strategy.fixed, default_qty_value=1, initial_capital=1000, currency=currency.EUR,commission_type=strategy.commission.percent,commission_value=0.05)
// === BACKTEST RANGE ===
FromMonth = input(defval = 3, title = "From Month", minval = 1)
FromDay   = input(defval = 1, title = "From Day", minval = 1)
FromYear  = input(defval = 2018, title = "From Year", minval = 2014)
ToMonth   = input(defval = 1, title = "To Month", minval = 1)
ToDay     = input(defval = 1, title = "To Day", minval = 1)
ToYear    = input(defval = 9999, title = "To Year", minval = 2014)

// === SERIES SETUP ===



//**** Inputs *******
KijunSenLag = input(6,title="KijunSen Lag",minval=1)

//Kijun-sen
//Support resistance line, buy signal when price crosses it
KijunSen = sma((high+low)/2,26)
buy2 = crossover(close,KijunSen) and (rising(KijunSen,KijunSenLag) or falling(KijunSen,KijunSenLag))
sell2= crossunder(close,KijunSen) and (rising(KijunSen,KijunSenLag) or falling(KijunSen,KijunSenLag))


//Tenkan-Sen
TenkanSen = sma((high+low)/2,9)

//Senkou Span A 
SenkouSpanA = (KijunSen + TenkanSen)/2

//Senkou Span B 
SenkouSpanB = sma((high+low)/2,52)

//Cloud conditions : ignore buy if price is under the cloud
// Huge cloud means safe support and resistance. Little cloud means danger.
buy3 = close > SenkouSpanA and close > SenkouSpanB
sell3 = close < SenkouSpanA and close < SenkouSpanB


//Chikou Span
//Buy signal : crossover(ChikouSpan,close)
//Sell Signal : crossunder(ChikouSpan,close)
ChikouSpan = close
buy1=crossover(ChikouSpan,close[26])
sell1=crossunder(ChikouSpan,close[26])

plotshape(buy1,style=shape.diamond,color=lime,size=size.small)
plotshape(sell1,style=shape.diamond,color=orange,size=size.small)

//Alerts

buyCompteur = -1
buyCompteur := nz(buyCompteur[1],-1)
buyCompteur := buy2 or buy3 ? 1 : buyCompteur
buyCompteur := buyCompteur > 0 ? buyCompteur + 1 : buyCompteur
buyCompteur := sell2 or sell3 ? -1 : buyCompteur

sellCompteur = -1
sellCompteur := nz(sellCompteur[1],-1)
sellCompteur := sell2 or sell3 ? 1 : sellCompteur
sellCompteur := sellCompteur > 0 ? sellCompteur + 1 : sellCompteur
sellCompteur := buy2 or buy3 ? -1 : sellCompteur



//RSI
src = close, len = input(14, minval=1, title="RSI Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
buyRSI = crossover(rsi,40) and close > TenkanSen and rsi[5]<30 and (rsi-rsi[1])>5
sellRSI = crossunder(rsi,60) and close < TenkanSen and rsi[5]>70 and (rsi[1]-rsi)>5
plotshape(buyRSI,style=shape.triangleup,color=lime,transp=0,location=location.belowbar,size=size.small)

sell= sell2 and sell3 or (sell1 and buyCompteur <= 8) or sellRSI
buy=buy2 and buy3 or (buy1 and sellCompteur <=8) or buyRSI
plotchar(buy,char='B',size=size.small,color=lime) 
plotchar(sell,char='S',size=size.small,color=orange)


//plots
plot(KijunSen,title="Kijun-Sen",color=blue,linewidth=4)
plot(TenkanSen,title="Tenkan-Sen",color=red,linewidth=2)
cloudA = plot(SenkouSpanA,title="cloud A", color=lime,offset=26,linewidth=2)
cloudB = plot(SenkouSpanB,title="cloud B", color=orange,offset=26,linewidth=2)
plot(ChikouSpan,title="lag span",color=fuchsia, linewidth=2,offset=-26)
//plot()
fill(cloudA,cloudB,color=SenkouSpanA>SenkouSpanB?lime:orange)
//plot(close,color=silver,linewidth=4)

// === ALERTS ===
strategy.entry("L", strategy.long, when=(buy and (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))))
strategy.close("L", when=(sell and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))))

Thêm nữa