Chiến lược này sử dụng chỉ số đường trung bình và chỉ số Stoch để thiết kế một hệ thống giao dịch định lượng có khả năng xác định xu hướng và mua quá mức. Chiến lược này kết hợp lợi thế của nhiều chỉ số để đánh giá xu hướng có hệ thống và nắm bắt cơ hội.
Nguyên tắc chiến lược:
Tính toán đường trung bình dài hạn ((MA) và đường trung bình ngắn hạn ((EMA), làm chỉ số kỹ thuật để xác định hướng xu hướng.
Tính toán giá trị Stoch K và giá trị Stoch D để xác định xem đang mua quá mức hay đang bán quá mức.
Khi CLOSE phá vỡ MA từ dưới lên, và giá trị Stoch K và giá trị D đều cao hơn đường mua quá mức, hãy xem đó là thời điểm nhập vào đường dài và làm nhiều hơn.
Khi CLOSE phá vỡ EMA từ trên xuống, và cả giá trị Stoch K và D đều thấp hơn đường bán tháo, hãy xem đó là thời điểm nhập vào đường ngắn và tháo lỗ.
Định hướng giao dịch được đánh giá bằng COLOR.
Lợi thế của chiến lược này:
Sự kết hợp của hai đường đồng đều để xác định hướng của xu hướng chính, tránh tín hiệu sai.
Chỉ số Stoch xác định các khu vực quá mua quá bán để tăng khả năng kiếm lợi nhuận.
Việc kết hợp nhiều chỉ số có thể xác thực lẫn nhau, tăng độ tin cậy tín hiệu.
Chiến lược này có những rủi ro:
Các tham số được tối ưu hóa không phù hợp, sẽ xảy ra giao dịch thường xuyên hoặc tín hiệu không nhất quán.
Cả đường trung bình và Stoch đều có thể bị chậm trễ, dẫn đến nhập cảnh sớm hoặc muộn.
Mặc dù kết hợp nhiều chỉ số làm tăng độ tin cậy, nhưng cũng làm tăng sự phức tạp của chiến lược.
Tóm lại, chiến lược này sử dụng xu hướng đánh giá bằng đường trung bình, Stoch đánh giá quá mua quá bán, giao dịch định lượng. Với điều kiện tối ưu hóa điều chỉnh tham số, có thể tăng sự ổn định và độ tin cậy của hệ thống giao dịch. Nhưng bất kỳ chiến lược định lượng nào cũng cần quản lý rủi ro nghiêm ngặt, nhà đầu tư vẫn cần thận trọng khi sử dụng.
/*backtest
start: 2023-08-12 00:00:00
end: 2023-09-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// strategy("PMB2", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 20, initial_capital=1000, currency=currency.USD)
//study(title="PMB2", overlay=true)
l_ma = input(50, title="MA (green)", type=input.integer)
l_ema = input(25, title="EMA (red)", type=input.integer)
MA = sma(close,l_ma)
EMA = ema(close,l_ema)
plot(MA, color=color.green)
plot(EMA, color=color.red)
//STOCH(14,3,3)
length = input(20, minval=1, title="STOCH - K")
smoothK = input(2, minval=1, title="STOCH - D")
smoothD = input(2 , minval=1, title="STOCH - Smooth")
StkLong= input(50 , minval=1, maxval=100, title="Long when Close > MA and Stoch > ")
StkShort= input(80 , minval=1, maxval=100, title="Short when Close < EMA and Stoch < ")
k = sma(stoch(close, high, low, length), smoothK)
d = sma(k, smoothD)
//plot(k, color=color.blue, title="STOCH - K")
//plot(d, color=color.orange, title="STOCH - D")
//band180 = hline(80, title="STOCH - Banda superior")
//band120 = hline(20, title="STOCH - Banda superior")
//band100 = hline(50, color=color.gray, editable=false, linestyle=hline.style_solid)
//fill(band180, band120, color=color.gray, transp=75, title="STOCH - Fundo")
BTStartY = input(title="Strategy Test Start Year", type=input.integer, defval=2019, minval=2010, maxval=2100)
BTStartM = input(title="Strategy Test Start Month", type=input.integer, defval=1, minval=1, maxval=12)
BTStartD = input(title="Strategy Test Start Day", type=input.integer, defval=1, minval=1, maxval=31)
BTStopY = input(title="Strategy Test Stop Year", type=input.integer, defval=2019, minval=2010, maxval=2100)
BTStopM = input(title="Strategy Test Stop Month", type=input.integer, defval=12, minval=1, maxval=12)
BTStopD = input(title="Strategy Test Stop Day", type=input.integer, defval=31, minval=1, maxval=31)
// set up min and max date for strategy test
TMin = timestamp(BTStartY, BTStartM, BTStartD, 00, 00)
TMax = timestamp(BTStopY, BTStopM, BTStopD, 00, 00)
InTime = true
bool long = false, short = false, trade = false
trade := trade[1]
long := long[1]
short := short[1]
if (crossover(close, MA) and k > StkLong and d > StkLong) // "LONG!"
//if (close > MA and k > StkLong and d > StkLong) // "LONG!"
short := false
long := true
trade := true // LONG
if (crossunder(close, EMA) and k < StkShort and d < StkShort) // "SHORT!""
//if (close < EMA and k < StkShort and d < StkShort) // "SHORT!""
long := false
short := true
trade := false // SHORT
//bgcolor(FL > SH ? color.green : FH < SL ? color.red : na, transp=80)
bgcolor(trade ? color.green : color.red, transp=90)
//alertcondition((crossover(close, MA) and k > 50 and d > 50) , title='Buy', message='Buy')
//alertcondition((crossunder(close, EMA) and k > 80 and d > 80) , title='Sell', message='Sell')
if ((crossover(close, MA) and k > StkLong and d > StkLong) and InTime)
//if ((close > MA and k > StkLong and d > StkLong) and InTime)
strategy.entry("Long", strategy.long)
if ((crossunder(close, EMA) and k < StkShort and d < StkShort) and InTime)
//if ((close < EMA and k < StkShort and d < StkShort) and InTime)
strategy.entry("Short", strategy.short)