Chiến lược này tạo ra tín hiệu giao dịch bằng cách tính toán sự chéo giữa hai đường EMA của các giai đoạn khác nhau để xác định xu hướng thị trường. Nó sẽ mở các vị trí dài khi EMA thời gian ngắn hơn vượt qua EMA thời gian dài hơn, cho thấy xu hướng tăng, và nó sẽ đóng các vị trí khi EMA thời gian ngắn hơn vượt qua dưới EMA thời gian dài hơn, cho thấy xu hướng giảm.
Chiến lược này chủ yếu áp dụng lý thuyết chéo vàng và chéo chết của đường EMA kép. Các đường EMA kép bao gồm đường EMA dài và đường EMA ngắn. Các thông số EMA ngắn được đặt thành 10 ngày và các thông số EMA dài được đặt thành 21 ngày.
Khi EMA ngắn vượt qua EMA dài, một tín hiệu mua được tạo ra. Khi EMA ngắn vượt qua dưới EMA dài, một tín hiệu bán được tạo ra. Chiến lược cũng thiết lập ngưỡng tốc độ tăng trưởng, chỉ mở các vị trí dài khi tăng trưởng vượt quá ngưỡng dương tính và đóng các vị trí chỉ khi giảm vượt quá ngưỡng âm.
Cụ thể, điều kiện mua là khi EMA ngắn cao hơn EMA dài và tốc độ tăng trưởng cổ phiếu vượt quá ngưỡng dương. Điều kiện vị trí đóng là khi EMA ngắn thấp hơn EMA dài và tốc độ tăng trưởng cổ phiếu giảm xuống dưới ngưỡng âm.
Chiến lược tổng thể tương đối đơn giản và đáng tin cậy, sử dụng đường chéo EMA kép để xác định xu hướng giá và thiết lập ngưỡng tốc độ tăng trưởng để tạo ra tín hiệu giao dịch. So với đường chéo đơn, nó có thể lọc ra một số tín hiệu sai. Nhưng các đường EMA có những vấn đề chậm trễ. Kết hợp các chỉ số khác hoặc điều chỉnh tham số năng động có thể cải thiện hơn nữa hiệu suất chiến lược.
/*backtest start: 2022-11-14 00:00:00 end: 2023-11-20 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(title="ema(ema10-21)", overlay=true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 15000, commission_type = strategy.commission.percent, commission_value = 0.2) useTimeLimit = input(defval = false, title = "Use Start Time Limiter?") startYear = input(defval = 2016, title = "Start From Year", minval = 0, step = 1) startMonth = input(defval = 05, title = "Start From Month", minval = 0,step = 1) startDay = input(defval = 01, title = "Start From Day", minval = 0,step = 1) startHour = input(defval = 00, title = "Start From Hour", minval = 0,step = 1) startMinute = input(defval = 00, title = "Start From Minute", minval = 0,step = 1) startTimeOk() => true lenght0 = input(10) lenght1 = input(21) source = close EmaShort = ema(ema(source, lenght0), lenght0) EmaLong = ema(ema(source, lenght1),lenght1) plot(EmaShort, color=red) plot(EmaLong, color=purple) growth = ((EmaShort-EmaLong)*100)/((EmaShort+EmaLong)/2) thresholdUp = input(defval=0.05, title="Threshold Up", type=float, step=0.01) thresholdDown = input(defval=-0.165, title="Threshold Down", type=float, step=0.001) if( startTimeOk() ) buy_condition = EmaShort > EmaLong and growth > thresholdUp buy_exit_condition = EmaShort < EmaLong and growth < thresholdDown strategy.entry("buy", strategy.long, comment="buy", when=buy_condition) strategy.close(id='buy', when=buy_exit_condition)