Chiến lược này được sửa đổi dựa trên chiến lược Amazing scalper for majors with risk management của SoftKill21 và sử dụng chỉ số di chuyển trung bình 3 lần thay cho trung bình di chuyển đơn giản ban đầu để giảm độ trễ. Chiến lược này áp dụng cho chu kỳ 1 phút của các cặp tiền tệ chính, sử dụng phương pháp theo dõi xu hướng để mua và bán giao dịch dựa trên giao dịch vàng và giao dịch chết của EMA nhanh, EMA tiêu chuẩn và EMA chậm.
Chiến lược này sử dụng moving average chỉ số của ba chu kỳ khác nhau: 25 chu kỳ EMA nhanh, 50 chu kỳ EMA tiêu chuẩn và 100 chu kỳ EMA chậm. 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 EMA tiêu chuẩn và EMA chậm, nó tạo ra tín hiệu bán.
Cụ thể, chiến lược đầu tiên tính toán ba đường EMA, sau đó đánh giá xem EMA nhanh có hình thành giao thoa vàng hoặc giao thoa vàng với EMA tiêu chuẩn và EMA chậm hay không, và nếu điều kiện phù hợp với thời gian mở cửa London hoặc New York được đáp ứng đồng thời, sẽ tạo ra tín hiệu mua hoặc bán. Để xác định kích thước vị trí, chiến lược đầu tiên tính toán tỷ lệ phần trăm cố định của quyền lợi tài khoản như một lỗ hổng rủi ro, sau đó chuyển đổi thành số hợp đồng và số giờ tiêu chuẩn, do đó điều chỉnh động vị trí của mỗi lệnh.
Chiến lược này có những ưu điểm sau:
Sử dụng ba EMA, có thể làm mịn dữ liệu giá một cách hiệu quả, xác định hướng xu hướng. EMA nhanh nhạy cảm với thay đổi giá, EMA tiêu chuẩn theo dõi ổn định, EMA chậm lọc tiếng ồn.
Sử dụng kỹ thuật làm mịn chỉ số thứ hai để tính toán EMA, giảm độ trễ và làm cho tín hiệu nhạy hơn.
Kết hợp các giờ giao dịch chính để tránh các tín hiệu sai lệch trong các giờ giao dịch không chính.
Sử dụng các nguyên tắc quản lý rủi ro, điều chỉnh vị trí theo quyền lợi của tài khoản.
Chiến lược logic đơn giản, rõ ràng, dễ hiểu và thích hợp cho người mới học.
Có thể điều chỉnh tối ưu hóa cho các cặp tiền tệ khác nhau, chu kỳ thời gian, á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:
EMA không có khả năng lọc hiệu quả các vụ đột phá giả ngắn hạn gây ra bởi các sự kiện bất ngờ, có thể tạo ra tín hiệu sai.
Vị trí tỷ lệ cố định không thể điều chỉnh động theo biến động của thị trường, có vấn đề về vị trí quá lớn hoặc quá nhỏ. Bạn có thể xem xét việc đưa ra các chỉ số động chỉnh vị trí như tỷ lệ biến động.
Chỉ xem xét hai thời điểm giao dịch chính, có thể bỏ lỡ cơ hội giao dịch ở các thời điểm khác. Bạn có thể thử nghiệm hiệu quả của các thời điểm khác nhau.
Không có cơ chế dừng lỗ, không thể kiểm soát hiệu quả lỗ đơn phương. Bạn có thể thiết lập dừng di chuyển hoặc dừng thời gian.
EMA cross có một số độ trễ, có thể bỏ lỡ thời điểm nhập cảnh tốt nhất. Bạn có thể xem xét giảm chu kỳ EMA hoặc kết hợp với các chỉ số tiên phong khác.
Hiệu quả có thể bị ảnh hưởng bởi chi phí giao dịch.
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Thử nghiệm các tham số khác nhau của chu kỳ EMA để tìm các tổ hợp tham số tối ưu. Có thể giới thiệu các kỹ thuật tự điều chỉnh EMA và tối ưu hóa động EMA.
Thêm các chỉ số lọc khác, như RSI, Blink, để cải thiện chất lượng tín hiệu.
Giới thiệu cơ chế quản lý vị trí động, điều chỉnh vị trí theo biến động thị trường và lợi nhuận.
Thêm dừng di chuyển, dừng thời gian để hạn chế lỗ. Điều chỉnh điểm dừng một cách thích hợp.
Kiểm tra các giai đoạn giao dịch khác nhau để tìm thời gian giao dịch tốt nhất. Các giai đoạn có thể được kết hợp với các chỉ số lọc như tỷ lệ biến động.
Tối ưu hóa mức dừng và dừng lỗ, cân bằng kích thước lợi nhuận và tỷ lệ chiến thắng. giới thiệu dừng lỗ thông minh như dừng đường parabola.
Cố gắng sửa đổi và cải thiện cách tính toán EMA, chẳng hạn như EMA cân nặng tuyến tính, để giảm sự chậm trễ.
Tìm các tham số tối ưu kết hợp với phương pháp học máy tự động.
Mô hình hóa chi phí giao dịch, điều chỉnh hệ thống để tối đa hóa lợi nhuận ròng.
Bằng cách tối ưu hóa như trên, bạn có thể nâng cao khả năng sinh lợi của hệ thống, kiểm soát rút lui, mở rộng phạm vi áp dụng, để có được một chiến lược giao dịch mạnh mẽ và ổn định hơn.
Chiến lược này có tư duy tổng thể rõ ràng, sử dụng EMA ba lần để xác định xu hướng, phối hợp với các thời điểm giao dịch chính để hoạt động và sử dụng tỷ lệ tài khoản để xác định vị trí, thuộc loại chiến lược theo dõi xu hướng điển hình. Chiến lược có không gian tối ưu hóa lớn, có thể mở rộng hơn nữa sự áp dụng của chiến lược trong nhiều thị trường thông qua các phương tiện tối ưu hóa tham số, cải tiến cơ chế, giới thiệu công nghệ, để cải thiện sự ổn định của chiến lược.
/*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)