Chỉ báo TSI cửa sổ trượt đôi Momentum


Ngày tạo: 2024-01-08 11:20:35 sửa đổi lần cuối: 2024-01-08 11:20:35
sao chép: 1 Số nhấp chuột: 654
1
tập trung vào
1617
Người theo dõi

Chỉ báo TSI cửa sổ trượt đôi Momentum

1. Ghi chú về chiến lược

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.

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

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.

Ba, lợi thế chiến lược.

  1. Sử dụng cửa sổ trượt kép để lọc hiệu quả tiếng ồn thị trường ngắn hạn, giúp chỉ số phản ứng chính xác hơn
  2. Tính toán thay đổi giá cả cũng được làm bằng phẳng kép, làm cho chỉ số TSI ổn định và đáng tin cậy hơn
  3. Sử dụng tỷ lệ biến động giá với giá trị tuyệt đối của biến động giá, tiêu chuẩn hóa tự động, so sánh tốt hơn
  4. Cân nhắc tổng thể về hướng và cường độ biến động giá như một chỉ số chất lượng cho các quyết định giao dịch
  5. Cài đặt các tham số khác nhau có thể điều chỉnh độ nhạy của chỉ số theo nhu cầu

Bốn, rủi ro chiến lược

  1. Chỉ số TSI có thể phát ra tín hiệu sai khi thị trường bị chấn động lâu dài
  2. Thiết lập tham số không đúng cách cũng ảnh hưởng đến chất lượng của chỉ số và tín hiệu
  3. Mặc dù có hai cửa sổ trượt, chỉ số vẫn có một mức độ nhạy cảm với tiếng ồn thị trường ngắn hạn
  4. Các chỉ số và tín hiệu có thể bị chậm trễ khi có khoảng cách quá lớn trong các cửa sổ dài hoặc ngắn

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.

V. Định hướng tối ưu hóa

  1. Kiểm tra các kết hợp tham số khác nhau trong thời gian cửa sổ dài hoặc ngắn để tìm tham số tối ưu
  2. Hãy thử các loại trung bình di chuyển khác, ví dụ như trung bình di chuyển cân nặng tuyến tính.
  3. Tăng độ mịn của chỉ số, xây dựng cửa sổ trượt ba hoặc nhiều
  4. Kết hợp với các chỉ số hỗ trợ khác để tối ưu hóa lựa chọn điểm mua và bán
  5. Thiết lập chiến lược dừng lỗ, kiểm soát chặt chẽ lỗ đơn

VI. Kết luận

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.

Mã nguồn chiến lược
/*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)