Giao dịch xu hướng với Hệ thống giao dịch chéo EMA đôi

Tác giả:ChaoZhang, Ngày: 2023-10-26 17:15:46
Tags:

img

Tổng quan

Hệ thống chéo EMA đôi là một hệ thống giao dịch theo xu hướng dựa trên hai đường trung bình chuyển động theo hàm số (EMA). Nó sử dụng hai đường EMA với các khoảng thời gian khác nhau để xác định hướng xu hướng hiện tại và tạo ra các tín hiệu giao dịch phù hợp. Với logic đơn giản và dễ thực hiện, hệ thống này có thể nắm bắt xu hướng thị trường hiệu quả và phù hợp với các nhà giao dịch trung và dài hạn.

Làm thế nào nó hoạt động

Trọng tâm của hệ thống này dựa trên hai EMA, một EMA nhanh hơn và một EMA chậm hơn. Khi EMA nhanh hơn trên EMA chậm, nó được coi là tăng. Khi EMA nhanh hơn dưới EMA chậm, nó được coi là giảm.

Dựa trên mối quan hệ giá với hai EMA, các thanh có thể được phân loại thành các khu vực giao dịch khác nhau:

  • Khi EMA nhanh nằm trên EMA chậm và giá nằm trên EMA nhanh (G1), đó là một vùng mua mạnh, một vị trí dài có thể được thực hiện ở đây.

  • Khi EMA nhanh dưới EMA chậm và giá dưới EMA nhanh (R1), đó là một vùng bán mạnh, một vị trí ngắn có thể được thực hiện ở đây.

  • Khi hai EMA qua nhau, các vùng cảnh báo (màu vàng) và chuyển tiếp (màu cam) được xác định dựa trên mối quan hệ giá với hai EMA.

Các tín hiệu giao dịch được tạo ra khi giá di chuyển qua các vùng khác nhau. Trong các vùng mạnh G1 và R1, các tín hiệu có thể được lấy trực tiếp. Trong các vùng cảnh báo và chuyển tiếp, cần xác nhận chỉ số bổ sung.

StochRSI cũng được thực hiện để hỗ trợ xác định các điểm vào và ra tiềm năng. Đọc quá bán và quá mua từ StochRSI có thể cung cấp tín hiệu mua và bán bổ sung.

Ưu điểm

  • Logic đơn giản và sạch sẽ dễ hiểu và thực hiện

  • Hiệu quả nắm bắt xu hướng trung bình đến dài hạn

  • Phân biệt các vùng mạnh từ các vùng cảnh báo / chuyển tiếp, tạo ra các tín hiệu giao dịch đáng tin cậy

  • Việc bao gồm StochRSI tiếp tục cải thiện thời gian vào và ra

Rủi ro

  • Là một hệ thống theo xu hướng thuần túy, hiệu suất có thể bị ảnh hưởng trong các thị trường không có xu hướng

  • Các thiết lập thời gian EMA không phù hợp có thể gây ra tín hiệu sai

  • Khu vực cảnh báo và khu vực chuyển tiếp có rủi ro giao dịch cao hơn và nên được xử lý thận trọng

  • Không có lệnh dừng lỗ có thể dẫn đến tổn thất tăng mạnh

Các rủi ro có thể được giảm bằng cách:

  1. Chọn các công cụ có xu hướng mạnh và tạm dừng giao dịch khi xu hướng yếu

  2. Tối ưu hóa thời gian EMA để giảm thiểu tín hiệu sai

  3. Thiết lập các chỉ số bổ sung để xác nhận trong các vùng cảnh báo/chuyển tiếp

  4. Thực hiện lệnh dừng lỗ để kiểm soát lỗ cho mỗi giao dịch

Cơ hội gia tăng

Hệ thống có thể được cải thiện hơn nữa trong các lĩnh vực sau:

  1. Kết hợp nhiều chỉ số như MACD, KDJ để xác nhận tín hiệu

  2. Thêm các bộ lọc như mở rộng khối lượng trong các khu vực giao dịch để cải thiện tỷ lệ thành công giao dịch

  3. Điều chỉnh năng động các khoảng thời gian EMA dựa trên điều kiện thị trường cho các thông số tối ưu

  4. Thực hiện các chiến lược dừng lỗ để thoát khỏi các giao dịch ở tỷ lệ phần trăm lỗ nhất định

  5. Tối ưu hóa kích thước vị trí và quản lý tiền

  6. Kiểm tra và tinh chỉnh các tham số trên các dụng cụ khác nhau để tìm các cấu hình tốt nhất

Bằng cách giới thiệu nhiều xác nhận tín hiệu, tối ưu hóa tham số động, dừng lỗ và quản lý tiền đúng cách, độ bền của hệ thống có thể được cải thiện và giảm rủi ro để có kết quả tốt hơn.

Kết luận

Hệ thống Double EMA Crossover là một hệ thống theo dõi xu hướng dựa trên việc so sánh hai EMA. Nó xác định các khu vực giao dịch khác nhau dựa trên mối quan hệ giá với EMA để xác định hướng xu hướng và tạo ra các tín hiệu giao dịch. Là một hệ thống có logic rõ ràng và dễ thực hiện, nó có thể nắm bắt xu hướng hiệu quả. Trong khi rủi ro tồn tại, chúng có thể được giảm thông qua các chỉ số phụ trợ, tối ưu hóa năng động, dừng lỗ và quản lý tiền. Nhìn chung, hệ thống Double EMA Crossover là một hệ thống theo dõi xu hướng vững chắc phù hợp cho các nhà giao dịch trung và dài hạn.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-25 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/
// © Vvaz_
//base-on CDC ActionZone By Piriya   a simple 2EMA and is most suitable for use with medium volatility market
//@version=4
strategy(title="Vin's Playzone" ,shorttitle="VPz", overlay=true, margin_long=4, margin_short=2)

//variable
srcf = input(title="Source",type=input.source,defval=close)
tffix = input(title="Fixed Timeframe",type=input.bool,defval=true)
tfn = input(title="Timeframe in",type=input.resolution,defval="D")
ema1 = input(title="Fast EMA",type=input.integer,defval=12)
ema2 = input(title="Slow EMA",type=input.integer,defval=26)
ema3 = input(title="EMA 100",type=input.bool,defval=true)
smooter =input(title="Smoothing period (1 = no smoothing)",type=input.integer,defval=2)
fillbar =input(title="Fill Bar Color",type=input.bool,defval=true)
emasw = input(title="Show EMA",type=input.bool,defval=true)
bssw = input(title="Show Buy-Sell signal",type=input.bool,defval=true)
plotmm = input(title="Show Buy-Sell Momentum",type=input.bool,defval=true)
plotmmsm = input(title="RSI Smoothing",type=input.integer,defval=0,minval=0,maxval=2)

//math
xcross =ema(srcf,smooter)
efast = tffix ?  ema(security(syminfo.tickerid,tfn,ema(srcf,ema1), gaps = barmerge.gaps_off,lookahead = barmerge.lookahead_on),smooter) :ema(xcross,ema1)
eslow = tffix ?  ema(security(syminfo.tickerid,tfn,ema(srcf,ema2), gaps = barmerge.gaps_off,lookahead = barmerge.lookahead_on),smooter) :ema(xcross,ema2)
ema3x = ema(xcross,100)


//Zone
Bull = efast > eslow
Bear = efast < eslow

G1 = Bull and xcross > efast //buy
G2 = Bear and xcross > efast and xcross > eslow //pre-buy1
G3 = Bear and xcross > efast and xcross < eslow //pre-buy2

R1 = Bear and xcross < efast //sell
R2 = Bull and xcross < efast and xcross < eslow //pre-sell1
R3 = Bull and xcross < efast and xcross > eslow //pre-sell2

//color
bcl =   G1 ? color.green :  G2 ? color.yellow : G3 ? color.orange :R1 ? color.red :R2 ? color.orange : R3 ? color.yellow : color.black
barcolor(color=fillbar ? bcl : na )

//plots
line1 = plot(ema3 ? ema3x : na ,"EMA100",color=color.white)
line2 = plot(emasw ? efast : na ,"Fast EMA",color=color.green)
line3 = plot(emasw ? eslow : na ,"Slow EMA",color=color.red)
fillcl = Bull ? color.green : Bear ? color.red : color.black
fill(line2,line3,fillcl)

//actions
buywhen = G1 and G1[1]==0
sellwhen = R1 and R1[1]==0

bullish = barssince(buywhen) < barssince(sellwhen)
bearish = barssince(sellwhen) < barssince(buywhen)

buy = bearish[1] and buywhen
sell = bullish[1] and sellwhen

bullbearcl = bullish ? color.green : bearish ? color.red : color.black

//plot trend
plotshape(bssw ? buy : na ,style=shape.arrowup,title="BUY",location=location.belowbar,color=color.green)
plotshape( bssw ? sell : na ,style=shape.arrowdown ,title="Sell",location=location.abovebar,color=color.red)

// Momentum Signal using StochRSI

smoothK = input(5,"StochRSI smooth K",type=input.integer,minval=1)
smoothD = input(4,"StochRSI smooth D",type=input.integer,minval=1)
RSIlen = input(14,"RSI length",type=input.integer,minval=1)
STOlen = input(14,"Stochastic length",type=input.integer,minval=1)
SRsrc = input(close,"Source for StochasticRSI",type=input.source)
OSlel = input(20,"Oversold Threshold",type=input.float,minval=0.00)
OBlel = input(80,"Oversold Threshold",type=input.float,minval=0.00)
rsil = rsi(SRsrc,RSIlen)
K = sma(stoch(rsil,rsil,rsil,STOlen),smoothK)
D = sma(K,smoothD)

buymore = iff( bullish ,iff(D < OSlel and crossover(K,D),	2,	 iff(D > OSlel and crossover(K,D),	 1,0)),0)
sellmore = iff( bearish,iff(D > OBlel and crossunder(K,D),	2,	 iff(D < OBlel and crossunder(K,D),	 1,0)),0)
//plot momentum
plotshape(plotmm ? buymore > plotmmsm ? buymore : na : na ,"Buy More!" ,style=shape.triangleup,location=location.belowbar,color=color.green)
plotshape(plotmm ? sellmore > plotmmsm ? sellmore : na : na ,"Sell More!" ,style=shape.triangledown,location=location.abovebar,color=color.red)


// === INPUT BACKTEST RANGE ===
FromYear  = input(defval = 2009, title = "From Year", minval = 2009)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2009)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

//stratgy excuter
strategy.entry("Long",true,when=window() and buy or buymore)
strategy.close("Long",when=window() and sell or sellmore,comment="TP Long")
strategy.entry("Short",false,when=window() and sell or sellmore)
strategy.close("Short",when=window() and buy or buymore,comment="TP Short")




        

Thêm nữa