
Chiến lược ngẫu nhiên chỉ số đường hai là một chiến lược cố gắng sử dụng sự kết hợp của chỉ số đường trung bình và chỉ số ngẫu nhiên để tìm kiếm cơ hội giao dịch. Nó sẽ tạo ra tín hiệu giao dịch khi đi qua SMA chậm trên EMA nhanh, đồng thời sử dụng giá trị K của chỉ số ngẫu nhiên để xác định xem có quá mua hay quá bán để loại bỏ một số tín hiệu.
Chiến lược này chủ yếu dựa trên hai chỉ số kỹ thuật:
Đường trung bình: tính trung bình của ba tham số khác nhau của EMA nhanh, SMA chậm và VWMA chậm, tạo ra tín hiệu giao dịch khi EMA nhanh vượt qua hoặc giảm qua SMA chậm.
Chỉ số ngẫu nhiên: tính toán giá trị% K, khi nó vượt quá ngưỡng giá bán hoặc mua được thiết lập, cho rằng thị trường có thể đảo ngược, có thể loại bỏ một số tín hiệu giao dịch đường trung bình.
Các tín hiệu chiến lược được đưa ra theo những logic sau:
Khi EMA nhanh vượt qua SMA chậm và %K thấp hơn ngưỡng bán tháo, thực hiện thêm; khi EMA nhanh vượt qua SMA chậm và %K cao hơn ngưỡng mua tháo, thực hiện thêm.
Đối với các vị trí mở nhiều đầu, nếu giá trị% K trở lại khu vực bán tháo hoặc giá vượt qua mức dừng lỗ, thì sẽ bị phá vỡ. Đối với các vị trí mở đầu trống, nếu giá trị% K trở lại khu vực mua tháo hoặc giá vượt qua mức dừng lỗ, thì sẽ bị phá vỡ.
Bằng cách kết hợp các chỉ số đường trung bình và các chỉ số ngẫu nhiên, chiến lược này cố gắng phát ra tín hiệu nhập cảnh ở các điểm tín hiệu đường trung bình có xác suất cao, đồng thời tận dụng cơ hội để lọc một phần của các chỉ số ngẫu nhiên.
Chiến lược này có những lợi thế chính như sau:
Chiến lược này cũng có một số rủi ro:
Phương pháp tương ứng:
Chiến lược này có thể được tối ưu hóa từ các khía cạnh sau:
Chiến lược ngẫu nhiên chỉ số hai đường trung bình bằng cách kết hợp chỉ số trung bình chậm và chỉ số ngẫu nhiên, thiết kế chiến lược theo dõi xu hướng ổn định hơn. Tuy nhiên, cũng có một số không gian có thể tối ưu hóa, chẳng hạn như lựa chọn tham số, cách dừng lỗ.
/*backtest
start: 2023-01-22 00:00:00
end: 2024-01-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("TVIX MEAN REV V2 TREND", overlay=true)
length = input(16, minval=1)
OverBought = input(80)
OverSold = input(20)
TradeLong = input (true)
TradeShort = input (true)
OverBoughtClose = input(80)
OverSoldClose = input(20)
smoothK = 3
smoothD = 3
trail_points = input(50)
k = sma(stoch(close, high, low, length), smoothK)
d = sma(k, smoothD)
k2 = sma(stoch(close, high, low, length), smoothK)
d2 = sma(k, smoothD)
// === GENERAL INPUTS ===
// short Ema
maFastSource = input(defval=close, title="Fast EMA Source")
maFastLength = input(defval=1, title="Fast EMA Period", minval=1)
// long Sma
maSlowSource = input(defval=close, title="Slow SMA Source")
maSlowLength = input(defval=100, title="Slow SMA Period", minval=1)
// longer Sma
maSlowerSource = input(defval=close, title="Slower SMA Source")
maSlowerLength = input(defval=30, title="Slower SMA Period", minval=1)
//ATR Stop Loss Indicator by Keith Larson
atrDays = input(7, "ATR Days Lookback")
theAtr = atr(atrDays)
atrModifier = input(5.0, "ATR Modifier")
//plot(atr * atrModifier, title="ATR")
LstopLoss = close - (theAtr * atrModifier)
SstopLoss = close + (theAtr * atrModifier)
// === SERIES SETUP ===
/// a couple of ma's..
maFast = ema(maFastSource, maFastLength)
maSlow = sma(maSlowSource, maSlowLength)
maSlower = vwma(maSlowerSource, maSlowerLength)
rsi = rsi(maSlowerSource, maSlowerLength)
// === PLOTTING ===
fast = plot(maFast, title="Fast MA", color=color.red, linewidth=2, style=plot.style_line, transp=30)
slow = plot(maSlow, title="Slow MA", color=color.green, linewidth=2, style=plot.style_line, transp=30)
slower = plot(maSlower, title="Slower MA", color=color.teal, linewidth=2, style=plot.style_line, transp=30)
// === LOGIC === Basic - simply switches from long to short and vice-versa with each fast-slow MA cross
LongFilter = maFast > maSlow
ShortFilter = maSlow > maFast
BUY=crossover(k, d) and k < OverSold
SELL=crossunder(k, d) and k > OverBought
SELLCLOSE=crossover(k, d) and k < OverSoldClose
BUYCLOSE=crossunder(k, d) and k > OverBoughtClose
Open = open
if not na(k) and not na(d)
if crossover(k, d) and k < OverSold and LongFilter and TradeLong
strategy.entry("$", strategy.long, limit = Open, comment="Long")
strategy.close("$",when = crossunder(k, d) and k > OverBoughtClose or open < LstopLoss )
///strategy.close("$",when = open < LstopLoss )
if not na(k) and not na(d)
if crossunder(k, d) and k > OverBought and ShortFilter and TradeShort
strategy.entry("$1", strategy.short, limit = Open, comment="S")
strategy.close ("$1", when = crossover(k, d) and k < OverSoldClose or open > SstopLoss )
///strategy.close ("$1", when = open < SstopLoss)