Chiến lược này tạo ra tín hiệu giao dịch bằng cách tính toán ba đường trung bình động của các giai đoạn khác nhau và kết hợp các bước đột phá giá. Nó thuộc về một chiến lược theo xu hướng điển hình. Chiến lược nhằm mục đích theo dõi xu hướng trung hạn trên thị trường và có thể được điều chỉnh cho các sản phẩm và môi trường giao dịch khác nhau bằng cách điều chỉnh các tham số một cách năng động.
Chiến lược bao gồm ba đường trung bình động: MA1, MA2 và MA3. MA1 và MA2 tạo thành một kênh giao dịch, và giao thoa của chúng tạo ra các tín hiệu giao dịch; MA3 được sử dụng để lọc tín hiệu.
Khi đường MA1 vượt qua đường MA2 trung hạn, điều này cho thấy xu hướng ngắn hạn đang tăng mạnh. Tại thời điểm này, nếu giá trên đường MA3 dài hạn, một tín hiệu dài được tạo ra; ngược lại, nếu đường MA1 vượt qua đường MA2 và giá dưới đường MA3, một tín hiệu ngắn được tạo ra.
Vai trò của MA3 là lọc ra tiếng ồn thị trường ngắn hạn và chỉ tạo ra tín hiệu sau khi xác định xu hướng đã bước vào giai đoạn trung và dài hạn. Bằng cách điều chỉnh động các thông số của ba đường trung bình động, chiến lược có thể tìm ra sự kết hợp thông số tối ưu trên các thị trường khác nhau.
Có thể tối ưu hóa thời gian MA cho các sản phẩm khác nhau; tối ưu hóa stop loss để kiểm soát lỗ đơn; kết hợp các chỉ số kỹ thuật khác để xác nhận tính hợp lệ của tín hiệu và giảm tín hiệu sai.
Chiến lược này tạo ra các tín hiệu giao dịch bằng cách tính toán ba đường trung bình động và quan sát các đường chéo của chúng. Sử dụng ý tưởng kết hợp các đường nhanh, trung bình và chậm để xác định xu hướng, đây là một chiến lược theo xu hướng điển hình. Chiến lược có thể được điều chỉnh cho các sản phẩm khác nhau thông qua tối ưu hóa tham số, nhưng có nguy cơ chấn động và bỏ lỡ. Những cải tiến trong tương lai có thể giới thiệu các chỉ số kỹ thuật khác để đánh giá tính hợp lệ của tín hiệu, phát triển các cơ chế tối ưu hóa tham số năng động, v.v. để làm cho chiến lược linh hoạt hơn.
/*backtest start: 2023-01-16 00:00:00 end: 2024-01-22 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/ // © Meesemoo //@version=4 strategy("Custom MA Strategy Tester", overlay = true) MA1Period = input(13, title="MA1 Period") MA1Type = input(title="MA1 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"]) MA1Source = input(title="MA1 Source", type=input.source, defval=close) MA1Visible = input(title="MA1 Visible", type=input.bool, defval=true) MA2Period = input(50, title="MA2 Period") MA2Type = input(title="MA2 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"]) MA2Source = input(title="MA2 Source", type=input.source, defval=close) MA2Visible = input(title="MA2 Visible", type=input.bool, defval=true) MA3Period = input(200, title="MA3 Period") MA3Type = input(title="MA3 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"]) MA3Source = input(title="MA3 Source", type=input.source, defval=close) MA3Visible = input(title="MA3 Visible", type=input.bool, defval=true) ShowCrosses = input(title="Show Crosses", type=input.bool, defval=true) MA1 = if MA1Type == "SMA" sma(MA1Source, MA1Period) else if MA1Type == "EMA" ema(MA1Source, MA1Period) else if MA1Type == "WMA" wma(MA1Source, MA1Period) else if MA1Type == "RMA" rma(MA1Source, MA1Period) else if MA1Type == "HMA" wma(2*wma(MA1Source, MA1Period/2)-wma(MA1Source, MA1Period), round(sqrt(MA1Period))) else if MA1Type == "DEMA" e = ema(MA1Source, MA1Period) 2 * e - ema(e, MA1Period) else if MA1Type == "TEMA" e = ema(MA1Source, MA1Period) 3 * (e - ema(e, MA1Period)) + ema(ema(e, MA1Period), MA1Period) MA2 = if MA2Type == "SMA" sma(MA2Source, MA2Period) else if MA2Type == "EMA" ema(MA2Source, MA2Period) else if MA2Type == "WMA" wma(MA2Source, MA2Period) else if MA2Type == "RMA" rma(MA2Source, MA2Period) else if MA2Type == "HMA" wma(2*wma(MA2Source, MA2Period/2)-wma(MA2Source, MA2Period), round(sqrt(MA2Period))) else if MA2Type == "DEMA" e = ema(MA2Source, MA2Period) 2 * e - ema(e, MA2Period) else if MA2Type == "TEMA" e = ema(MA2Source, MA2Period) 3 * (e - ema(e, MA2Period)) + ema(ema(e, MA2Period), MA2Period) MA3 = if MA3Type == "SMA" sma(MA3Source, MA3Period) else if MA3Type == "EMA" ema(MA3Source, MA3Period) else if MA3Type == "WMA" wma(MA3Source, MA3Period) else if MA3Type == "RMA" rma(MA3Source, MA3Period) else if MA3Type == "HMA" wma(2*wma(MA3Source, MA3Period/2)-wma(MA3Source, MA3Period), round(sqrt(MA3Period))) else if MA3Type == "DEMA" e = ema(MA3Source, MA3Period) 2 * e - ema(e, MA3Period) else if MA3Type == "TEMA" e = ema(MA3Source, MA3Period) 3 * (e - ema(e, MA3Period)) + ema(ema(e, MA3Period), MA3Period) p1 = plot(MA1Visible ? MA1 : na, color=color.green, linewidth=1) p2 = plot(MA2Visible ? MA2 : na, color=color.yellow, linewidth=1) p3 = plot(MA3Visible ? MA3 : na, color=color.red, linewidth=2) fill(p1, p2, color.silver, transp=80, title="Fill") start = timestamp(2019, 1, 1, 1, 0) end = timestamp(2025, 1, 1, 1, 0) if time >= start and time <= end longCondition = crossover(MA1, MA2) and close > MA3 if (longCondition) strategy.entry("Long", strategy.long) shortCondition = crossunder(MA1, MA2) and close < MA3 if (shortCondition) strategy.entry("Short", strategy.short)