
Strategi ini berdasarkan pada persilangan harga dengan purata bergerak untuk menghasilkan isyarat beli dan jual. Ia menyediakan pelbagai jenis purata bergerak dan parameter toleransi untuk menyaring pecah palsu. Strategi ini bertujuan untuk menangkap titik-titik perubahan trend harga dan melakukan trend pelacakan.
Strategi ini adalah berdasarkan harga penutupan harga, dan mengira purata bergerak dengan panjang N. Jenis purata bergerak yang biasa adalah purata bergerak sederhana (SMA), purata bergerak indeks (EMA), purata bergerak bertimbangan (WMA), dan sebagainya. Kemudian menetapkan tahap kebolehan, seperti 5%, dan mengira di atas (sehingga 1.05 kali rata-rata bergerak) dan di bawah (sehingga 0.95 kali rata-rata bergerak). Apabila harga penutupan harga melintasi lintasan, ia menghasilkan isyarat beli; apabila harga penutupan harga melintasi lintasan, ia menghasilkan isyarat jual.
Strategi ini secara keseluruhannya adalah strategi pengesanan trend yang lebih tipikal. Ia menggunakan hubungan harga dengan purata bergerak untuk menilai trend, dan memberikan sedikit fleksibiliti. Dengan pengoptimuman parameter dan penapisan isyarat yang sesuai, ia boleh menjadi strategi kuantitatif yang berkesan.
/*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)