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.
Chiến lược bao gồm ba phần chính:
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.
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.
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.
Những lợi thế chính của chiến lược này là:
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.
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.
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.
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.
Ngoài ra còn có một số rủi ro với chiến lược này:
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.
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.
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.
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.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
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ả.
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ố.
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.
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.
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, 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)