Chỉ số TSI cửa sổ chuyển động hai bước

Tác giả:ChaoZhang, Ngày: 2024-01-08 11:20:35
Tags:

img

I. Tổng quan chiến lược

Chiến lược này được gọi làChiến lược chỉ số của TSI cửa sổ chuyển động hai bướcÝ tưởng cốt lõi của chiến lược này là sử dụng cửa sổ trượt EMA kép để làm trơn tru biến động giá, và sau đó kết hợp các thay đổi theo hướng của xu hướng để xây dựng một chỉ số động lực phản ánh sức mua và bán trên thị trường, cụ thể là chỉ số TSI, và sử dụng nó như một tín hiệu giao dịch để đưa ra quyết định mua và bán.

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

Chiến lược này sử dụng cửa sổ trượt kép (double sliding window) để tính toán thay đổi giá. Thời gian cửa sổ bên ngoài dài hơn và thời gian cửa sổ bên trong ngắn hơn.

Đầu tiên tính toán sự thay đổi đơn vị trong giá:

pc = change(price)

Sau đó sử dụng cửa sổ trượt kép để làm mịn đôi các thay đổi giá:

double_smoothed_pc = double_smooth(pc, long, short)

Sau đó tính giá trị tuyệt đối của sự thay đổi giá, cũng được làm bằng cách sử dụng hai cửa sổ trượt:

double_smoothed_abs_pc = double_smooth(abs(pc), long, short)

Cuối cùng, sử dụng thay đổi giá trơn bằng chia cho thay đổi giá tuyệt đối trơn bằng để 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ổ dài và ngắn khác nhau, tiếng ồn thị trường trong ngắn hạn có thể được lọc ra một phần, do đó chỉ số TSI có thể phản ánh tốt hơn sức mua và bán trong xu hướng trung bình và dài hạn. Khi chỉ số TSI vượt quá đường trung bình động của nó, một tín hiệu mua được tạo ra; Khi chỉ số TSI giảm xuống dưới đường trung bình động của nó, một tín hiệu bán được tạo ra.

III. Lợi thế chiến lược

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

IV. Rủi ro chiến lược

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

Nó có thể được tối ưu hóa bằng cách điều chỉnh các tham số thời gian cửa sổ và rút ngắn chiều dài trung bình động của tín hiệu một cách thích hợp.

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

  1. Kết hợp thử nghiệm các thông số thời gian cửa sổ dài và ngắn khác nhau để tìm các thông số tối ưu
  2. Cố gắng các loại trung bình di chuyển khác, chẳng hạn như Đường trung bình di chuyển cân nhắc tuyến tính
  3. Tăng độ trơn tru của các chỉ số bằng cách xây dựng cửa sổ trượt ba hoặc nhiều
  4. Kết hợp các chỉ số phụ trợ khác để tối ưu hóa lựa chọn điểm mua / bán
  5. Thiết lập các chiến lược dừng lỗ để kiểm soát chặt chẽ lỗ đơn

VI. Tóm lại

Khả năng điều chỉnh các thông số giao dịch thông qua các công cụ giao dịch thông qua các cửa sổ trượt kép lọc tiếng ồn. Khả năng điều chỉnh hai lần các biến đổi giá cũng làm cho chỉ số ổn định và đáng tin cậy hơn. Tỷ lệ tiêu chuẩn hóa làm cho nó có thể so sánh được. Chỉ số kết hợp hướng và cường độ của các thay đổi giá như một nguồn tín hiệu chất lượng cao. Thông qua điều chỉnh tham số, độ nhạy của chỉ số có thể được kiểm soát tự do. Với tối ưu hóa tham số và kiểm soát rủi ro, nó là một lựa chọn chiến lược giao dịch định lượng rất thực tế.


/*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)

Thêm nữa