Chiến lược Stochastic trung bình động kép

Tác giả:ChaoZhang, Ngày: 2024-01-29 11:54:10
Tags:

img

Tổng quan

Chiến lược Stochastic Dual Moving Average cố gắng xác định các cơ hội giao dịch bằng cách sử dụng sự kết hợp của các chỉ số trung bình động và dao động stochastic. Nó tạo ra các tín hiệu giao dịch khi EMA nhanh vượt qua trên hoặc dưới SMA chậm, đồng thời sử dụng giá trị stochastic %K để lọc ra các tín hiệu khi thị trường quá căng.

Chiến lược logic

Chiến lược chủ yếu dựa trên hai chỉ số kỹ thuật:

  1. Moving Averages: Nó tính toán EMA nhanh, SMA chậm và VWMA chậm bằng cách sử dụng các thông số khác nhau và tạo ra tín hiệu giao dịch khi EMA nhanh vượt qua SMA chậm.

  2. Stochastic Oscillator: Nó tính toán giá trị %K và coi thị trường đã mua quá mức hoặc đã bán quá mức khi %K vượt qua các ngưỡng trên hoặc dưới được đặt trước, sử dụng điều này để lọc một số tín hiệu trung bình động.

Cụ thể, logic để tạo tín hiệu là:

  1. Khi EMA nhanh vượt qua trên SMA chậm, và %K nằm dưới mức bán quá mức, mua dài. Khi EMA nhanh vượt qua dưới SMA chậm, và %K nằm trên mức mua quá mức, mua ngắn.

  2. Đối với các vị trí dài hiện có, đóng khi %K quay trở lại khu vực mua quá mức hoặc giá vi phạm mức dừng lỗ. Đối với các vị trí ngắn, đóng khi %K quay trở lại khu vực bán quá mức hoặc giá vi phạm mức dừng lỗ.

Bằng cách kết hợp các đường trung bình động và dao động stochastic, chiến lược cố gắng xác định các điểm tín hiệu trung bình động có khả năng cao để tham gia giao dịch, trong khi sử dụng stochastic để lọc một số tín hiệu sai.

Phân tích lợi thế

Những lợi thế chính của chiến lược này là:

  1. Kết hợp nhiều chỉ số kỹ thuật cung cấp đánh giá toàn diện hơn so với việc sử dụng một chỉ số duy nhất.
  2. Việc lọc bằng dao động stochastic tránh một số tín hiệu sai.
  3. Sử dụng nhiều đường trung bình động với các thông số hỗn hợp cho phép các tín hiệu mạnh mẽ hơn.
  4. Bao gồm một cơ chế dừng lỗ để kiểm soát lỗ giao dịch duy nhất.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro:

  1. Mức trung bình động có thể tạo ra nhiều tín hiệu không chắc chắn dẫn đến nhiều mục nhập sai hơn; khả năng dừng lỗ hạn chế.
  2. Trình dao động ngẫu nhiên cũng có thể tự tạo ra các tín hiệu không chính xác.
  3. Cài đặt tham số đòi hỏi tối ưu hóa (ví dụ: mức mua quá mức / bán quá mức, thời gian trung bình động) nếu không sẽ ảnh hưởng đến hiệu suất.
  4. Thiếu phân tích cơ bản.

Hạn chế:

  1. Tối ưu hóa các tham số để tìm kết hợp tốt nhất của các thiết lập chỉ số.
  2. Sử dụng kích thước vị trí nhỏ hơn, quy mô vào.
  3. Bao gồm phân tích cơ bản để tránh các sự kiện.

Cơ hội gia tăng

Các cơ hội tối ưu hóa chính là:

  1. Kiểm tra và tối ưu hóa các thông số trung bình động để tìm tối ưu.
  2. Kiểm tra các thông số ngẫu nhiên như vùng mua quá mức / bán quá mức để cài đặt tối ưu.
  3. Bao gồm các chỉ số bổ sung như khối lượng hoặc biến động cho logic nhập cảnh phong phú hơn.
  4. Cải thiện phương pháp dừng lỗ, ví dụ như dừng lại để giảm rủi ro.
  5. Cải thiện quản lý tiền tệ như kích thước vị trí năng động dựa trên ATR.
  6. Tránh các sự kiện rủi ro bằng cách sử dụng VIX v.v.

Kết luận

Chiến lược Stochastic Trung bình Di chuyển kép sử dụng sự pha trộn của các đường trung bình di chuyển và dao động stochastic để thiết kế một hệ thống theo xu hướng mạnh mẽ, nhưng có một số cơ hội cải tiến xung quanh các thông số, dừng vv.


/*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) 
    
  
        





Thêm nữa