Chiến lược này xác định xu hướng thị trường bitcoin bằng cách tính toán chỉ số True Strength Index (TSI) và nhập các vị trí dài / ngắn được lọc bởi chỉ số RSI để thực hiện giao dịch thuật toán của bitcoin. Nó phù hợp với các nhà đầu tư muốn giao dịch dữ liệu tick bitcoin theo chương trình.
Cốt lõi của chiến lược này là Chỉ số Sức mạnh thực sự (TSI). TSI đo lường mức độ tuyệt đối và hướng thay đổi giá bằng cách làm bằng đôi tỷ lệ thay đổi giá phần trăm, do đó xác định sức mạnh tuyệt đối của chuyển động giá lên và xuống.
Khi TSI vượt qua đường tín hiệu tsi2, một tín hiệu dài được tạo ra. Khi TSI vượt qua dưới tsi2, một tín hiệu ngắn được tạo ra. Ngoài ra, chiến lược lọc tín hiệu TSI với RSI - chỉ lấy tín hiệu dài khi RSI trên 50 và tín hiệu ngắn khi RSI dưới 50, để tránh một số tín hiệu sai.
Những lợi thế của chiến lược này bao gồm:
Những rủi ro của chiến lược này bao gồm:
Việc phát hành chậm và hiệu ứng lọc có thể được giảm bằng cách nới lỏng các quy tắc lọc RSI và rút ngắn thời gian EMA. Chiến lược dừng lỗ thích hợp nên được sử dụng để kiểm soát chặt chẽ rủi ro trên mỗi giao dịch.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Tối ưu hóa các thông số TSI và RSI để tìm sự kết hợp tốt nhất.
Tạo thêm các chỉ số kỹ thuật để xây dựng một mô hình đa yếu tố. MA, KD vv có thể được thêm vào để tận dụng lợi thế của mỗi chỉ số.
Tối ưu hóa các quy tắc nhập cảnh để tránh dài trong xu hướng giảm và ngắn trong xu hướng tăng.
Tối ưu hóa các chiến lược dừng lỗ như dừng lỗ sau, dừng lỗ dựa trên thời gian, dừng lỗ đột phá vv
Tối ưu hóa các quy tắc thoát để tránh thoát sớm hoặc muộn Các chỉ số biến động có thể giúp xác định các điểm thoát thích hợp.
Tối ưu hóa các sản phẩm giao dịch, các phiên giao dịch để tập trung vào những sản phẩm hiệu quả nhất.
Chiến lược này xác định xu hướng ngắn hạn của bitcoin với Chỉ số Sức mạnh Thực sự và lọc tín hiệu với RSI cho giao dịch bitcoin thuật toán. Nó có lợi thế nắm bắt các xu hướng và lọc tiếng ồn một cách nhạy cảm, nhưng cũng có một số vấn đề chậm trễ và rủi ro giao dịch.
/*backtest start: 2022-09-30 00:00:00 end: 2023-10-06 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // strategy("True Strength Indicator BTCUSD 15p", shorttitle="TSI BTCUSD 15p",initial_capital=1000, commission_value=0.15, commission_type =strategy.commission.percent, default_qty_value=100 , overlay = false, pyramiding=10, default_qty_type=strategy.percent_of_equity) //BASED ON True Strength Indicator MTF resCustom = input(title="Timeframe", defval="15" ) long = input(title="Long Length", defval=25) short = input(title="Short Length", defval=13) signal = input(title="Signal Length", defval=13) price = request.security(syminfo.tickerid,resCustom,close) double_smooth(src, long, short) => fist_smooth = ta.ema(src, long) ta.ema(fist_smooth, short) pc = ta.change(price) double_smoothed_pc = double_smooth(pc, long, short) double_smoothed_abs_pc = double_smooth(math.abs(pc), long, short) tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc) tsi2=ta.ema(tsi_value, signal) plot(tsi_value, color=color.lime,linewidth=2) plot(tsi2, color=color.red,linewidth=2) rsiserie = ta.rsi(price,7) cciserie = ta.cci(price,14) stochserie = ta.stoch(price,14,3,3) plot(rsiserie,color=color.purple) hline(30, title="Zero") hline(50, title="Zero",linestyle=hline.style_solid, linewidth=2) hline(70, title="Zero") buy = ta.crossover(tsi_value, tsi2) //and rsiserie[1]<25 //and cciserie<-100 and stochserie<20 sell = ta.crossunder(tsi_value, tsi2) //and rsiserie[1]>85 //and cciserie>100 and stochserie>80 alertcondition(buy, title='TSI system', message='Buy signal at!' ) alertcondition(sell, title='TSI system', message='Sell signal at!' ) strategy.entry("BUY", strategy.long, 1, when = buy) strategy.entry("SELL", strategy.short, 1, when = sell ) greentsi =tsi_value redtsi = tsi2 bgcolor( greentsi>redtsi and rsiserie > 50 ? color.lime : na, transp=90) bgcolor( greentsi<redtsi and rsiserie < 50 ? color.red : na, transp=90) yellow1= redtsi > greentsi and rsiserie > 50 yellow2 = redtsi < greentsi and rsiserie < 50 bgcolor( yellow1 ? yellow : na, transp=80) bgcolor( yellow2 ? yellow : na, transp=50) bgcolor( yellow1 and yellow1[1] ? yellow : na, transp=70) bgcolor( yellow2 and yellow2[2] ? yellow : na, transp=70) bgcolor( rsiserie > 70 ? color.lime : na, transp=60) bgcolor( rsiserie < 30 ? color.red : na, transp=60)