255 Chiến lược giao dịch đảo ngược EMA và MACD

Tác giả:ChaoZhang, Ngày: 2023-09-20 15:08:14
Tags:

Tổng quan

Chiến lược này sử dụng chỉ số EMA và MACD 255 giai đoạn để xác định các cơ hội giao dịch đảo ngược. Nó đi vào các vị trí đảo ngược khi giá ở xa đường chéo 255 EMA và MACD xảy ra.

Chiến lược logic

  1. EMA 255 thời gian được sử dụng để xác định hướng xu hướng trung hạn đến dài hạn. Giá xa EMA đại diện cho khu vực mua/bán quá mức.

  2. Các băng tần trên và dưới được thiết lập dựa trên EMA, với chiều rộng băng tần được điều chỉnh năng động bởi chỉ số ATR.

  3. Khi giá ở trên dải trên, nó ở trong vùng mua quá mức. Khi dưới dải dưới, nó ở trong vùng bán quá mức. Đây là những tình huống để dự đoán sự đảo ngược.

  4. Chỉ số MACD sử dụng các thông số tiêu chuẩn (12, 26, 9).

  5. Kết hợp với tín hiệu EMA mua quá mức / bán quá mức và MACD, các vị trí đảo ngược được thực hiện khi giá xa EMA và đảo ngược MACD xảy ra.

Phân tích lợi thế

  1. EMA 255 giai đoạn có thể xác định xu hướng trung và dài hạn khá tốt.

  2. Các đường chéo MACD có thể nắm bắt các cơ hội đảo ngược ngắn hạn một cách nhạy cảm.

  3. Các dải EMA giúp xác định các khu vực mua quá mức / bán quá mức để tránh theo đuổi xu hướng.

  4. Giao dịch ngược cho phép nhập sớm trước khi đảo ngược giá, với một số đặc điểm dựa trên kế hoạch.

  5. Động lực ATR dừng lỗ có thể kiểm soát rủi ro một cách hiệu quả.

Phân tích rủi ro

  1. Các tín hiệu MACD có thể có sự đảo ngược sai, dẫn đến tổn thất không cần thiết.

  2. Sự đảo ngược có thể thất bại trong các kịch bản xu hướng mạnh, vì vậy nên tránh sự đảo ngược mù quáng.

  3. Đặt stop loss quá chặt có thể bị dừng sớm, trong khi quá rộng có thể dẫn đến kiểm soát rủi ro không đủ.

  4. Việc điều chỉnh tham số không đúng cũng có thể ảnh hưởng đến hiệu suất chiến lược, đòi hỏi tối ưu hóa lặp đi lặp lại.

  5. Chi phí giao dịch cũng có thể ảnh hưởng đến lợi nhuận cuối cùng và nên được xem xét.

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

  1. Kiểm tra các giai đoạn EMA khác nhau để tìm một chỉ số xu hướng trung và dài hạn tốt hơn.

  2. Cố gắng kết hợp các chỉ số khác với EMA để xác định mua quá mức / bán quá mức, ví dụ: Bollinger Bands, KD, RSI.

  3. Tối ưu hóa các thông số MACD để có độ nhạy hoặc ổn định tốt hơn.

  4. Kiểm tra các phương pháp dừng lỗ khác, như dừng lại để khóa lợi nhuận.

  5. Tối ưu hóa các tham số trên các sản phẩm và khung thời gian khác nhau để có độ bền.

  6. Kết hợp bộ lọc sức mạnh xu hướng để tránh đảo ngược trong xu hướng mạnh.

Kết luận

Chiến lược này kết hợp xu hướng EMA trung đến dài và sự đảo ngược ngắn hạn của MACD, giao dịch ngược ở các khu vực mua quá mức / bán quá mức. Đây là một chiến lược đảo ngược cơ bản với ưu và nhược điểm. Việc điều chỉnh tham số và kiểm soát rủi ro thêm có thể biến nó thành một hệ thống giao dịch hiệu quả. Nhưng bất kỳ chiến lược nào cũng cần điều chỉnh thích nghi theo môi trường thị trường, không phải tín hiệu cơ học.


/*backtest
start: 2023-09-12 00:00:00
end: 2023-09-19 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © bufirolas

//--- From 15 Trading Examples by Trader Alyx ---
// Seems like this strategy works better if we reverse the EMA filter logic.

// "Description: This basic scalping strategy allows you to enter the market based upon sentiment
// provided by the EMA, set at 255 periods. When price is trading below the 255 EMA, you would
// look to enter a LONG BUY positions, and when price is trading above the 255 EMA, you would
// look to enter a SELL SHORT position. The MACD lagging indicator will show you clear signals for
// when to do this. When the MACD lines cross in a bullish manner and price is below the 255
// EMA, buy. When the MACD lines cross in a bearish manner and price is above the 255 EMA,
// sell.
// NOTE: Make sure that price is trading away from the 255EMA before entering a LONG or SHORT
// position. As you can see in the chart below, the clearest signs for trade entry were presented
// when price was trading AWAY from the 255EMA"

//@version=4
// strategy("255 EMA Strategy", overlay=true, pyramiding=1, default_qty_type=strategy.cash, default_qty_value=100, commission_value = 0.04, initial_capital=100)

//Inputs
i_reverse=input(false, title="Trade Reverse")
i_EMAreverse=input(true, title="EMA Reverse Entry")
i_EMAlength=input(defval=255, title="EMA Length")
i_EMAexpander=input(defval=5, title="EMA Expander")
i_MACDmult=input(defval=1, minval=1, title="MACD Mult")

//SL & TP Calculations
i_SL=input(true, title="Use Swing Lo/Hi Stop Loss & Take Profit")
i_SwingLookback=input(20, title="Swing Lo/Hi Lookback")
i_SLExpander=input(defval=0, step=.2, title="SL Expander")*.01
i_TPExpander=input(defval=0, step=.2, title="TP Expander")*.01


//Strategy Variables
EMA=ema(close,i_EMAlength)
[macdLine, signalLine, histLine]=macd(close, 12*i_MACDmult, 26*i_MACDmult, 9*i_MACDmult)
EMAupper=EMA+((atr(100))*i_EMAexpander)
EMAlower=EMA-((atr(100))*i_EMAexpander)

//SL & TP Variables
SwingLow=lowest(i_SwingLookback)
SwingHigh=highest(i_SwingLookback)

//Calculations
EMAbuy=i_EMAreverse ? close > EMAupper : close < EMAlower
EMAsell=i_EMAreverse ? close < EMAlower : close > EMAupper
MACDbuy=crossover(macdLine, signalLine)
MACDsell=crossunder(macdLine, signalLine)

//SL & TP Calculations
bought=strategy.position_size != strategy.position_size[1]
lSL=valuewhen(bought, SwingLow, 0)*(1-i_SLExpander)
sSL=valuewhen(bought, SwingHigh, 0)*(1+i_SLExpander)
lTP=strategy.position_avg_price + (strategy.position_avg_price-(valuewhen(bought, SwingLow, 0))*(1-i_TPExpander))
sTP=strategy.position_avg_price - (valuewhen(bought, SwingHigh, 0) - strategy.position_avg_price)*(1+i_TPExpander*100)
islong=strategy.position_size > 0
isshort=strategy.position_size < 0
SL= islong ? lSL : isshort ? sSL : na
TP= islong ? lTP : isshort ? sTP : na


//Entries
strategy.entry("long", long=not i_reverse?true:false, when=EMAbuy and MACDbuy)
strategy.entry("short", long=not i_reverse?false:true, when=EMAsell and MACDsell)

//Exits
if i_SL
    strategy.exit("longexit", "long", stop=SL, limit=TP)
    strategy.exit("shortexit", "short", stop=SL, limit=TP)

//Plots
plot(EMA, "EMA", color=color.white, linewidth=2)
plot(EMAupper, "EMA Upper Band")
plot(EMAlower, "EMA Lower Band")
plot(i_SL ? SL : na, color=color.red, style=plot.style_cross, title="SL")
plot(i_SL ? TP : na, color=color.green, style=plot.style_cross, title="TP")





Thêm nữa