
Chiến lược này là một chiến lược theo dõi xu hướng điển hình bằng cách tính toán các đường trung bình di chuyển trong ba chu kỳ khác nhau và kết hợp với giá phá vỡ để tạo ra tín hiệu giao dịch. Chiến lược này được thiết kế để theo dõi xu hướng trung hạn của thị trường và có thể áp dụng cho các giống và môi trường giao dịch khác nhau thông qua các tham số điều chỉnh động.
Chiến lược này bao gồm ba đường trung bình di chuyển: MA1, MA2 và MA3. MA1 và MA2 tạo ra một kênh giao dịch, và sự giao thoa của chúng tạo ra tín hiệu giao dịch; MA3 được sử dụng để lọc tín hiệu.
Khi đường trung bình nhanh trên MA1 xuyên qua đường trung bình dài hạn MA2, cho thấy xu hướng ngắn hạn trở nên mạnh hơn, khi đó sẽ tạo ra tín hiệu làm nhiều nếu giá cao hơn đường trung bình dài hạn MA3; ngược lại, nếu đường trung bình dưới MA1 xuyên qua MA2, và giá thấp hơn MA3, sẽ tạo ra tín hiệu làm hỏng.
MA3 hoạt động để lọc tiếng ồn thị trường ngắn hạn và chỉ phát ra tín hiệu sau khi xác định xu hướng đi vào giai đoạn trung bình dài hạn. Chiến lược này có thể tìm kiếm sự kết hợp tốt nhất của các tham số trong các thị trường khác nhau bằng cách điều chỉnh động các tham số của ba đường trung bình di chuyển.
Có thể điều chỉnh chu kỳ MA, tối ưu hóa các tham số để chọn các giống khác nhau; tối ưu hóa chiến lược dừng lỗ, kiểm soát tổn thất đơn lẻ; kết hợp với các chỉ số kỹ thuật khác để xác nhận hiệu quả tín hiệu, giảm xác suất tín hiệu sai.
Chiến lược này là một chiến lược theo dõi xu hướng điển hình bằng cách tính toán ba đường trung bình di chuyển và quan sát các tín hiệu giao dịch tạo ra giao dịch, sử dụng các ý tưởng hợp tác nhanh hoặc chậm. Chiến lược này có thể áp dụng cho các giống khác nhau thông qua tối ưu hóa tham số, nhưng có nguy cơ bị lấn át và bỏ lỡ các bước ngoặt.
/*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)