Xu hướng chéo giữa trung bình động và trung bình ngẫu nhiên theo chiến lược định lượng

Tác giả:ChaoZhang, Ngày: 2024-02-05 15:27:03
Tags:

img

Tổng quan

Chiến lược này chủ yếu sử dụng các đường chéo của chỉ số Stoch trong khu vực mua quá mức / bán quá mức như là tín hiệu đầu vào, trong khi đánh giá hướng xu hướng hiện tại với chỉ số EMA. Nó chỉ đi dài trong xu hướng tăng được xác định bởi EMA và đi ngắn trong xu hướng giảm, đó là một chiến lược theo xu hướng điển hình.

Nguyên tắc

Chiến lược bao gồm ba phần chính:

  1. EMA xác định hướng xu hướng

    Sử dụng một EMA nhanh và một EMA chậm, khi EMA nhanh trên EMA chậm, nó được xác định là xu hướng tăng. Khi EMA nhanh dưới EMA chậm, nó được xác định là xu hướng giảm.

  2. Stoch để tạo ra tín hiệu giao dịch

    Chỉ số Stoch bao gồm các đường %K và %D. Khi %K vượt trên %D trong khu vực mua quá mức, nó tạo ra tín hiệu mua. Khi %K vượt dưới %D trong khu vực bán quá mức, nó tạo ra tín hiệu bán. Chiến lược này chỉ lấy tín hiệu chéo Stoch khi chúng xảy ra trong các khu vực mua quá mức / bán quá mức.

  3. Cơ chế quản lý rủi ro

    Chiến lược này cũng thiết lập mức dừng lỗ và lấy lợi nhuận. Khi nắm giữ một vị trí dài, nếu giá vượt qua mức dừng lỗ, nó sẽ thoát khỏi giao dịch. Nếu giá vượt qua mức lấy lợi nhuận, nó sẽ đóng vị trí để kiếm lợi nhuận.

Nói chung, đây là một chiến lược giao dịch định lượng điển hình sử dụng sự kết hợp của các chỉ số để xác định hướng xu hướng và tín hiệu giao dịch, được bổ sung bởi các quy tắc quản lý rủi ro nghiêm ngặt để giảm rủi ro giao dịch.

Phân tích lợi thế

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

  1. Sử dụng EMA để xác định xu hướng chính và nhỏ tránh bị mắc kẹt trong một thị trường bên.

  2. Sức mạnh của chỉ số Stoch nằm trong khả năng phản ánh chính xác mức mua quá mức / bán quá mức.

  3. Chiến lược xác định rõ các kịch bản dài và ngắn có thể, lọc thêm các tín hiệu và tránh mở các vị trí mù quáng trong một thị trường phức tạp.

  4. Quản lý rủi ro nghiêm ngặt giúp kiểm soát tổn thất của các giao dịch cá nhân, giới hạn rút tiền tối đa trong khi vẫn cho phép các giao dịch có lợi nhuận chạy.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro với chiến lược này:

  1. Các chỉ số như EMA và Stoch có tính chất chậm, khiến cho chiến lược này khó nắm bắt kịp thời các sự đảo ngược thị trường.

  2. Chỉ dựa vào các chỉ số có thể dễ dàng tạo ra sự thiên vị, do đó bỏ lỡ các cơ hội giao dịch thực sự được cung cấp bởi thị trường.

  3. Cơ chế quản lý rủi ro tự nó cũng có thể hạn chế tiềm năng lợi nhuận bằng cách thiết lập dừng lỗ sớm và lấy lợi nhuận.

  4. Có những rủi ro liên quan đến lựa chọn tham số. Kiểm tra và tối ưu hóa rộng rãi là cần thiết để tìm các tham số tối ưu.

Hướng dẫn tối ưu hóa

Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:

  1. Hãy thử các loại EMA khác nhau để xác định xu hướng, như WMA, Hull MA vv và so sánh kết quả.

  2. Kết hợp các chỉ số khác để tạo ra tín hiệu giao dịch, ví dụ: MACD, KDJ để xây dựng một hệ thống đa chỉ số.

  3. Tối ưu hóa các thiết lập dừng lỗ và lấy lợi nhuận để thích nghi tốt hơn với sự biến động của thị trường.

  4. Kiểm tra sự khác biệt hiệu suất giữa các sản phẩm và khung thời gian khác nhau để tìm ra sự kết hợp tối ưu.

  5. Xem xét việc giới thiệu các mô hình học máy để hỗ trợ xu hướng và đánh giá tín hiệu để làm cho chiến lược thông minh hơn.

Kết luận

Kết luận, chiến lược này kết hợp các chỉ số thường được sử dụng để tạo thành một hệ thống theo xu hướng tương đối trưởng thành, tính đến việc xác định xu hướng, tín hiệu giao dịch và quản lý rủi ro. Với việc tối ưu hóa hơn nữa, tôi tin rằng chiến lược này có thể đạt được kết quả giao dịch trực tiếp tốt hơn. Đồng thời, chúng ta cũng nên nhận thức được những hạn chế của các chiến lược duy nhất và tiếp tục tìm hiểu sự phức tạp của thị trường để theo đuổi lợi nhuận ổn định lâu dài.


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//by Wugamlo
//Strategy combining Stochastic Crosses in the Overbought/Oversold Area with a trend determined by two EMAs
//Default setup seems to work best on 4HR timeframe for BTC 

strategy(title = "Strategy Stoch/EMA Cross", shorttitle = "Strategy Stoch/EMA Cross", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD, commission_value=0.01,commission_type=strategy.commission.percent, initial_capital=1000)

// === GENERAL INPUTS ===
SectionInd      = input(defval = true ,title = "════════════ INDICATORS ════════════")
maFastLength    = input(defval = 55,   title = "Fast MA Period", minval = 1)
maSlowLength    = input(defval = 89,   title = "Slow MA Period", minval = 1)
StochLength     = input(defval = 14,   title = "Stochastic Length", minval=1)
smoothK         = input(defval = 6,    title = "%K Smooth", minval=1)
smoothD         = input(defval = 3,    title = "%D Smooth", minval=1)
overbought      = 80
oversold        = 20
HighlightOBOS   = input(defval = true, title = "Highlight Stoch Cross?")
HighlightTrend  = input(defval = true, title = "Highlight Trend?")

//DATE AND TIME
SectionFrom     = input(defval = true ,title = "═══════════════ FROM ═══════════════")
fromDay         = input(defval = 01,   title = "From day", minval=1)
fromMonth       = input(defval = 1,    title = "From month", minval=1)
fromYear        = input(defval = 2019, title = "From year", minval=2014)
SectionTo       = input(defval = true, title = "════════════════ TO ════════════════")
toDay           = input(defval = 31,   title = "To day", minval=1)
toMonth         = input(defval = 12,    title = "To month", minval=1)
toYear          = input(defval = 2020, title = "To year", minval=2014)

// === STRATEGY RELATED INPUTS ===
SectionStra     = input(defval = true ,title = "═════════════ STRATEGY ═════════════")

// Include Shorts or only trade Long Positions?
includeShorts   = input(defval = true, title = "Include Short Positions?")


// Risk Management inputs
useTakeProfit   = input(defval = true,  title = "User Take Profit?")
inpTakeProfit   = input(defval = 8,     title = "Take Profit (%)", minval = 0)
useStopLoss     = input(defval = false, title = "User Stop Loss?")
inpStopLoss     = input(defval = 2,     title = "Stop Loss (%)", minval = 0)

StopLossPerc    = inpStopLoss * 0.01
TakeProfitPerc  = inpTakeProfit * 0.01


// === EMA SERIES SETUP ===
maFast = ema(close, maFastLength)
maSlow = ema(close, maSlowLength)
diff   = maFast - maSlow

// === STOCHASTIC SETUP ===
k      = sma(stoch(close, high, low, StochLength), smoothK)
d      = sma(k, smoothD)

// Stochastic Long/Short Entry determination
stochLong  = crossover(k,d)  and (k < oversold)
stochShort = crossunder(k,d) and (k > overbought)

// Stochastic Long/Short Exit determination
stochLongEx  = crossover (k, overbought)
stochShortEx = crossunder(k, oversold)


// === PLOTTING EMAs ===
fast = plot(maFast, title = "Fast MA", color = yellow, linewidth = 1, style = line, transp = 10)
slow = plot(maSlow, title = "Slow MA", color = white,  linewidth = 1, style = line, transp = 10)


// === Vertical Coloring for Crosses in Overbought/Oversold zone and for MA Trend Zones ===
b_color = stochLong ? green : stochShort ? red : na
bgcolor(HighlightOBOS ? b_color : na, title="Overbought / Oversold", transp=65)   //Highlight the Overbought/Oversold Stoch Crossings
t_color = diff>=0 ? green : diff<0 ? red : na
bgcolor(HighlightTrend ? t_color : na, title="Trend up / Trend down", transp=75)  //Highlight the EMA Trend


// === STRATEGY LOGIC ===
// Time Restriction
timeInRange = true


// === STRATEGY - LONG POSITION EXECUTION ===
if stochLong and (diff >=0) and timeInRange    //Open Long when Stoch crossing in Oversold area and EMATrend is up
    strategy.entry(id = "Long", long = true)
if stochLong and (diff <0) and timeInRange     //Close Long when another Long Stoch cross signal is given after Trend has changed to down (avoid fake signals)
    strategy.close(id = "Long")
if stochLongEx and timeInRange                 //Close Long when Stoch is getting Overbought 
    strategy.close(id = "Long")


// === STRATEGY - SHORT POSITION EXECUTION ===
if stochShort and (diff <0) and timeInRange and includeShorts  //Open Short when Stoch crossing in Overbought area and EMA Trend is down
    strategy.entry(id = "Short", long = false)
if stochShort and (diff >=0) and timeInRange                   //Close Short when another Short Stoch cross signal is given after Trend has changed to up (avoid fake signals)
    strategy.close(id = "Short")
if stochShortEx and timeInRange                                //Close Short when Stoch is getting Oversold 
    strategy.close(id = "Short")

        
// === STRATEGY RISK MANAGEMENT EXECUTION ===
//Stop Loss
if useStopLoss    //Exit when Stop Loss is hit
    strategy.exit("Exit Long SL",   from_entry = "Long",  loss = close * StopLossPerc / syminfo.mintick )
    strategy.exit("Exit Short SL",  from_entry = "Short", loss = close * StopLossPerc / syminfo.mintick )

//Take Profit
if useTakeProfit  //Exit when Take Profit Limit is hit
    strategy.exit("Exit Long TP",   from_entry = "Long",  profit = close * TakeProfitPerc / syminfo.mintick)
    strategy.exit("Exit Short TP",  from_entry = "Short", profit = close * TakeProfitPerc / syminfo.mintick)




Thêm nữa