
Chiến lược này dựa trên sự giao thoa của giá với đường trung bình di chuyển để tạo ra tín hiệu mua và bán. Nó cung cấp nhiều loại đường trung bình di chuyển và một tham số chênh lệch để lọc các đợt phá vỡ giả. Chiến lược này nhằm mục đích nắm bắt các bước ngoặt trong xu hướng giá để thực hiện theo dõi xu hướng.
Chiến lược này dựa trên giá đóng cửa, tính toán đường trung bình di chuyển dài N. Các loại đường trung bình di chuyển điển hình có đường trung bình di chuyển đơn giản (SMA), đường trung bình di chuyển chỉ số (EMA), đường trung bình di chuyển trọng lượng (WMA) v.v. Sau đó, đặt một mức chênh lệch, chẳng hạn như 5%, và tính toán đường trung bình di chuyển trên đường đua (tỷ lệ 1.05 của đường trung bình di chuyển) và đường trung bình di chuyển dưới đường đua (tỷ lệ 0.95 của đường trung bình di chuyển).
Chiến lược này nói chung là một chiến lược theo dõi xu hướng điển hình hơn. Nó sử dụng mối quan hệ của giá với đường trung bình di chuyển để đánh giá xu hướng và cung cấp một số tính linh hoạt.
/*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)