Chiến lược chỉ số đảo ngược định lượng tích hợp các tín hiệu xu hướng kép

Tác giả:ChaoZhang, Ngày: 2023-12-26 15:47:36
Tags:

img

Tổng quan

Chiến lược này được đặt tên là Quantitative Reversal Index Strategy Integrating Dual Trend Signals. Nó tích hợp các tín hiệu từ hai chiến lược khác nhau - một tín hiệu đảo ngược ngắn hạn dựa trên chỉ số Stochastic và một tín hiệu xu hướng dài hạn dựa trên khối lượng, kết hợp chúng thành một tín hiệu nhập cảnh ổn định.

Nguyên tắc

Chiến lược bao gồm hai phần. Phần đầu tiên sử dụng Stoch 9 ngày để tạo ra các tín hiệu đảo ngược ngắn hạn. Cụ thể, nó đi dài khi mức đóng cao hơn mức đóng trước và đường nhanh Stoch 9 ngày dưới 50 trong khi đường chậm trên 50; nó đi ngắn khi mức đóng thấp hơn mức đóng trước và đường nhanh Stoch 9 ngày trên 50 trong khi đường chậm dưới 50.

Phần thứ hai sử dụng chỉ số khối lượng âm (NVI) để tạo ra tín hiệu xu hướng dài hạn. Công thức tính toán NVI là nếu khối lượng của ngày nhỏ hơn ngày trước, tỷ lệ thay đổi giá đóng cửa của ngày được tích lũy; nếu khối lượng của ngày lớn hơn hoặc bằng ngày trước, giá trị của ngày trước vẫn không thay đổi.

Cuối cùng, chiến lược kết hợp hai loại tín hiệu. Chỉ khi tín hiệu đảo ngược ngắn hạn và tín hiệu xu hướng dài hạn ở cùng một hướng, một tín hiệu đầu vào sẽ được hình thành. Điều này giúp lọc ra các tín hiệu sai và tăng tính ổn định.

Phân tích lợi thế

Lợi thế lớn nhất của chiến lược này là sự ổn định của các tín hiệu. Tín hiệu đảo ngược ngắn hạn nắm bắt các điều chỉnh thị trường ngắn hạn, trong khi tín hiệu xu hướng dài hạn đảm bảo xu hướng lớn không thay đổi. Sự kết hợp của cả hai rất tăng cường sự ổn định của các tín hiệu và có thể lọc hiệu quả các tín hiệu sai có tỷ lệ cao hơn từ các tín hiệu ngắn hạn.

Ngoài ra, chiến lược có ít tham số và dễ tối ưu hóa. Người dùng chỉ cần điều chỉnh các tham số của NVI để thích nghi với các đặc điểm của các thị trường khác nhau.

Phân tích rủi ro

Rủi ro lớn nhất của chiến lược này là có thể có một sự chậm trễ giữa hai loại tín hiệu. Có thể có một số sự chậm trễ giữa tín hiệu đảo ngược ngắn hạn và tín hiệu xu hướng dài hạn, điều này sẽ dẫn đến các tín hiệu không nhất quán trong một khoảng thời gian, không thể hình thành một tín hiệu nhập cảnh ổn định.

Ngoài ra, chỉ số NVI cũng nhạy cảm với sự gia tăng bất thường về khối lượng giao dịch, có thể dẫn đến đánh giá sai về xu hướng dài hạn.

Để giảm thiểu những rủi ro này, các tham số của chỉ số NVI có thể được điều chỉnh phù hợp hoặc dừng lỗ có thể được thêm để kiểm soát lỗ cho mỗi giao dịch.

Tối ưu hóa

Các khía cạnh chính để tối ưu hóa chiến lược này bao gồm:

  1. Tối ưu hóa các thông số của chỉ số Stoch để cải thiện khả năng chụp đảo ngược.

  2. Tối ưu hóa thời gian chu kỳ của chỉ số NVI để tăng khả năng xác định xu hướng dài hạn.

  3. Thêm bộ lọc khối lượng giao dịch để loại bỏ các tín hiệu sai từ khối lượng giao dịch bất thường.

  4. Thêm các chiến lược dừng lỗ để kiểm soát lỗ trên mỗi giao dịch.

Kết luận

Chiến lược được thiết kế với một cơ chế nhập cảnh ổn định dựa trên ý tưởng đảo ngược ngắn hạn và xu hướng dài hạn để kiểm soát hiệu quả tỷ lệ dương tính giả và tăng tính ổn định tín hiệu.


/*backtest
start: 2023-12-18 00:00:00
end: 2023-12-21 05:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 29/03/2021
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// The theory behind the indexes is as follows: On days of increasing 
// volume, you can expect prices to increase, and on days of decreasing 
// volume, you can expect prices to decrease. This goes with the idea of 
// the market being in-gear and out-of-gear. Both PVI and NVI work in similar 
// fashions: Both are a running cumulative of values, which means you either 
// keep adding or subtracting price rate of change each day to the previous day`s 
// sum. In the case of PVI, if today`s volume is less than yesterday`s, don`t add 
// anything; if today`s volume is greater, then add today`s price rate of change. 
// For NVI, add today`s price rate of change only if today`s volume is less than 
// yesterday`s.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos


NVI(EMA_Len) =>
    pos = 0.0
    nRes = 0.0
    xROC = roc(close, EMA_Len)
    nRes := iff(volume < volume[1], nz(nRes[1], 0) + xROC, nz(nRes[1], 0))
    nResEMA = ema(nRes, EMA_Len)
    pos := iff(nRes > nResEMA, 1,
    	     iff(nRes < nResEMA, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Negative Volume Index", shorttitle="Combo", overlay = true)
line1 = input(true, "---- 123 Reversal ----")
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
line2 = input(true, "---- Negative Volume Index ----")
EMA_Len = input(50, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posNVI = NVI(EMA_Len)
pos = iff(posReversal123 == 1 and posNVI == 1 , 1,
	   iff(posReversal123 == -1 and posNVI == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1 ) 
    strategy.entry("Long", strategy.long)
if (possig == -1 )
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Thêm nữa