
Strategi ini merupakan strategi pelacakan tren yang khas dengan menghitung moving average dari tiga periode yang berbeda, dan digabungkan dengan harga yang terobosan untuk membentuk sinyal perdagangan. Strategi ini bertujuan untuk melacak tren jangka menengah di pasar, dengan parameter yang disesuaikan secara dinamis dapat diterapkan untuk berbagai varietas dan lingkungan perdagangan.
Strategi ini terdiri dari tiga rata-rata bergerak: MA1, MA2 dan MA3 membentuk saluran perdagangan antara MA1 dan MA2 yang bersilang memberikan sinyal perdagangan; MA3 digunakan untuk memfilter sinyal .
Ketika rata-rata cepat di atas MA1 menembus rata-rata jangka menengah MA2, menunjukkan tren jangka pendek yang kuat, yang menghasilkan sinyal plus jika harga lebih tinggi dari rata-rata jangka panjang MA3; sebaliknya, jika MA1 di bawah melewati MA2, dan harga lebih rendah dari MA3, menghasilkan sinyal minus.
MA3 berfungsi untuk memfilter kebisingan pasar jangka pendek dan hanya menghasilkan sinyal setelah tren ditetapkan untuk memasuki fase jangka menengah dan panjang. Strategi ini dapat mencari kombinasi parameter optimal di pasar yang berbeda dengan menyesuaikan parameter tiga rata-rata bergerak secara dinamis.
Dapat dengan menyesuaikan siklus MA, mengoptimalkan parameter untuk memilih varietas yang berbeda; mengoptimalkan strategi stop loss, mengendalikan kerugian tunggal; digabungkan dengan indikator teknis lainnya untuk mengkonfirmasi efektivitas sinyal, mengurangi probabilitas sinyal palsu.
Strategi ini adalah strategi pelacakan tren yang khas. Strategi ini dapat digunakan untuk varietas yang berbeda melalui pengoptimalan parameter, tetapi ada risiko tersandung dan kehilangan titik balik. Strategi ini dapat dioptimalkan di masa depan dengan memperkenalkan indikator teknis lain untuk menilai efektivitas sinyal, mengembangkan mekanisme pengoptimalan parameter dinamis, dan lain-lain.
/*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)