
Strategi perdagangan rata-rata bergerak emas (Golden Cross Moving Average Trading Strategy) adalah strategi perdagangan kuantitatif yang lebih klasik. Strategi ini menggunakan rata-rata bergerak dari periode yang berbeda untuk menilai tren pasar melakukan banyak shorting. Ketika rata-rata bergerak berperiode lebih panjang melintasi rata-rata bergerak jangka pendek, dianggap sebagai sinyal beli; Ketika rata-rata bergerak jangka pendek melintasi rata-rata bergerak jangka panjang, dianggap sebagai sinyal jual.
Strategi ini didasarkan pada SMA dengan tiga periode berbeda: 50 hari, 100 hari, dan 200 hari. Logika perdagangan spesifiknya adalah sebagai berikut:
Sinyal masuk: Lakukan lebih banyak masuk ketika Anda memakai 100 Moving Average di atas 50 Moving Average.
Tanda keluar: Keluar ketika 50 hari bergerak di bawah 100 hari bergerak di bawah rata-rata; atau keluar ketika harga close out di bawah 100 hari bergerak di bawah rata-rata; atau keluar ketika 100 hari bergerak di bawah 200 hari bergerak di bawah rata-rata.
Stop loss: mengatur stop loss yang bergerak dan tetap.
Strategi ini memanfaatkan karakteristik rata-rata bergerak yang dapat secara efektif menilai harga rata-rata pasar. Ketika rata-rata jangka pendek di atas rata-rata jangka panjang, dianggap sebagai sinyal bahwa pasar melangkah ke arah tren naik, dan karenanya melakukan lebih banyak; Ketika rata-rata jangka pendek di bawah rata-rata jangka panjang, dianggap sebagai pasar melangkah ke arah tren turun, dan karenanya keluar. Dengan cara ini, tren pasar dapat secara efektif ditangkap.
Operasinya sederhana dan mudah untuk diterapkan. Strategi ini dapat dibangun dengan menggunakan tiga rata-rata bergerak dari periode yang berbeda.
Memiliki stabilitas yang lebih kuat. Moving average sendiri memiliki fungsi penghapusan kebisingan, yang dapat secara efektif menghapus pengaruh fluktuasi acak pasar pada perdagangan, membuat sinyal lebih stabil dan dapat diandalkan.
Mudah untuk menguasai tren besar. Rata-rata bergerak dapat secara efektif mencerminkan tren perubahan harga rata-rata pasar, dan menilai perubahan besar dalam pasar melalui persimpangan garis periode panjang dan pendek.
Tingkat kustomisasi yang tinggi. Anda dapat menentukan sendiri kombinasi periodik rata-rata bergerak, untuk mencapai tingkat kontrol risiko yang berbeda.
Mungkin menghasilkan lebih banyak sinyal palsu. Ketika rata-rata bergerak jangka pendek dan jangka panjang terlalu dekat, mungkin terjadi persilangan yang sering, menghasilkan banyak sinyal tidak valid.
Tidak dapat bereaksi cepat terhadap kejadian yang mengejutkan. Rata-rata bergerak bereaksi lambat terhadap perubahan harga, tidak dapat bereaksi secara real-time terhadap berita yang mengejutkan dan peristiwa besar di pasar.
Tidak dapat mengambil keuntungan dari pergerakan kecil di pasar. Karakteristik tidak berisik dari rata-rata bergerak juga berarti tidak dapat menangkap pergerakan kecil di pasar untuk mengambil keuntungan.
Pengaturan parameter relatif subjektif. Pilihan siklus rata-rata bergerak relatif subjektif, perlu untuk menentukan parameter terbaik sesuai dengan pasar yang berbeda.
Menambahkan kondisi filter untuk menghindari terlalu banyak sinyal palsu. Misalnya, mengatur rentang fluktuasi harga sebagai filter, hanya menghasilkan sinyal perdagangan jika melampaui rentang tertentu.
Kombinasi dengan indikator lain. Misalnya, penggunaan kombinasi dengan indikator tingkat fluktuasi, indikator volume transaksi, dan lain-lain dapat meningkatkan akurasi sinyal.
Menambahkan modul optimasi adaptasi. Mengoptimalkan secara dinamis parameter periodik rata-rata bergerak melalui teknologi seperti pembelajaran mesin, sehingga dapat beradaptasi dengan perubahan lingkungan pasar eksternal.
Kombinasi dengan model pembelajaran dalam. Menggunakan model pembelajaran dalam yang lebih canggih untuk menggantikan rata-rata bergerak dengan kemampuan ekstraksi dan pemodelan karakteristik yang lebih kuat.
Strategi perdagangan garis rata-rata silang emas adalah strategi yang lebih khas mengikuti tren. Ini mencerminkan tren perubahan rata-rata harga pasar, sederhana dan praktis, cocok untuk belajar pemula. Namun, strategi ini juga memiliki beberapa kekurangan, yang dapat dioptimalkan dari beberapa aspek, seperti meningkatkan kualitas sinyal, kombinasi dengan indikator teknis lainnya, dan memperkenalkan mekanisme adaptasi, sehingga strategi ini dapat beradaptasi dengan lingkungan pasar yang lebih kompleks.
/*backtest
start: 2023-12-03 00:00:00
end: 2023-12-10 00:00:00
period: 1m
basePeriod: 1m
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/
// © CJDeegan
//@version=4
strategy(title = "[LIVE] Golden Cross", overlay=true)
// ------------Functions------------
//Percent to Decimal Conversion
perToDec(a) => a * 0.01
//Price Difference to Tick
diffToTick(a,b) => (a - b) / syminfo.mintick
// ------------Strategy Inputs------------
takeProfitInput = input(300, "Take Profit Price (% Gain)")
stopLossInput = input(25, "Stop Loss (% Loss)")
startDate = input(title="Start Date", type=input.integer,
defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
defval=2018, minval=1800, maxval=2100)
endDate = input(title="End Date", type=input.integer,
defval=1, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer,
defval=1, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer,
defval=2031, minval=1800, maxval=2100)
inDateRange = (time >= timestamp(syminfo.timezone, startYear,
startMonth, startDate, 0, 0)) and
(time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))
// ------------Populate Indicators------------
//EMA
sma50 = sma(close,50)
sma100 = sma(close,100)
sma200 = sma(close,200)
// ------------Entry Logic------------
//Guards
entryGuard = true
//Triggers
entryTrigger = crossover(sma50,sma100)
//Conditions
entryCondition = entryGuard and entryTrigger
//Calculations
//Execution
if (inDateRange and entryCondition)
strategy.entry("Long", strategy.long, when = entryCondition, comment = "Entry")
//------------Exit Logic------------
//Guards
//Triggers
exitTrigger = crossunder(sma50,sma100) or close < sma100 or crossunder(sma100,sma200)
//Conditions
exitCondition = exitTrigger
//Calculations
//Take Profit
takeProfitPrice = strategy.position_avg_price + (strategy.position_avg_price * perToDec(takeProfitInput))
//Take Profit Ticks
takeProfitTicks = diffToTick(takeProfitPrice, strategy.position_avg_price)
//StopLoss
stopLossPrice = strategy.position_avg_price - (strategy.position_avg_price * perToDec(stopLossInput))
//Execution
if (inDateRange)
strategy.close("Long", when = exitCondition, comment = "Sell Trigger")
strategy.exit("Exit", "Long", comment="Stop", profit=takeProfitTicks, stop=stopLossPrice)
//Plots
plot(sma50, "SMA 50", color = color.blue)
plot(sma100, "SMA 100", color = color.green)
plot(sma200, "SMA 200", color = color.yellow)
entry = plot(strategy.position_size <= 0 ? na : strategy.position_avg_price, "Entry Price", color = color.yellow, style = plot.style_linebr)
profit = plot(strategy.position_size <= 0 ? na : takeProfitPrice, "Take Profit (Price)", color = color.green, style = plot.style_linebr)
stop = plot(strategy.position_size <= 0 ? na : stopLossPrice, "Stop Loss", color = color.red, style = plot.style_linebr)
fill(entry,profit, color=color.green)
fill(entry,stop, color=color.red)