Strategi ini menghasilkan isyarat dagangan dengan mengira tiga purata bergerak dari tempoh yang berbeza dan menggabungkan terobosan harga. Ia adalah sebahagian daripada strategi trend-mengikut tipikal. Strategi ini bertujuan untuk mengikuti trend jangka menengah di pasaran dan boleh disesuaikan dengan produk yang berbeza dan persekitaran dagangan dengan menyesuaikan parameter secara dinamik.
Strategi ini mengandungi tiga purata bergerak: MA1, MA2 dan MA3. MA1 dan MA2 membentuk saluran perdagangan, dan silangannya menghasilkan isyarat perdagangan; MA3 digunakan untuk menapis isyarat.
Apabila purata bergerak pantas MA1 melintasi di atas purata bergerak jangka sederhana MA2, ia menunjukkan penguatan trend jangka pendek. Pada masa ini, jika harga di atas purata bergerak jangka panjang MA3, isyarat panjang dihasilkan; sebaliknya, jika MA1 melintasi di bawah MA2 dan harga di bawah MA3, isyarat pendek dihasilkan.
Peranan MA3 adalah untuk menapis bunyi bising pasaran jangka pendek dan hanya menghasilkan isyarat selepas menentukan bahawa trend telah memasuki peringkat jangka sederhana dan panjang. Dengan menyesuaikan parameter tiga purata bergerak secara dinamik, strategi dapat mencari kombinasi parameter yang optimum di pasaran yang berbeza.
Boleh mengoptimumkan tempoh MA untuk produk yang berbeza; mengoptimumkan stop loss untuk mengawal kerugian tunggal; menggabungkan penunjuk teknikal lain untuk mengesahkan kesahihan isyarat dan mengurangkan isyarat palsu.
Strategi ini menghasilkan isyarat perdagangan dengan mengira tiga purata bergerak dan memerhatikan silangannya. Menggunakan idea menggabungkan garis cepat, sederhana dan perlahan untuk menentukan trend, ia adalah strategi trend berikut yang tipikal. Strategi ini boleh disesuaikan dengan produk yang berbeza melalui pengoptimuman parameter, tetapi risiko whipsaws dan bertukar yang hilang. Penambahbaikan masa depan boleh memperkenalkan penunjuk teknikal lain untuk menilai kesahihan isyarat, membangunkan mekanisme pengoptimuman parameter dinamik, dan lain-lain untuk menjadikan 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)