Chiến lược định lượng dựa trên sự đảo ngược và sức mạnh tương đối so sánh

Tác giả:ChaoZhang, Ngày: 2023-12-13 17:17:10
Tags:

img

Tổng quan

Chiến lược này đầu tiên kết hợp chiến lược đảo ngược được đề xuất bởi Ulf Jensen trên trang 183 của cuốn sách của ông How I Tripped My Money in the Futures Market với chỉ số sức mạnh tương đối so sánh để có được các tín hiệu mạnh hơn.

Ý tưởng chính của chiến lược này là đánh giá bằng nhiều yếu tố cùng một lúc. Bằng cách kết hợp yếu tố đảo ngược và tín hiệu sức mạnh tương đối so sánh, nó sẽ chỉ đặt lệnh mua hoặc bán khi cả hai cung cấp cùng một tín hiệu, để cải thiện sự ổn định của chiến lược.

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

Phần đầu tiên là một chiến lược đảo ngược. Chiến lược đi dài khi: giá đóng đã tăng liên tục trong hai ngày qua, và đường chậm Stochastic 9 ngày dưới 50. Điều kiện đóng là: giá đóng đã giảm liên tục trong hai ngày qua, và đường nhanh Stochastic 9 ngày trên 50.

Phần thứ hai là chỉ số sức mạnh tương đối so sánh. Chỉ số này tính toán trung bình động của tỷ lệ thay đổi giá đóng cửa N ngày giữa cổ phiếu mục tiêu và chỉ số tiêu chuẩn, và so sánh nó với vùng mua, bán và đóng trước. Nó đi dài khi chỉ số vượt qua vùng mua, đi ngắn khi giảm xuống dưới vùng bán và đóng các vị trí khi dài và chỉ số giảm xuống dưới vùng đóng và khi ngắn và chỉ số tăng trên vùng đóng.

Chiến lược kết hợp này đánh giá các tín hiệu của cả hai bên cùng một lúc. Nó sẽ chỉ đặt lệnh mua hoặc bán khi cả hai cung cấp cùng một tín hiệu (cả mua hoặc cả hai bán).

Phân tích lợi thế

Chiến lược này kết hợp các lợi thế của các yếu tố đảo ngược và các yếu tố sức mạnh tương đối. Chiến lược đảo ngược có thể nắm bắt những điều cực đoan trong ngắn hạn; chiến lược sức mạnh tương đối có thể nắm bắt xu hướng chính của thị trường rộng lớn hơn. Các tín hiệu từ cả hai chiến lược có thể cải thiện độ tin cậy và lọc ra một số tín hiệu sai do tiếng ồn gây ra.

Ngoài ra, chỉ số Stochastic, như một chỉ số để phân biệt khu vực mua quá mức và bán quá mức, có thể xác định tốt hơn các điểm đảo ngược.

Phân tích rủi ro

Rủi ro lớn nhất của các chiến lược đảo ngược là chúng không thể xác định thời gian đảo ngược thị trường, có thể dẫn đến tổn thất tiếp tục sau khi đảo ngược thị trường.

Rủi ro của chiến lược sức mạnh tương đối nằm trong cài đặt tham số không phù hợp, có thể tạo ra quá nhiều tín hiệu sai.

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

Chiến lược này có thể được tối ưu hóa trong các khía cạnh sau:

  1. Kiểm tra nhiều yếu tố đảo ngược hơn để tìm ra các chiến lược đảo ngược tốt hơn.

  2. Kiểm tra và tối ưu hóa các tham số cho chỉ số sức mạnh tương đối để tìm ra sự kết hợp tham số tối ưu, vì các cài đặt hiện tại là chủ quan và có thể không được tối ưu hóa.

  3. Thêm các chiến lược dừng lỗ. Hiện tại không có lệnh dừng lỗ, thêm lệnh dừng lỗ hợp lý có thể kiểm soát rủi ro giảm.

  4. Kiểm tra các chỉ số tham chiếu khác nhau để tính toán sức mạnh tương đối với cổ phiếu mục tiêu và tìm chỉ số phù hợp nhất.

Kết luận

Chiến lược này kết hợp các yếu tố đảo ngược và các yếu tố sức mạnh tương đối để giao dịch. Nó sử dụng những lợi thế của cả hai để cải thiện chất lượng tín hiệu và là một chiến lược kết hợp tương đối trưởng thành. Vẫn còn nhiều chỗ để tối ưu hóa bằng cách điều chỉnh các tham số, thêm các chiến lược dừng lỗ và điều chỉnh các phương pháp kết hợp chiến lược để đạt được kết quả tốt hơn.


/*backtest
start: 2022-12-06 00:00:00
end: 2023-12-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 30/10/2019
// 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
// Comparative Relative Strength Strategy for ES
//
// 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

CRS(a, b, len, BuyBand, SellBand, CloseBand) =>
    pos = 0.0
    as = security(a, timeframe.period, close) 
    bs = security(b, timeframe.period, close) 
    nRes = sma(as/bs, len)
    pos := iff(nRes > BuyBand, 1,
	         iff(nRes < SellBand, -1,
	          iff(pos[1] == 1 and nRes < CloseBand, 0,
    	       iff(pos[1] == -1 and nRes > CloseBand, 0, nz(pos[1], 0)))))
    pos

strategy(title="Combo Backtest 123 Reversal & Comparative Relative Strength", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
a = syminfo.tickerid 
b = input("BTC_USDT:swap", type=input.symbol) 
LengthCRS = input(10) 
BuyBand = input(0.9988, step = 0.0001)
SellBand = input(0.9960, step = 0.0001)
CloseBand = input(0.9975, step = 0.0001)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posCRS = CRS(a, b, LengthCRS, BuyBand, SellBand, CloseBand)
pos = iff(posReversal123 == 1 and posCRS == 1 , 1,
	   iff(posReversal123 == -1 and posCRS == -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