Chiến lược định lượng theo xu hướng dựa trên các chỉ báo Stoch và EMA


Ngày tạo: 2024-02-05 15:27:03 sửa đổi lần cuối: 2024-02-05 15:27:03
sao chép: 0 Số nhấp chuột: 590
1
tập trung vào
1617
Người theo dõi

Chiến lược định lượng theo xu hướng dựa trên các chỉ báo Stoch và EMA

Tổng quan

Chiến lược này chủ yếu sử dụng chỉ số Stoch xảy ra ở khu vực quá mua quá bán như một tín hiệu đầu vào, đồng thời kết hợp với chỉ số EMA để đánh giá hướng xu hướng hiện tại, chỉ thực hiện nhiều hoạt động trong xu hướng EMA tiếp tục tăng và thực hiện giao dịch bán trong xu hướng EMA tiếp tục giảm, thuộc về chiến lược theo dõi xu hướng điển hình.

Nguyên tắc chiến lược

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

  1. Chỉ số EMA đánh giá xu hướng

Sử dụng hai tham số khác nhau EMA nhanh và chậm, EMA nhanh được đánh giá là xu hướng tăng khi nằm trên EMA chậm và xu hướng giảm khi nằm dưới EMA chậm.

  1. Chỉ số Stoch đánh giá tín hiệu mua bán

Stoch chỉ số bao gồm% K đường và% D đường,% K đường tạo ra tín hiệu mua khi vàng giao với% D đường ở trên vùng mua quá mức,% K đường tạo ra tín hiệu bán khi giao với% D đường chết ở dưới vùng bán quá mức. Chiến lược này chỉ phát tín hiệu giao dịch khi giao của chỉ số Stoch xảy ra ở vùng mua quá mức.

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

Chiến lược này thiết lập cả cơ chế dừng lỗ và dừng chân. Khi giữ nhiều vị trí, nếu giá giảm xuống mức dừng lỗ được thiết lập, vị trí sẽ bị dừng nếu giá vượt quá mức dừng được thiết lập.

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

Phân tích lợi thế

Chiến lược này có những lợi thế chính như sau:

  1. Sử dụng EMA để đánh giá xu hướng của các cấp chính để tránh bị mắc kẹt trong một thị trường không rõ ràng.

  2. Đặc điểm của chỉ số Stoch là nó có thể phản ánh rất tốt liệu hiện tại đang ở khu vực quá mua hay quá bán, do đó, kết hợp với việc tạo ra tín hiệu chéo có thể giao dịch trong khu vực quá mua quá bán.

  3. Chiến lược này xác định rõ các môi trường có thể xảy ra trong quá nhiều và quá ít, cho phép các tín hiệu được lọc thêm, giảm khả năng của các tín hiệu sai, đồng thời tránh mở các vị trí mù quáng trong các thị trường phức tạp.

  4. Cơ chế quản lý rủi ro nghiêm ngặt giúp kiểm soát tổn thất của một giao dịch, kiểm soát tổng thể rút lui tối đa, đồng thời để lại đủ không gian cho giao dịch có lợi nhuận.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Các chỉ số như EMA, Stoch và các chỉ số khác đều có độ trễ, điều này có thể gây khó khăn cho chiến lược và cơ hội nắm bắt khi thị trường đảo ngược.

  2. Dựa vào chỉ số đơn thuần có thể tạo ra phán đoán định trước về thị trường, do đó bỏ lỡ cơ hội giao dịch mà thị trường thực sự cung cấp.

  3. Các cơ chế quản lý rủi ro cũng có thể là giới hạn trong không gian lợi nhuận của chiến lược, đặc biệt cần thận trọng trong việc thiết lập dừng lỗ và dừng vị trí trong xu hướng lớn.

  4. Chiến lược này cũng có một số rủi ro về lựa chọn tham số, ảnh hưởng của các tham số khác nhau đối với kết quả cần được phản hồi và tối ưu hóa rất nhiều để có được sự kết hợp tham số tối ưu.

Hướng tối ưu hóa

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

  1. Thử các loại EMA khác nhau, chẳng hạn như các chỉ số như đường trung bình di chuyển trọng lượng, Hull MA để đánh giá xu hướng và phân tích so sánh.

  2. Cố gắng kết hợp các chỉ số khác để tạo ra tín hiệu giao dịch, chẳng hạn như MACD, KDJ, v.v., để xây dựng hệ thống giao dịch đa chỉ số.

  3. Tối ưu hóa các thiết lập dừng lỗ và dừng để phù hợp hơn với sự biến động thực tế của thị trường. Bạn có thể thiết lập các điểm dừng lỗ lỏng lẻo hơn và các điểm dừng nghiêm ngặt hơn.

  4. Kiểm tra sự khác biệt trong hiệu suất của chiến lược này trong các giống khác nhau và các chu kỳ khác nhau để tìm ra sự kết hợp giống và chu kỳ tốt nhất.

  5. Cân nhắc việc sử dụng mô hình học máy hoặc mạng thần kinh để hỗ trợ định hướng xu hướng và tín hiệu giao dịch, để thực hiện các chiến lược thông minh.

Tóm tắt

Nhìn chung, chiến lược này sử dụng các chỉ số phổ biến để kết hợp, xây dựng một bộ chiến lược giao dịch theo dõi xu hướng khá trưởng thành. Nó xem xét cả việc phán đoán xu hướng và tạo ra tín hiệu giao dịch cụ thể, cũng như cơ chế quản lý rủi ro. Bằng cách tiếp tục tối ưu hóa, tin rằng chiến lược có thể đạt được hiệu quả thực tế tốt hơn.

Mã nguồn chiến lược
/*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)