Strategi ini menghasilkan sinyal perdagangan dengan menghitung tiga rata-rata bergerak dari periode yang berbeda dan menggabungkan terobosan harga. Strategi ini termasuk dalam strategi trend-following yang khas. Strategi ini bertujuan untuk mengikuti tren jangka menengah di pasar dan dapat disesuaikan dengan produk dan lingkungan perdagangan yang berbeda dengan menyesuaikan parameter secara dinamis.
Strategi ini berisi tiga rata-rata bergerak: MA1, MA2 dan MA3. MA1 dan MA2 membentuk saluran perdagangan, dan silangannya menghasilkan sinyal perdagangan; MA3 digunakan untuk menyaring sinyal.
Ketika rata-rata bergerak cepat MA1 melintasi di atas rata-rata bergerak jangka menengah MA2, ini menunjukkan penguatan tren jangka pendek. Pada saat ini, jika harga di atas rata-rata bergerak jangka panjang MA3, sinyal panjang dihasilkan; sebaliknya, jika MA1 melintasi di bawah MA2 dan harga di bawah MA3, sinyal pendek dihasilkan.
Peran MA3 adalah untuk menyaring kebisingan pasar jangka pendek dan hanya menghasilkan sinyal setelah menentukan bahwa tren telah memasuki tahap jangka menengah dan panjang. Dengan menyesuaikan secara dinamis parameter dari tiga rata-rata bergerak, strategi dapat menemukan kombinasi parameter optimal di pasar yang berbeda.
Dapat mengoptimalkan periode MA untuk produk yang berbeda; mengoptimalkan stop loss untuk mengendalikan kerugian tunggal; menggabungkan indikator teknis lainnya untuk mengkonfirmasi validitas sinyal dan mengurangi sinyal palsu.
Strategi ini menghasilkan sinyal perdagangan dengan menghitung tiga rata-rata bergerak dan mengamati persilangan mereka. Menggunakan gagasan menggabungkan garis cepat, menengah dan lambat untuk menentukan tren, ini adalah strategi trend-mengikuti khas. Strategi dapat disesuaikan dengan produk yang berbeda melalui optimasi parameter, tetapi risiko whipsaws dan kehilangan belokan. Peningkatan di masa depan dapat memperkenalkan indikator teknis lainnya untuk menilai validitas sinyal, mengembangkan mekanisme optimasi parameter dinamis, dll untuk membuat strategi lebih fleksibel.
/*backtest start: 2023-01-16 00:00:00 end: 2024-01-22 00:00:00 period: 1d basePeriod: 1h 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/ // © Meesemoo //@version=4 strategy("Custom MA Strategy Tester", overlay = true) MA1Period = input(13, title="MA1 Period") MA1Type = input(title="MA1 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"]) MA1Source = input(title="MA1 Source", type=input.source, defval=close) MA1Visible = input(title="MA1 Visible", type=input.bool, defval=true) MA2Period = input(50, title="MA2 Period") MA2Type = input(title="MA2 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"]) MA2Source = input(title="MA2 Source", type=input.source, defval=close) MA2Visible = input(title="MA2 Visible", type=input.bool, defval=true) MA3Period = input(200, title="MA3 Period") MA3Type = input(title="MA3 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"]) MA3Source = input(title="MA3 Source", type=input.source, defval=close) MA3Visible = input(title="MA3 Visible", type=input.bool, defval=true) ShowCrosses = input(title="Show Crosses", type=input.bool, defval=true) MA1 = if MA1Type == "SMA" sma(MA1Source, MA1Period) else if MA1Type == "EMA" ema(MA1Source, MA1Period) else if MA1Type == "WMA" wma(MA1Source, MA1Period) else if MA1Type == "RMA" rma(MA1Source, MA1Period) else if MA1Type == "HMA" wma(2*wma(MA1Source, MA1Period/2)-wma(MA1Source, MA1Period), round(sqrt(MA1Period))) else if MA1Type == "DEMA" e = ema(MA1Source, MA1Period) 2 * e - ema(e, MA1Period) else if MA1Type == "TEMA" e = ema(MA1Source, MA1Period) 3 * (e - ema(e, MA1Period)) + ema(ema(e, MA1Period), MA1Period) MA2 = if MA2Type == "SMA" sma(MA2Source, MA2Period) else if MA2Type == "EMA" ema(MA2Source, MA2Period) else if MA2Type == "WMA" wma(MA2Source, MA2Period) else if MA2Type == "RMA" rma(MA2Source, MA2Period) else if MA2Type == "HMA" wma(2*wma(MA2Source, MA2Period/2)-wma(MA2Source, MA2Period), round(sqrt(MA2Period))) else if MA2Type == "DEMA" e = ema(MA2Source, MA2Period) 2 * e - ema(e, MA2Period) else if MA2Type == "TEMA" e = ema(MA2Source, MA2Period) 3 * (e - ema(e, MA2Period)) + ema(ema(e, MA2Period), MA2Period) MA3 = if MA3Type == "SMA" sma(MA3Source, MA3Period) else if MA3Type == "EMA" ema(MA3Source, MA3Period) else if MA3Type == "WMA" wma(MA3Source, MA3Period) else if MA3Type == "RMA" rma(MA3Source, MA3Period) else if MA3Type == "HMA" wma(2*wma(MA3Source, MA3Period/2)-wma(MA3Source, MA3Period), round(sqrt(MA3Period))) else if MA3Type == "DEMA" e = ema(MA3Source, MA3Period) 2 * e - ema(e, MA3Period) else if MA3Type == "TEMA" e = ema(MA3Source, MA3Period) 3 * (e - ema(e, MA3Period)) + ema(ema(e, MA3Period), MA3Period) p1 = plot(MA1Visible ? MA1 : na, color=color.green, linewidth=1) p2 = plot(MA2Visible ? MA2 : na, color=color.yellow, linewidth=1) p3 = plot(MA3Visible ? MA3 : na, color=color.red, linewidth=2) fill(p1, p2, color.silver, transp=80, title="Fill") start = timestamp(2019, 1, 1, 1, 0) end = timestamp(2025, 1, 1, 1, 0) if time >= start and time <= end longCondition = crossover(MA1, MA2) and close > MA3 if (longCondition) strategy.entry("Long", strategy.long) shortCondition = crossunder(MA1, MA2) and close < MA3 if (shortCondition) strategy.entry("Short", strategy.short)