
Strategi ini adalah sistem pengesanan trend berdasarkan pelbagai lapisan rata-rata bergerak ((SMA) yang digabungkan dengan teknik pengesanan silang yang tepat. Ia menentukan trend pasaran melalui hubungan bertingkat rata-rata bergerak 20, 50, 100 dan 200 kitaran, dan menggunakan harga dalam masa nyata dengan persilangan rata-rata bergerak untuk mencetuskan isyarat perdagangan.
Strategi ini menggunakan mekanisme penapisan trend tiga tingkat, yang memerlukan 50 purata kitaran berada di atas 100 purata kitaran, dan 100 purata kitaran berada di atas 200 purata kitaran untuk mengesahkan trend naik, sebaliknya mengesahkan trend menurun. Isyarat masuk berdasarkan persilangan harga dengan 50 purata kitaran, menggunakan data pens untuk melakukan pengesanan persilangan yang tepat, untuk menentukan masa persilangan berlaku dengan membandingkan tingkah laku harga semasa dengan hubungan kedudukan garis K sebelumnya. Isyarat keluar ditentukan oleh hubungan harga dengan garis purata 20 kitaran, yang mencetuskan isyarat kedudukan rata apabila harga menembusi garis masa 20 purata kitaran.
Ini adalah strategi pengesanan trend yang lengkap dan logik yang jelas, dengan penggunaan gabungan pelbagai lapisan rata-rata bergerak, kedua-dua memastikan kebolehpercayaan isyarat dan mengesan trend dengan berkesan. Strategi ini direka dengan mempertimbangkan kepraktisan dan keserasian, sesuai untuk digunakan dalam pelbagai keadaan pasaran. Dengan pengoptimuman dan penyempurnaan lebih lanjut, strategi ini dijangka dapat mencapai prestasi yang lebih baik dalam perdagangan sebenar.
/*backtest
start: 2024-02-22 00:00:00
end: 2024-06-25 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Multi-SMA Strategy - Core Signals", overlay=true)
// ———— Universal Inputs ———— //
int smaPeriod1 = input(20, "Fast SMA")
int smaPeriod2 = input(50, "Medium SMA")
bool useTickCross = input(true, "Use Tick-Precise Crosses")
// ———— Timezone-Neutral Calculations ———— //
sma20 = ta.sma(close, smaPeriod1)
sma50 = ta.sma(close, smaPeriod2)
sma100 = ta.sma(close, 100)
sma200 = ta.sma(close, 200)
// ———— Tick-Precise Cross Detection ———— //
golden_cross = useTickCross ?
(high >= sma50 and low[1] < sma50[1]) :
ta.crossover(sma20, sma50)
death_cross = useTickCross ?
(low <= sma50 and high[1] > sma50[1]) :
ta.crossunder(sma20, sma50)
// ———— Trend Filter ———— //
uptrend = sma50 > sma100 and sma100 > sma200
downtrend = sma50 < sma100 and sma100 < sma200
// ———— Entry Conditions ———— //
longCondition = golden_cross and uptrend
shortCondition = death_cross and downtrend
// ———— Exit Conditions ———— //
exitLong = ta.crossunder(low, sma20)
exitShort = ta.crossover(high, sma20)
// ———— Strategy Execution ———— //
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)
strategy.close("Long", when=exitLong)
strategy.close("Short", when=exitShort)
// ———— Clean Visualization ———— //
plot(sma20, "20 SMA", color.new(color.blue, 0))
plot(sma50, "50 SMA", color.new(color.red, 0))
plot(sma100, "100 SMA", color.new(#B000B0, 0), linewidth=2)
plot(sma200, "200 SMA", color.new(color.green, 0), linewidth=2)
// ———— Signal Markers ———— //
plotshape(longCondition, "Long Entry", shape.triangleup, location.belowbar, color.green, 0)
plotshape(shortCondition, "Short Entry", shape.triangledown, location.abovebar, color.red, 0)
plotshape(exitLong, "Long Exit", shape.xcross, location.abovebar, color.blue, 0)
plotshape(exitShort, "Short Exit", shape.xcross, location.belowbar, color.orange, 0)