Strategi ini dirancang berdasarkan indikator teknis rata-rata bergerak dan volume perdagangan untuk strategi kuantitatif jangka panjang yang mengikuti tren. Ketika harga penutupan berada di atas garis rata-rata bergerak 20 hari dan volume pembelian hari itu lebih besar dari volume penjualan dan volume perdagangan rata-rata selama n hari terakhir, pasar dianggap berada dalam keadaan bullish dan sudah waktunya untuk membeli. Ketika harga penutupan melanggar rel bawah dan volume penjualan hari ini lebih besar dari volume pembelian dan volume perdagangan rata-rata selama n hari terakhir, pasar dianggap berada dalam keadaan bearish dan sudah waktunya untuk menjual.
Strategi ini terutama didasarkan pada dua indikator untuk penilaian:
Garis rata-rata bergerak ganda: Hitung garis 20 hari dan garis 60 hari. Ketika garis 20 hari melintasi di atas garis 60 hari, pasar dianggap berada dalam tren naik. Ketika garis 20 hari melintasi di bawah garis 60 hari, pasar dianggap berada dalam tren turun.
Volume perdagangan: Menghitung volume pembelian harian dan volume penjualan. Jika volume pembelian lebih besar dari volume penjualan dan lebih besar dari volume perdagangan rata-rata selama n hari terakhir, ditentukan bahwa pasar bullish. Jika volume penjualan lebih besar dari volume pembelian dan lebih besar dari volume perdagangan rata-rata selama n hari terakhir, ditentukan bahwa pasar bearish.
Strategi dan logika perdagangan spesifik adalah sebagai berikut:
Pergi panjang: Ketika harga penutupan berada di atas garis rata-rata bergerak 20 hari dan volume pembelian hari ini lebih besar dari volume penjualan dan volume perdagangan rata-rata selama n hari terakhir, pasar dianggap bullish.
Pergi pendek: Ketika harga penutupan di bawah rel bawah dan volume penjualan hari lebih besar dari volume pembelian dan volume perdagangan rata-rata selama n hari terakhir, pasar dianggap bearish.
Mengambil keuntungan dan menghentikan kerugian: Atur tingkat mengambil keuntungan dan menghentikan kerugian yang wajar untuk mengunci keuntungan atau mengurangi kerugian. Misalnya, ketika harga naik 5% di atas harga masuk, ambil keuntungan; ketika kerugian mencapai 10%, berhentikan kerugian; atau ketika harga mencapai level tertinggi baru-baru ini dan kemudian menarik kembali sampai batas tertentu, ambil keuntungan.
Strategi ini memiliki keuntungan berikut:
Menggabungkan dua garis rata-rata bergerak dan indikator volume perdagangan menghindari titik buta dari penilaian indikator teknis tunggal.
Menggunakan Bollinger Band dengan parameter yang berbeda menentukan harga masuk yang lebih tepat.
Strategi mengambil keuntungan dan stop loss adalah wajar, yang membantu mengunci keuntungan dan mengendalikan risiko.
Hasil backtesting yang baik dengan pengembalian yang stabil, yang dapat diterapkan pada perdagangan kuantitatif.
Strategi ini juga memiliki beberapa risiko:
Strategi rata-rata bergerak ganda cenderung menghasilkan sinyal palsu dan perlu disaring oleh indikator volume.
Pengaturan parameter Bollinger Bands yang tidak benar dapat menyebabkan entri yang terlalu sering atau jarang.
Pendaftaran keuntungan tetap dan titik stop loss yang tidak tepat dapat mempengaruhi hasil strategi.
Sejumlah besar data historis diperlukan untuk backtesting, dan kerugian tak terduga masih dapat terjadi dalam perdagangan langsung.
Strategi dapat dioptimalkan dalam aspek berikut:
Mengoptimalkan parameter sistem rata-rata bergerak untuk menemukan kombinasi rata-rata bergerak optimal.
Mengoptimalkan parameter Bollinger Bands untuk entri yang lebih tepat.
Mengatur secara dinamis titik profit taking dan stop loss sesuai dengan kondisi pasar untuk menetapkan rasio risiko-manfaat yang wajar.
Meningkatkan penilaian indikator teknis lainnya seperti MACD, KD, dll untuk meningkatkan akurasi strategi.
Gunakan metode pembelajaran mesin untuk secara otomatis menemukan parameter optimal untuk membuat strategi lebih kuat.
Secara keseluruhan, ini adalah strategi perdagangan kuantitatif yang sangat praktis dengan kinerja backtesting yang baik. Ini mudah diterapkan, dengan risiko yang dapat dikontrol, dan merupakan strategi yang stabil yang cocok untuk perdagangan langsung, yang layak dipelajari untuk pedagang kuantitatif. Tentu saja, masih banyak ruang untuk optimasi strategi, dan saya berharap lebih banyak ahli perdagangan kuantitatif memperbaikinya.
/*backtest start: 2023-12-21 00:00:00 end: 2023-12-28 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/ // © KAIST291 //@version=4 strategy("prototype",initial_capital=0.01,commission_type=strategy.commission.percent,commission_value=0.1, format=format.volume, precision=0,overlay=true) // SETTING // length1=input(1) length3=input(3) length7=input(7) length14=input(14) length20=input(20) length60=input(60) length120=input(120) ma1= sma(close,length1) ma3= sma(close,length3) ma7= sma(close,length7) ma14=sma(close,length14) ma20=sma(close,length20) ma60=sma(close,length60) ma120=sma(close,length120) rsi=rsi(close,14) // BUYING VOLUME AND SELLING VOLUME // BV = iff( (high==low), 0, volume*(close-low)/(high-low)) SV = iff( (high==low), 0, volume*(high-close)/(high-low)) vol = iff(volume > 0, volume, 1) dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100) weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100) //----------------------------------------------------------- Davgvol = sma(volume, dailyLength) Wavgvol = sma(volume, weeklyLength) //----------------------------------------------------------- length = input(20, minval=1) src = input(close, title="Source") mult = input(2.0, minval=0.001, maxval=50, title="StdDev") mult2= input(1.5, minval=0.001, maxval=50, title="exp") mult3= input(1.0, minval=0.001, maxval=50, title="exp1") basis = sma(src, length) dev = mult * stdev(src, length) upper = basis + dev lower = basis - dev dev2= mult2 * stdev(src, length) Supper= basis + dev2 Slower= basis - dev2 dev3= mult3 * stdev(src, length) upper1= basis + dev3 lower1= basis - dev3 offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500) plot(basis, "Basis", color=#FF6D00, offset = offset) p1 = plot(upper, "Upper", color=#2962FF, offset = offset) p2 = plot(lower, "Lower", color=#2962FF, offset = offset) fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95)) //---------------------------------------------------- exit=(close-strategy.position_avg_price / strategy.position_avg_price*100) bull=(close>Supper and BV>SV and BV>Davgvol) bull2=(close>ma20 and BV>SV and BV>Davgvol) bux =(close<Supper and close>Slower and volume<Wavgvol) bear=(close<Slower and close<lower and SV>BV and SV>Wavgvol) hi=highest(exit,10) imInATrade = strategy.position_size != 0 highestPriceAfterEntry = valuewhen(imInATrade, high, 0) // STRATEGY LONG // if (bull and close>ma3 and ma20>ma60 and rsi<70) strategy.entry("Long",strategy.long,0.1) if (strategy.position_avg_price*1.05<close) strategy.close("Long",0.1) else if (highestPriceAfterEntry*0.999<close and close>strategy.position_avg_price*1.002) strategy.close("Long",0.1) else if (highestPriceAfterEntry*0.997<close and close>strategy.position_avg_price*1.002) strategy.close("Long",0.1) else if (highestPriceAfterEntry*0.995<close and close>strategy.position_avg_price*1.002) strategy.close("Long",0.1) else if (strategy.openprofit < strategy.position_avg_price*0.9-close) strategy.close("Long",0.1) ////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////