Chiến lược này được sửa đổi từ SoftKill21
Chiến lược này sử dụng ba EMA với các khoảng thời gian khác nhau: EMA nhanh 25 giai đoạn, EMA tiêu chuẩn 50 giai đoạn và EMA chậm 100 giai đoạn. Khi EMA nhanh vượt qua EMA tiêu chuẩn và EMA chậm, nó tạo ra tín hiệu mua. Khi EMA nhanh vượt qua dưới EMA tiêu chuẩn và EMA chậm, nó tạo ra tín hiệu bán. Để giảm độ trễ, EMA được tính bằng kỹ thuật làm mịn theo hàm số nhân đôi. Chiến lược cũng kiểm tra xem thời gian mở thị trường của các phiên London hoặc New York có phù hợp với điều kiện nhập cảnh không. Ngoài ra, kích thước vị trí của mỗi lệnh được xác định năng động bằng cách sử dụng một tỷ lệ phần trăm cố định của vốn chủ sở hữu tài khoản để kiểm soát rủi ro.
Đặc biệt, chiến lược đầu tiên tính toán ba đường EMA, sau đó kiểm tra xem EMA nhanh hình thành đường chéo vàng hoặc đường chéo chết với EMA tiêu chuẩn và EMA chậm. Nếu điều kiện cũng phù hợp với thời gian thị trường mở London hoặc New York, các tín hiệu mua hoặc bán được tạo ra. Khi xác định kích thước vị trí, chiến lược tính toán tỷ lệ phần trăm cố định của vốn chủ sở hữu tài khoản như là rủi ro, sau đó chuyển đổi thành kích thước hợp đồng và vòng để điều chỉnh vị trí một cách năng động cho mỗi lệnh.
Chiến lược có những lợi thế sau:
Các EMA ba có thể làm mịn dữ liệu giá hiệu quả và xác định hướng xu hướng. EMA nhanh nhạy với sự thay đổi giá, EMA tiêu chuẩn theo dõi đều đặn và EMA chậm lọc tiếng ồn.
Việc sử dụng làm mịn theo hàm số kép làm giảm độ trễ và làm cho tín hiệu nhạy cảm hơn.
Bao gồm các phiên giao dịch lớn tránh các tín hiệu gây hiểu nhầm trong giờ cao điểm.
Cách tiếp cận quản lý rủi ro điều chỉnh kích thước vị trí dựa trên vốn chủ sở hữu tài khoản, tránh mất mát quá mức trên các giao dịch đơn lẻ.
Logic là đơn giản và rõ ràng, dễ hiểu và thực hiện, phù hợp cho người mới bắt đầu.
Chiến lược có thể được tối ưu hóa và điều chỉnh cho các cặp tiền tệ và khung thời gian khác nhau, với khả năng áp dụng rộng rãi.
Chiến lược này cũng có một số rủi ro tiềm ẩn:
Các EMA không thể lọc hiệu quả các sự đột phá sai ngắn hạn do các sự kiện đột ngột gây ra, có thể tạo ra các tín hiệu sai.
Định dạng vị trí theo tỷ lệ phần trăm cố định không thể điều chỉnh năng động theo biến động thị trường, dẫn đến các vị trí quá lớn hoặc quá nhỏ.
Chỉ có hai phiên chính được xem xét, có thể bỏ lỡ cơ hội giao dịch trong các phiên khác.
Thiếu cơ chế dừng lỗ dẫn đến không thể kiểm soát hiệu quả lỗ một mặt.
Việc cắt giảm thời gian EMA hoặc kết hợp các chỉ số hàng đầu có thể giúp ích.
Hiệu suất có thể bị ảnh hưởng bởi chi phí giao dịch.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Kiểm tra các thông số EMA giai đoạn khác nhau để tìm kết hợp tối ưu.
Thêm các chỉ số lọc khác như RSI, Bollinger Bands để cải thiện chất lượng tín hiệu.
Thiết lập quy mô vị trí năng động dựa trên biến động thị trường và lợi nhuận.
Thêm chuyển động hoặc thời gian dừng mất để hạn chế tổn thất.
Kiểm tra các phiên giao dịch khác nhau để tìm thời gian tối ưu.
Tối ưu hóa mức lấy lợi nhuận và dừng lỗ để cân bằng kích thước lợi nhuận và tỷ lệ thắng.
Hãy thử sửa đổi tính toán EMA như EMA cân nhắc tuyến tính để giảm lag.
Sử dụng máy học để tìm các thông số tối ưu.
Chi phí giao dịch mô hình và điều chỉnh hệ thống cho lợi nhuận ròng tối đa.
Thông qua các tối ưu hóa trên, lợi nhuận của hệ thống có thể được cải thiện, kiểm soát rút tiền, mở rộng khả năng áp dụng, để có được một chiến lược giao dịch mạnh mẽ và mạnh mẽ hơn.
Lý thuyết tổng thể của chiến lược này là rõ ràng, sử dụng EMA ba để xác định xu hướng, kết hợp với các phiên chính để thực hiện, và áp dụng quy mô vị trí dựa trên tỷ lệ phần trăm tài khoản. Nó thuộc về một hệ thống theo xu hướng điển hình. Có nhiều chỗ để tối ưu hóa thông qua điều chỉnh tham số, cải tiến cơ chế, giới thiệu công nghệ vv để mở rộng hơn nữa khả năng áp dụng của nó trên nhiều thị trường hơn và cải thiện độ mạnh mẽ. Là một điểm bắt đầu học tập cho người mới bắt đầu, nó cung cấp một điểm khởi đầu tốt. Với thực hành và nâng cao, nó có thể chuyển thành một chiến lược định lượng trưởng thành và đáng tin cậy.
/*backtest start: 2023-09-19 00:00:00 end: 2023-09-26 00:00:00 period: 15m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // original author SoftKill21 //@version=4 //@capam strategy(title="Triple EMA Scalper low lag strat", shorttitle="3EMA scalper", overlay=true) strategy.initial_capital = 50000 len1 = input(25, minval=1, title="Length") len2 = input(50, minval=1, title="Length") len3 = input(100, minval=1, title="Length") src = input(close, title="Source") tmp1 = ema(src, len1) tmp2 = ema(src, len2) tmp3 = ema(src, len3) fastemaOut = 2*tmp1 - ema(tmp1, len1) standardemaOut = 2*tmp2 - ema(tmp2, len2) slowemaOut = 2*tmp3 - ema(tmp3, len3) //fastemaOut = sma(src, len1) //standardemaOut = sma(src, len2) //slowemaOut = sma(src, len3) plot(fastemaOut, color=color.black, title="First EMA") plot(standardemaOut, color=color.yellow, title="Second EMA") plot(slowemaOut, color=color.blue, title="Third EMA") timeinrange(res, sess) => time(res, sess) != 0 londopen = timeinrange(timeframe.period, "0300-1100") nyopen = timeinrange(timeframe.period, "0800-1600") longCondition = crossover(fastemaOut,standardemaOut) and crossover(fastemaOut,slowemaOut) and londopen //or nyopen) shortCondition = crossunder(fastemaOut,standardemaOut) and crossunder(fastemaOut,slowemaOut) and londopen// or nyopen) longCondition2 = crossover(fastemaOut,standardemaOut) and crossover(fastemaOut,slowemaOut) and nyopen shortCondition2 = crossunder(fastemaOut,standardemaOut) and crossunder(fastemaOut,slowemaOut) and nyopen tp = input(50,title="TP") sl = input(100, title="SL") tradeLondon = input(title="Trade london session?", type=input.bool, defval=true) tradeNewyork = input(title="Trade new york session?", type=input.bool, defval=true) //MONEY MANAGEMENT-------------------------------------------------------------- balance = strategy.netprofit + strategy.initial_capital //current balance floating = strategy.openprofit //floating profit/loss risk = input(1,type=input.float,title="Risk % of equity ")/100 //risk % per trade temp01 = balance * risk //Risk in USD temp02 = temp01/sl //Risk in lots temp03 = temp02*100000 //Convert to contracts size = temp03 - temp03%1000 //Normalize to 1000s (Trade size) if(size < 1000) size := 1000 if(tradeLondon==true) strategy.entry("long",1,when=longCondition) strategy.exit("tp/sl","long",profit=tp,loss=sl) strategy.entry("short",0,when=shortCondition) strategy.exit("tp/sl","short",profit=tp,loss=sl) if(tradeNewyork==true) strategy.entry("long",1,when=longCondition2) strategy.exit("tp/sl","long",profit=tp,loss=sl) strategy.entry("short",0,when=shortCondition2) strategy.exit("tp/sl","short",profit=tp,loss=sl) // strategy.risk.max_intraday_filled_orders(2)