Golden Cross Moving Average Trading Strategy adalah strategi perdagangan kuantitatif klasik. Strategi ini menggunakan moving average dari periode yang berbeda untuk menentukan tren pasar untuk posisi panjang dan pendek. Ketika moving average jangka pendek melintasi di atas moving average jangka panjang, itu dianggap sinyal beli. Ketika moving average jangka pendek melintasi di bawah moving average jangka panjang, itu dianggap sinyal jual.
Strategi ini didasarkan pada tiga rata-rata bergerak sederhana (SMA) dari periode yang berbeda: 50 hari, 100 hari dan 200 hari.
Sinyal masuk: ketika rata-rata bergerak 50 hari melintasi di atas rata-rata bergerak 100 hari, pergi panjang.
Sinyal keluar: ketika rata-rata bergerak 50 hari melintasi di bawah rata-rata bergerak 100 hari, tutup posisi; atau ketika harga tutup di bawah rata-rata bergerak 100 hari, keluar; atau ketika rata-rata bergerak 100 hari melintasi di bawah rata-rata bergerak 200 hari, keluar.
Ambil keuntungan dan stop loss: set trailing ambil keuntungan dan stop loss tetap.
Strategi ini memanfaatkan kemampuan moving average untuk secara efektif menentukan tren harga rata-rata pasar. penyambungan rata-rata jangka pendek dan jangka panjang dipandang sebagai pasar memasuki tren naik atau turun, maka sinyal panjang atau keluar. Ini memungkinkan strategi untuk secara efektif menangkap tren pasar.
Sederhana untuk diimplementasikan, hanya membutuhkan tiga moving average dari periode yang berbeda.
Rata-rata bergerak memiliki kemampuan penyaringan kebisingan yang mengurangi dampak acak pasar pada perdagangan dan membuat sinyal lebih dapat diandalkan.
Rata-rata bergerak secara efektif mencerminkan perubahan tren harga pasar rata-rata, menggunakan persilangan antara garis jangka pendek dan jangka panjang untuk menentukan perubahan tren utama.
Sangat dapat disesuaikan. Periode rata-rata bergerak dapat disesuaikan untuk tingkat kontrol risiko yang berbeda.
Bisa menghasilkan banyak sinyal palsu. Crossover sering dapat terjadi ketika rata-rata jangka pendek dan jangka panjang terlalu dekat, menghasilkan sinyal yang terlalu tidak valid.
Rata-rata bergerak bereaksi terhadap perubahan harga lambat dan tidak dapat bereaksi langsung terhadap berita pasar dan peristiwa utama.
Tidak mampu mendapatkan keuntungan dari fluktuasi kecil. Filter kebisingan juga berarti kehilangan keuntungan dari fluktuasi pasar kecil.
Pemilihan parameter subjektif Periode rata-rata bergerak yang tepat sebagian besar bersifat subjektif dan tergantung pada pasar tertentu.
Tambahkan filter untuk mengurangi sinyal palsu, seperti filter kisaran harga untuk membatasi sinyal ke pergerakan di atas magnitudo tertentu.
Masukkan indikator lain untuk strategi kombinasi, yang dapat meningkatkan akurasi sinyal, misalnya indikator volatilitas atau volume.
Tambahkan modul optimasi adaptif untuk secara dinamis mengoptimalkan periode rata-rata bergerak berdasarkan algoritma pembelajaran mesin, memungkinkan adaptasi dengan kondisi pasar yang berkembang.
Masukkan model pembelajaran mendalam yang canggih alih-alih rata-rata bergerak untuk kemampuan ekstraksi dan pemodelan fitur yang unggul.
Golden Cross Moving Average Trading Strategy adalah strategi trend following yang khas. Strategi ini mencerminkan tren harga pasar rata-rata secara sederhana dan praktis, cocok untuk pemula. Namun, strategi ini juga memiliki beberapa kekurangan yang dapat ditingkatkan dengan meningkatkan kualitas sinyal, menggabungkan dengan indikator teknis lainnya, memperkenalkan mekanisme adaptif, dll untuk beradaptasi dengan pasar yang lebih kompleks. Secara keseluruhan, ini adalah strategi dengan nilai referensi dan pembelajaran yang tinggi.
/*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)