Strategi ini menghasilkan isyarat beli dan jual berdasarkan penyeberangan harga dengan purata bergerak. Ia menyediakan pelbagai jenis purata bergerak dan parameter toleransi untuk menapis pecah palsu. Strategi ini bertujuan untuk menangkap titik perubahan dalam trend harga untuk trend berikut.
Strategi ini mengira purata bergerak panjang N berdasarkan harga penutupan. Jenis purata bergerak biasa termasuk purata bergerak mudah (SMA), purata bergerak eksponen (EMA), purata bergerak bertimbang (WMA) dan lain-lain. Kemudian tahap toleransi ditetapkan, contohnya 5%, dan jalur atas (1.05 kali purata bergerak) dan jalur bawah (0.95 kali purata bergerak) dikira. Apabila harga penutupan melintasi jalur atas, isyarat beli dihasilkan. Apabila harga penutupan melintasi jalur bawah, isyarat jual dihasilkan. Ini membantu menapis beberapa pecah palsu. Juga, parameter Boolean
Secara keseluruhan, ini adalah strategi trend berikut yang tipikal. Ia menggunakan hubungan antara harga dan purata bergerak untuk menentukan trend, dengan beberapa fleksibiliti. Melalui pengoptimuman parameter dan penapisan isyarat yang betul, ia boleh menjadi strategi kuant yang baik. Tetapi mengawal risiko penurunan semasa pendek adalah penting untuk mengelakkan kerugian berlebihan.
/*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)