
Strategi ini didasarkan pada persilangan harga dengan rata-rata bergerak untuk menghasilkan sinyal beli dan jual. Ini menyediakan berbagai jenis rata-rata bergerak dan parameter toleransi untuk memfilter terobosan palsu. Strategi ini bertujuan untuk menangkap titik balik dari tren harga dan memungkinkan pelacakan tren.
Strategi ini didasarkan pada harga penutupan harga, dengan menghitung moving average dengan panjang N. Jenis rata-rata bergerak yang khas adalah moving average sederhana (SMA), moving average indeks (EMA), moving average berbobot (WMA), dan lain-lain. Kemudian menetapkan tingkat toleransi, seperti 5%, dan menghitung harga atas (sehingga 1,05 kali lipat dari moving average) dan bawah (sehingga 0,95 kali lipat dari moving average). Ketika harga di atas penutupan harga melintasi orbit, sinyal beli dihasilkan; Ketika harga di bawah penutupan harga melintasi orbit, sinyal jual dihasilkan.
Strategi ini secara keseluruhan adalah strategi pelacakan tren yang lebih khas. Ini menggunakan hubungan harga dengan rata-rata bergerak untuk menilai tren, dan menawarkan beberapa fleksibilitas. Dengan pengoptimalan parameter dan pemfilteran sinyal yang tepat, ini dapat menjadi strategi kuantitatif yang efektif.
/*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)