
Chiến lược này có tên làChiến lược chỉ số TSIÝ tưởng cốt lõi của chiến lược này là sử dụng hai cửa sổ trượt EMA để làm phẳng sự thay đổi giá, sau đó kết hợp với sự thay đổi hướng của xu hướng, xây dựng một chỉ số động lực phản ánh sức mạnh mua và bán của thị trường, tức là chỉ số TSI, và sử dụng nó làm tín hiệu giao dịch để đưa ra quyết định mua và bán.
Chiến lược này sử dụng hai cửa sổ trượt hai chỉ số di chuyển trung bình để tính toán biến động giá. Các cửa sổ bên ngoài có thời gian dài và cửa sổ bên trong có thời gian ngắn.
Đầu tiên, tính toán thay đổi đơn vị của giá:
pc = change(price)
Sau đó, sử dụng cửa sổ trượt kép để làm trơn trượt hai lần so với sự thay đổi giá:
double_smoothed_pc = double_smooth(pc, long, short)
Tính toán lại giá trị tuyệt đối của biến động giá, cũng sử dụng cửa sổ trượt đôi để làm mịn đôi:
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
Cuối cùng, sử dụng biến động giá sau khi làm mịn chia cho giá trị tuyệt đối của biến động giá sau khi làm mịn để có được chỉ số TSI phản ánh sức mua và bán:
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
Bằng cách thiết lập các khoảng thời gian cửa sổ ngắn với độ dài khác nhau, bạn có thể lọc ra một phần tiếng ồn thị trường ngắn hạn, để chỉ số TSI phản ánh tốt hơn sức mạnh mua và bán trong xu hướng trung và dài hạn. Nó tạo ra tín hiệu mua khi đi qua đường trung bình di chuyển của nó trên chỉ số TSI; nó tạo ra tín hiệu bán khi đi qua đường trung bình di chuyển của nó dưới chỉ số TSI.
Có thể tối ưu hóa bằng cách điều chỉnh các tham số thời gian cửa sổ, giảm chiều dài tín hiệu trung bình thích hợp; khi thị trường bị dao động, giao dịch có thể tạm dừng để kiểm soát rủi ro.
Chiến lược này dựa trên sự thay đổi của giá dựa trên tính toán trơn kép TSI động lực phản ánh sức mạnh mua bán, hai cửa sổ trượt lọc tiếng ồn, thay đổi của giá thay đổi cũng làm cho trơn kép, chỉ số ổn định hơn đáng tin cậy; sử dụng tỷ lệ tiêu chuẩn hóa, có thể so sánh; chỉ số tổng hợp hướng và cường độ của sự thay đổi giá, như là một tín hiệu chất lượng cao; thông qua điều chỉnh tham số có thể tự do kiểm soát độ nhạy của chỉ số. Trong trường hợp tham số tối ưu hóa và rủi ro đến mức kiểm soát, là rất thực tế lựa chọn chiến lược giao dịch định lượng.
/*backtest
start: 2023-01-01 00:00:00
end: 2024-01-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("True Strength Indicator BTCUSD 2H", shorttitle="TSI BTCUSD 2H",initial_capital=1000, commission_value=0.2, 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="120" )
long = input(title="Long Length", defval=25)
short = input(title="Short Length", defval=13)
signal = input(title="Signal Length", defval=13)
length = input(title="Период", defval=300)
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 = 2017, title = "From Year", minval = 2017)
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 = 2017)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true // create function "within window of time"
price = request.security(syminfo.tickerid,resCustom,close)
double_smooth(src, long, short) =>
fist_smooth = ema(src, long)
ema(fist_smooth, short)
pc = change(price)
double_smoothed_pc = double_smooth(pc, long, short)
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
tsi2=ema(tsi_value, signal)
plot(tsi_value, color=lime,linewidth=2)
plot(tsi2, color=red,linewidth=2)
hline(30, title="Zero")
hline(50, title="Zero",linewidth=2)
hline(70, title="Zero")
buy = crossover(tsi_value, tsi2)
sell = crossunder(tsi_value, tsi2)
if(buy)
strategy.entry("BUY", strategy.long, when = window())
if(sell)
strategy.entry("SELL", strategy.short, when = window())
//greentsi =tsi_value
//redtsi = tsi2
//bgcolor( greentsi>redtsi and rsiserie > 50 ? lime : na, transp=90)
//bgcolor( greentsi<redtsi and rsiserie < 50 ? 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 ? lime : na, transp=60)
//bgcolor( rsiserie < 30 ? red : na, transp=60)