Chiến lược này tạo ra tín hiệu mua và bán dựa trên sự vượt qua của giá với một đường trung bình động. Nó cung cấp nhiều loại đường trung bình động và một tham số dung nạp để lọc các sự đột phá sai. Chiến lược nhằm mục đích nắm bắt các điểm chuyển đổi trong xu hướng giá để theo xu hướng.
Chiến lược tính toán một đường dài N trung bình động dựa trên giá đóng cửa. Các loại đường trung bình động điển hình bao gồm đường trung bình động đơn giản (SMA), đường trung bình động nhân tố (EMA), đường trung bình động cân (WMA) v.v. Sau đó, một mức độ dung nạp được thiết lập, ví dụ: 5%, và dải trên (1.05 lần đường trung bình động) và dải dưới (0.95 lần đường trung bình động) được tính toán. Khi giá đóng cửa vượt qua dải trên, một tín hiệu mua được tạo ra. Khi giá đóng cửa vượt qua dải dưới, một tín hiệu bán được tạo ra. Điều này giúp lọc một số đột phá sai. Ngoài ra, một tham số Boolean
Nhìn chung, đây là một chiến lược theo xu hướng điển hình. Nó sử dụng mối quan hệ giữa giá và trung bình động để xác định xu hướng, với một số tính linh hoạt. Thông qua tối ưu hóa tham số và lọc tín hiệu thích hợp, nó có thể trở thành một chiến lược lượng tốt. Nhưng kiểm soát rủi ro giảm khi bán ngắn là quan trọng để tránh mất mát quá mức.
/*backtest start: 2023-12-26 00:00:00 end: 2024-01-25 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/ // © RafaelPiccolo //@version=4 strategy("Price X MA Cross", overlay=true) typ = input("HMA", "MA Type", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"]) len = input(100, minval=1, title="Length") src = input(close, "Source", type=input.source) tol = input(0, minval=0, title="Tolerance (%)", type=input.float) shortOnly = input(false, "Short only") tema(src, len)=> ema1 = ema(src, len) ema2 = ema(ema1, len) ema3 = ema(ema2, len) return = 3 * (ema1 - ema2) + ema3 getMAPoint(type, len, src)=> return = type == "SMA" ? sma(src, len) : type == "EMA" ? ema(src, len) : type == "WMA" ? wma(src, len) : type == "HMA" ? hma(src, len) : type == "VWMA" ? vwma(src, len) : type == "RMA" ? rma(src, len) : tema(src, len) ma = getMAPoint(typ, len, src) upperTol = ma * (1 + tol/100) lowerTol = ma * (1 - tol/100) longCondition = crossover(close, upperTol) shortCondition = crossunder(close, lowerTol) if (shortCondition) strategy.entry("Short", strategy.short) if (longCondition) if (shortOnly) strategy.close("Short") else strategy.entry("Long", strategy.long) plot(ma, "Moving Average", close > ma ? color.green : color.red, linewidth = 2) t1 = plot(tol > 0 ? upperTol : na, transp = 70) t2 = plot(tol > 0 ? lowerTol : na, transp = 70) fill(t1, t2, color = tol > 0 ? color.blue : na)