Chiến lược này là một hệ thống trung bình động dựa trên 4 SMMA (Smoothed Moving Average) với các khoảng thời gian khác nhau và 1 chỉ số EMA. Nó kết hợp nhiều công cụ phân tích kỹ thuật để hình thành một chiến lược giao dịch thông qua phán đoán xu hướng. Chiến lược này chủ yếu phù hợp với giao dịch nội ngày trái phiếu 15 phút EURUSD có đòn bẩy cao.
Chỉ số EMA là một chỉ số giao dịch có tính năng phân tích các xu hướng dài hạn.
Khi đường trung bình di chuyển ngắn hạn (như SMMA 3 giai đoạn) vượt qua đường trung bình di chuyển dài hạn (như EMA 200 giai đoạn), một tín hiệu mua được tạo ra. Khi đường trung bình di chuyển ngắn hạn vượt qua đường trung bình di chuyển dài hạn, một tín hiệu bán được tạo ra. Bằng cách đánh giá sự sắp xếp của nhiều đường trung bình di chuyển, hướng xu hướng được xác định.
Ngoài ra, chiến lược cũng thiết lập điểm dừng lợi nhuận và dừng lỗ để kiểm soát rủi ro.
Chiến lược có những lợi thế sau:
Cấu trúc trung bình động đa cấp có thể xác định hiệu quả hướng xu hướng và giảm các tín hiệu sai.
Chỉ số SMMA lọc hiệu quả tiếng ồn thị trường, và chỉ số EMA phát hiện xu hướng dài hạn.
Nó phù hợp với các tài khoản đòn bẩy cao để khuếch đại lợi nhuận giao dịch.
Các điểm dừng lợi nhuận và dừng lỗ được thiết lập để kiểm soát rủi ro hiệu quả.
Tối ưu hóa các loại giao dịch (EURUSD) và chu kỳ (15 phút) để làm cho nó có lợi hơn.
Chiến lược này cũng có những rủi ro sau:
Số lượng lớn các đường trung bình động có thể bỏ lỡ các cơ hội đảo ngược ngắn hạn.
Đòn bẩy cao làm tăng lỗ trong khi tăng lợi nhuận.
Khi đường trung bình động tạo ra tín hiệu, xu hướng ngắn hạn có thể đã đảo ngược.
Giá hối đoái EURUSD có thể trải qua sự biến động mạnh mẽ, mang lại rủi ro lớn hơn.
Để đáp ứng những rủi ro này, chúng tôi có thể điều chỉnh thích hợp tỷ lệ đòn bẩy, tối ưu hóa các tham số của đường trung bình động, giới thiệu các chỉ số khác để đánh giá sự đảo ngược xu hướng, v.v. để tối ưu hóa.
Các hướng tối ưu hóa chính của chiến lược này bao gồm:
Đánh giá hiệu suất của các giống và chu kỳ khác nhau và chọn các thông số tối ưu.
Kiểm tra các kết hợp và số lượng khác nhau của các đường trung bình động.
Tăng các chỉ số khối lượng hoặc biến động để xác định các điểm đảo ngược ngắn hạn.
Tăng điều chỉnh năng động của phạm vi dừng lợi nhuận và dừng lỗ.
Thêm chỉ số ENU để xác định điểm đảo ngược.
Thông qua thử nghiệm và tối ưu hóa đa khía cạnh, sự ổn định và lợi nhuận của chiến lược có thể được cải thiện đáng kể.
Chiến lược trung bình động này tích hợp các lợi thế của các chỉ số trung bình động để tạo thành một hệ thống đánh giá xu hướng mạnh mẽ. Nó tối ưu hóa các loại và chu kỳ giao dịch và rất phù hợp với giao dịch trong ngày đòn bẩy cao. Thông qua điều chỉnh tham số và thử nghiệm tối ưu hóa, chiến lược này có thể trở thành một chiến lược giao dịch thuật toán hiệu quả và đáng tin cậy.
/*backtest start: 2023-10-24 00:00:00 end: 2023-11-23 00:00:00 period: 1h basePeriod: 15m 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/ // © SoftKill21 //@version=4 strategy("Money maker EURUSD 15min" ) fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2000, title = "From Year", minval = 1970) // To Date Inputs toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 8, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2021, title = "To Year", minval = 1970) startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) len = input(3, minval=1, title="Length") src = input(hl2, title="Source") smma = 0.0 sma1 = sma(src, len) smma := na(smma[1]) ? sma1 : (smma[1] * (len - 1) + src) / len len2 = input(6, minval=1, title="Length") src2 = input(hl2, title="Source") smma2 = 0.0 sma2 = sma(src2, len2) smma2 := na(smma2[1]) ? sma2 : (smma2[1] * (len2 - 1) + src2) / len2 len3 = input(9, minval=1, title="Length") src3 = input(hl2, title="Source") smma3 = 0.0 sma3 = sma(src3, len3) smma3 := na(smma3[1]) ? sma3 : (smma3[1] * (len3 - 1) + src3) / len3 len4 = input(50, minval=1, title="Length") src4 = input(close, title="Source") smma4 = 0.0 sma4 = sma(src4, len4) smma4 := na(smma4[1]) ? sma4 : (smma4[1] * (len4 - 1) + src4) / len4 len5 = input(200, minval=1, title="Length") src5 = input(close, title="Source") out5 = ema(src5, len5) timeinrange(res, sess) => time(res, sess) != 0 london=timeinrange(timeframe.period, "0300-1045") londonEntry=timeinrange(timeframe.period, "0300-0845") extraEntry =timeinrange(timeframe.period, "0745-1030") time_cond = true //time_cond2 = time >= startDate and time <= finishDate and extraEntry // longCond = close > out5 and close > smma4 and close > smma3 and close > smma2 and close > smma and smma > smma2 and smma2>smma3 and smma3>smma4 and smma4>out5 and time_cond shortCond = close < out5 and close < smma4 and close < smma3 and close < smma2 and close < smma and smma < smma2 and smma2<smma3 and smma3<smma4 and smma4<out5 and time_cond //longCond = close > out5 and close > smma4 and close > smma3 and close > smma2 and close > smma and smma > smma2 and smma2>smma3 and smma3>smma4 and smma4>out5 and time_cond2 //shortCond = close < out5 and close < smma4 and close < smma3 and close < smma2 and close < smma and smma < smma2 and smma2<smma3 and smma3<smma4 and smma4<out5 and time_cond2 //longCond2 = crossover(close,out5) and crossover(close,smma4) and crossover(close,smma3) and crossover(close,smma2) and crossover(close,smma) and time_cond //shortCond2 = crossunder(close,out5) and crossunder(close,smma4) and crossunder(close,smma3) and crossunder(close,smma2) and crossunder(close,smma) and time_cond tp=input(300,title="tp") sl=input(300,title="sl") strategy.initial_capital = 50000 //MONEY MANAGEMENT-------------------------------------------------------------- balance = strategy.netprofit + strategy.initial_capital //current balance floating = strategy.openprofit //floating profit/loss risk = input(1,type=input.float,title="Risk %")/100 //risk % per trade //Calculate the size of the next 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 //Set min. lot size dataL = (close-out5)*100000 dataS = (out5-close)*100000 minDistanceL = (smma4 - out5)*100000 minDistanceS= (out5 - smma4)*100000 strategy.entry("long",1,1,when=longCond ) strategy.exit("closelong","long", profit=tp,loss=sl) strategy.entry("short",0,1,when=shortCond ) strategy.exit("closeshort","short", profit=tp,loss=sl) strategy.close_all(when = not london, comment="london finish") //strategy.close_all(when = not extraEntry, comment="london finish") // maxEntry=input(2,title="max entries") // strategy.risk.max_intraday_filled_orders(maxEntry)