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.
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.
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
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:
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
Tối ưu hóa thời gian EMA để giảm thiểu tín hiệu sai
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
Thực hiện lệnh dừng lỗ để kiểm soát lỗ cho mỗi giao dịch
Hệ thống có thể được cải thiện hơn nữa trong các lĩnh vực sau:
Kết hợp nhiều chỉ số như MACD, KDJ để xác nhận tín hiệu
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
Đ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
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
Tối ưu hóa kích thước vị trí và quản lý tiền
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.
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")