
Chiến lược này sử dụng cơ chế theo dõi hai chiều, kết hợp với tín hiệu đảo ngược giá và chỉ số khối lượng giao dịch, để thực hiện giao dịch định lượng tự động. Ưu điểm lớn nhất của nó là kiểm soát rủi ro đáng tin cậy, khóa lợi nhuận bằng cách theo dõi dừng lỗ và tránh mở rộng tổn thất. Đồng thời, tín hiệu giao dịch đảo ngược tăng cường chiến thắng của chiến lược. Bài viết này sẽ phân tích chi tiết các nguyên tắc, lợi thế, rủi ro và hướng tối ưu hóa của chiến lược.
Chiến lược này bao gồm hai chiến lược con. Chiến lược con đầu tiên sử dụng các chỉ số ngẫu nhiên để xác định tín hiệu đảo ngược giá, logic cụ thể là:
Nếu giá đóng cửa tăng hai ngày liên tiếp và đường Slow K thấp hơn 50 vào ngày 9, hãy làm nhiều hơn; Nếu giá đóng cửa giảm hai ngày liên tiếp và đường Fast K cao hơn 50 vào ngày 9, hãy bỏ trống.
Chiến lược con thứ hai là kết hợp các chỉ số giao dịch, điểm yếu của khả năng phán đoán. Cụ thể, là so sánh lượng giao dịch hiện tại với giá trị trung bình của lượng giao dịch trong 40 ngày. Nếu lượng giao dịch hiện tại lớn hơn giá trị trung bình, coi đó là lượng có thể tấn công, thuộc tín hiệu đảo ngược, làm trống; Nếu lượng giao dịch hiện tại nhỏ hơn giá trị trung bình, coi đó là lượng có thể giảm, thuộc tín hiệu đảo ngược, làm nhiều hơn.
Tín hiệu giao dịch cuối cùng, là sự giao thoa của hai tín hiệu chiến lược con trên. Đó là khi hai chiến lược con phát tín hiệu cùng một lúc, thì sẽ mở vị trí. Bằng cách lọc Intersection Targets, bạn có thể lọc một số giao dịch tiếng ồn, cải thiện chất lượng tín hiệu.
Có thể tối ưu hóa hơn nữa bằng cách:
Nhìn chung, chiến lược này sử dụng theo dõi hai chiều và đảo ngược giá thành logic giao dịch chính, và được hỗ trợ bởi phán đoán định lượng, để cải thiện chất lượng tín hiệu bằng cách xác nhận kép. Trong ứng dụng thực tế, vẫn cần thử nghiệm và tối ưu hóa thêm, đặc biệt là để bảo vệ rủi ro về dừng lỗ và quản lý tài chính, để ngăn chặn phá sản gây ra quá nhiều.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 16/11/2020
// 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
// Volume and SMA
//
// 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
VSAVol(Length) =>
pos = 0.0
xSMA_vol = sma(volume, Length)
pos := iff(volume > xSMA_vol, -1,
iff(volume < xSMA_vol, 1, nz(pos[1], 0)))
pos
strategy(title="Combo Backtest 123 Reversal & Volume SMA", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
Length_MAVol = input(40, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posVSAVol = VSAVol(Length_MAVol)
pos = iff(posReversal123 == 1 and posVSAVol == 1 , 1,
iff(posReversal123 == -1 and posVSAVol == -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 )