Strategi ini menghasilkan sinyal beli dan jual berdasarkan penyeberangan harga dengan rata-rata bergerak. Ini menyediakan berbagai jenis rata-rata bergerak dan parameter toleransi untuk menyaring kegagalan palsu. Strategi ini bertujuan untuk menangkap titik balik dalam tren harga untuk mengikuti tren.
Strategi ini menghitung panjang N moving average berdasarkan harga penutupan. Jenis rata-rata bergerak khas termasuk Simple Moving Average (SMA), Exponential Moving Average (EMA), Weighted Moving Average (WMA) dll. Kemudian tingkat toleransi ditetapkan, misalnya 5%, dan band atas (1.05 kali rata-rata bergerak) dan band bawah (0.95 kali rata-rata bergerak) dihitung. Ketika harga penutupan melintasi band atas, sinyal beli dihasilkan. Ketika harga penutupan melintasi band bawah, sinyal jual dihasilkan. Ini membantu menyaring beberapa breakout palsu.
Secara keseluruhan ini adalah strategi trend berikut yang khas. Ini menggunakan hubungan antara harga dan moving average untuk menentukan tren, dengan beberapa fleksibilitas. Melalui optimasi parameter dan penyaringan sinyal yang tepat, ini bisa menjadi strategi kuantitas yang layak. Tetapi mengendalikan risiko penurunan saat shorting penting untuk menghindari kerugian yang 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)