Chiến lược giao dịch đột phá EMA đôi


Ngày tạo: 2023-10-16 16:24:00 sửa đổi lần cuối: 2023-10-16 16:24:00
sao chép: 1 Số nhấp chuột: 738
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch đột phá EMA đôi

Tổng quan

Chiến lược giao dịch đột phá EMA kép là một chiến lược theo dõi xu hướng sử dụng hai đường trung bình EMA của hai chu kỳ khác nhau để đánh giá tín hiệu mua và bán. Chiến lược này kết hợp với các chỉ số EMA bổ sung để lọc tín hiệu giao dịch, có thể có thời gian nhập cảnh tốt hơn trong tình huống xu hướng.

Nguyên tắc

Chiến lược này sử dụng các đường EMA nhanh ((9 chu kỳ) và đường EMA chậm ((21 chu kỳ) để đánh giá thời gian mua và bán. Hàm mua được tạo ra khi đường nhanh đi qua đường chậm và Hàm bán được tạo ra khi đường nhanh đi qua đường chậm. Để lọc các tín hiệu giả, chiến lược cũng đưa ra EMA hỗ trợ ((5 chu kỳ) và hai EMA khác ((1, 4 chu kỳ).

Khi tín hiệu giao dịch được kích hoạt, chiến lược sẽ thiết lập điểm dừng lỗ và điểm dừng dựa trên giá trị ATR. TP1 là gấp 6 lần ATR, để lấy phần lợi nhuận nhanh hơn. Nếu giá không kích hoạt TP1, khi đường thẳng EMA lại vượt qua EMA hỗ trợ, nó sẽ trực tiếp phẳng vị trí và thực hiện điểm dừng TP2.

Ưu điểm

  • Sử dụng hai EMA để lọc các tín hiệu giả để cải thiện chất lượng tín hiệu giao dịch
  • Các chỉ số EMA hỗ trợ xác minh thêm hướng xu hướng, giảm nguy cơ đảo ngược
  • Thiết kế hai chuông, nhanh chóng và bền vững theo dõi xu hướng
  • ATR có thể được điều chỉnh theo biến động của thị trường để giảm rủi ro

Rủi ro và tối ưu hóa

  • Chỉ số EMA có thể gây ra sự phù hợp đường cong, tín hiệu giao dịch có thể bị chậm lại
  • Các cặp EMA ngắn có thể tạo ra nhiều tín hiệu giao dịch ồn ào hơn
  • Hoạt động đường dây ngắn dễ bị ảnh hưởng bởi các sự kiện bất ngờ, có nguy cơ bị hư hỏng cao hơn

Định hướng tối ưu hóa:

  • Kiểm tra nhiều nhóm tham số EMA để tìm tham số tốt hơn
  • Thêm xác thực các chỉ số khác, chẳng hạn như khối lượng giao dịch, biến động
  • Giảm khả năng kích hoạt lệnh dừng
  • Tối ưu hóa tỷ lệ thiết lập hai trạm dừng, cân bằng tốc độ lợi nhuận và hiệu quả sử dụng vốn

Tóm tắt

Chiến lược giao dịch phá vỡ hai EMA sử dụng giao dịch chéo của hai EMA để đánh giá xu hướng, hỗ trợ bởi nhiều bộ lọc EMA và ATR động dừng lỗ, có thể theo dõi xu hướng hiệu quả. Tuy nhiên, các vấn đề như phù hợp với đường cong EMA, rủi ro dừng lỗ cần lưu ý.

Overview

The dual EMA crossover trading strategy utilizes two EMA lines of different periods to generate buy and sell signals by identifying trend direction. It also incorporates additional EMA indicators for signal filtering, allowing better entry timing in trending markets.

Principles

The strategy uses a fast EMA line (9 periods) and a slow EMA line (21 periods) to determine entries. A golden cross where the fast EMA crosses above the slow EMA generates a buy signal, while a death cross with the fast EMA crossing below the slow EMA produces a sell signal. To filter out false signals, the strategy also employs an auxiliary EMA (5 periods) and two more EMAs (1 period, 4 periods). A real trading signal is only triggered when the fast and slow EMAs cross while the auxiliary EMA is between the two, and the 1-period EMA is above the 4-period EMA.

Once a trading signal is triggered, the strategy utilizes ATR values to set stop loss and take profit levels. TP1 is set at 6 x ATR for faster profit taking. If price doesn’t hit TP1, the strategy will close the position directly when the fast EMA crosses back over the auxiliary EMA, realizing TP2.

Advantages

  • Dual EMA design filters false signals and improves signal quality
  • Auxiliary EMA adds trend direction verification, reducing reverse trade risks
  • Dual take profit allows fast profit and sustained trend following
  • Dynamic ATR stop loss/take profit adjusts to market volatility

Risks and Improvements

  • EMAs can lag prices and generate late signals
  • Shorter EMA combos may produce more noise
  • Tighter stops face larger sudden event risks

Improvement directions:

  • Test multiple EMA combos for better parameters
  • Add other confirmation indicators like volume, volatility etc.
  • Widen stop loss to lower stop out odds
  • Optimize take profit ratios for profit vs capital efficiency

Conclusion

The dual EMA crossover strategy leverages EMA crosses for trend direction, along with multiple EMA filtering and dynamic ATR stop loss/profit taking. This allows effective trend following and profit harvesting. However, EMA fitting limitations and stop loss risks require caution. Proper optimization, risk management etc. can lead to more robust performance. The strategy suits experienced traders to achieve high capital efficiency in trending markets.

[/trans]

Mã nguồn chiến lược
/*backtest
start: 2022-10-09 00:00:00
end: 2023-04-13 00:00:00
period: 1d
basePeriod: 1h
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/
// @author ADHDCRYPT0

//@version=4
strategy(title = "EMA double crossover", shorttitle = "(TEST) double cross over", overlay = true, default_qty_value = 100, initial_capital = 1000,default_qty_type=strategy.percent_of_equity, pyramiding=0, process_orders_on_close=true)


// Variables
ema_len1 = input(9 , title="Fast EMA")
ema_len2 = input(21, title="Slow EMA")
ema_len3 = input(5, title="Exit EMA")
ema_len4 = input(1, title="FastConf EMA")
ema_len5 = input(4, title="SlowConf EMA")

fastEMA = ema(open, ema_len1)
slowEMA = ema(open, ema_len2)
exitEMA = ema(open, ema_len3)
conf1EMA = ema(open, ema_len4)
conf2EMA = ema(open, ema_len5)
plot(fastEMA, title='fastEMA', transp=0, color=color.green)
plot(slowEMA, title='slowEMA', transp=0, color=color.red  )
plot(exitEMA, title='exitEMA', transp=0, color=color.orange)
plot(conf1EMA, title='conf1EMA', transp=0, color=color.blue)
plot(conf2EMA, title='conf2EMA', transp=0, color=color.black)

vol = volume 
volma = sma(volume,7)
vol_cond = vol>volma

atr = atr(5)


// Entry Conditions and vol_cond
long = crossover(fastEMA, slowEMA) and (conf1EMA > conf2EMA) and (fastEMA < exitEMA)
short= crossunder(fastEMA, slowEMA) and (conf1EMA < conf2EMA) and (fastEMA > exitEMA)

tradeType = input("BOTH", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH", "NONE"])

pos = 0.0

if tradeType=="BOTH"
    pos:= long? 1 : short? -1 : pos[1]
if tradeType=="LONG"
    pos:= long? 1 : pos[1]
if tradeType=="SHORT"
    pos:=short? -1 : pos[1]

longCond  = long  and (pos[1]!= 1 or na(pos[1]))
shortCond = short and (pos[1]!=-1 or na(pos[1]))

// EXIT FUNCTIONS //
sl  = input(1, title="Stop Loss (ATR)", minval=0)
tp  = input(6, title="Take Profit 1 (ATR)", minval=0)

// Simple Stop Loss + 2 Take Profits
sl_long   =  valuewhen(longCond , low - atr * sl, 0)
sl_short  =  valuewhen(shortCond, high+ atr * sl, 0)

tp_long  = valuewhen(longCond , high + atr * tp, 0)
tp_short = valuewhen(shortCond, low  - atr * tp, 0)


long_exit = crossover(fastEMA, exitEMA) and pos[1]==1
short_exit= crossover(exitEMA, fastEMA) and pos[1]==-1

if long_exit or short_exit
	pos:=0


// Position Adjustment
long_sl  = low <sl_long [1] and pos[1]==1
short_sl = high>sl_short[1] and pos[1]==-1

if long_sl or short_sl
    pos:=0
    
//  Strategy Backtest Limiting Algorithm
i_startTime = input(defval = timestamp("01 Sep 2002 13:30 +0000"), title = "Backtesting Start Time", type = input.time)
i_endTime = input(defval = timestamp("30 Sep 2099 19:30 +0000"), title = "Backtesting End Time", type = input.time)
timeCond = true


// Make sure we are within the bar range, Set up entries and exit conditions
if strategy.equity >0
    strategy.entry("long" , strategy.long , when=longCond  and timeCond and tradeType!="SHORT" , alert_message="INSERT MESSAGE HERE")
    strategy.entry("short", strategy.short, when=shortCond and timeCond and tradeType!="LONG" , alert_message="INSERT MESSAGE HERE")
    
    strategy.exit("SL/TP1", from_entry = "long" , stop=sl_long , limit=tp_long , alert_message="INSERT MESSAGE HERE")
    strategy.exit("SL/TP1", from_entry = "short", stop=sl_short, limit=tp_short, alert_message="INSERT MESSAGE HERE")

    strategy.exit("SL", from_entry = "long" , stop=sl_long, alert_message="INSERT MESSAGE HERE")
    strategy.exit("SL", from_entry = "short", stop=sl_short, alert_message="INSERT MESSAGE HERE")
    
    strategy.close("long", when=long_exit , comment="TP2", alert_message="INSERT MESSAGE HERE")
    strategy.close("short", when=short_exit, comment="TP2", alert_message="INSERT MESSAGE HERE")