
Bài viết này giới thiệu một chiến lược giao dịch định lượng kết hợp sử dụng chiến lược đường trung bình kép và chỉ số ngẫu nhiên. Chiến lược này tích hợp các tính năng theo dõi xu hướng của đường trung bình di động và tính năng mua quá mức của chỉ số ngẫu nhiên để tạo ra tín hiệu giao dịch.
Chiến lược này bao gồm hai phần:
Sử dụng đường trung bình di chuyển nhanh và đường trung bình di chuyển chậm để tạo ra tín hiệu mua vàng và tín hiệu bán chết. Đường trung bình nhanh có thể nắm bắt xu hướng thay đổi giá nhanh hơn, đường trung bình chậm lọc tín hiệu giả.
Sử dụng tính năng dao động của chỉ số ngẫu nhiên để xác định tình trạng quá mua quá bán. Khi chỉ số ngẫu nhiên cao hơn đường dài, đó là tín hiệu quá mua, và khi chỉ số ngẫu nhiên thấp hơn đường dài, đó là tín hiệu quá bán.
Hai phần của tín hiệu tổng hợp sau đó tạo thành tín hiệu giao dịch cuối cùng. Chiến lược hai đường ngang theo dõi xu hướng chính, chỉ số ngẫu nhiên hỗ trợ tránh tình huống bất lợi.
Có thể giảm rủi ro bằng cách tối ưu hóa các tham số, hoặc có thể thêm dừng để kiểm soát tổn thất.
Chiến lược này có thể được tối ưu hóa bằng cách:
Chiến lược này sử dụng tổng hợp các chiến lược song song và lợi thế của các chỉ số ngẫu nhiên. Trong khi theo dõi xu hướng thị trường chính, tránh đảo ngược không thuận lợi. Có thể đạt được hiệu quả chiến lược tốt hơn bằng cách tối ưu hóa các tham số.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 24/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
// As the name suggests, High low bands are two bands surrounding the underlying’s
// price. These bands are generated from the triangular moving averages calculated
// from the underlying’s price. The triangular moving average is, in turn, shifted
// up and down by a fixed percentage. The bands, thus formed, are termed as High
// low bands. The main theme and concept of High low bands is based upon the triangular
// moving average.
//
// 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
HLB(Length, PercentShift) =>
pos = 0.0
xTMA = sma(sma(close, Length), Length)
xHighBand = xTMA + (xTMA * PercentShift / 100)
xLowBand = xTMA - (xTMA * PercentShift / 100)
pos :=iff(close > xHighBand, 1,
iff(close <xLowBand, -1, nz(pos[1], 0)))
pos
strategy(title="Combo Backtest 123 Reversal & High Low Bands", 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_HLB = input(14, minval=1)
PercentShift = input(1, minval = 0.01, step = 0.01)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posHLB = HLB(Length_HLB, PercentShift)
pos = iff(posReversal123 == 1 and posHLB == 1 , 1,
iff(posReversal123 == -1 and posHLB == -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 )