Berdasarkan strategi rata-rata pergerakan ganda dari perdagangan kuantitatif


Tanggal Pembuatan: 2023-12-29 11:03:14 Akhirnya memodifikasi: 2023-12-29 11:03:14
menyalin: 2 Jumlah klik: 659
1
fokus pada
1621
Pengikut

Berdasarkan strategi rata-rata pergerakan ganda dari perdagangan kuantitatif

Ringkasan

Strategi ini didasarkan pada indikator teknis dari moving average dan volume transaksi, dan didesain sebagai strategi kuantitatif untuk mencekik penurunan. Ketika harga saham berada di garis 20 hari, dan volume pembelian hari itu lebih besar dari volume penjualan dan lebih besar dari volume transaksi rata-rata hari terakhir, pasar dianggap berada dalam kondisi overhead, yang harus dibeli; Ketika harga saham tergelincir, dan volume penjualan hari itu lebih besar dari volume pembelian dan lebih besar dari volume transaksi rata-rata hari terakhir, pasar dianggap berada dalam kondisi overhead, yang harus dijual.

Prinsip Strategi

Strategi ini didasarkan pada dua indikator:

  1. Garis rata ganda: menghitung garis 20 hari dan garis 60 hari, ketika garis 20 hari melewati garis 60 hari, pasar dianggap berada dalam keadaan bullish; ketika garis 20 hari melewati garis 60 hari, pasar dianggap berada dalam keadaan bearish.

  2. Volume transaksi: Menghitung volume transaksi pembelian dan penjualan setiap hari, jika volume pembelian lebih besar dari volume penjualan dan lebih besar dari volume transaksi rata-rata di hari terakhir, maka akan dianggap sebagai transaksi multihead; Jika volume penjualan lebih besar dari volume pembelian dan lebih besar dari volume transaksi rata-rata di hari terakhir, maka akan dianggap sebagai transaksi kosong.

Strategi dan logika transaksi spesifiknya adalah sebagai berikut:

Multiple entry: Ketika harga close out berada di garis 20 dan jumlah pembelian hari itu lebih besar dari jumlah penjualan dan volume transaksi rata-rata di hari terakhir, pasar dianggap berada dalam kondisi bullish. Berdasarkan volatilitas, Bollinger Bands dihitung, dan jika harga close out berada di antara rel tengah dan bawah rel Bollinger Bands, maka masuklah lebih banyak.

Bottom entry: Ketika harga penutupan jatuh ke bawah, dan jumlah penjualan hari itu lebih besar dari jumlah pembelian dan volume transaksi rata-rata selama n hari terakhir, pasar dianggap berada dalam kondisi bullish. Berdasarkan volatilitas, Bollinger Bands dihitung, dan jika harga penutupan kurang dari Bollinger Bands, masuklah ke dalam posisi kosong.

Stop dan stop loss: menetapkan stop dan stop loss yang masuk akal, tetapkan keuntungan atau mengurangi kerugian. Misalnya, stop ketika harga saham naik 5% dari harga masuk; stop ketika kerugian mencapai 10%; atau stop ketika harga saham turun setelah mencapai tinggi baru-baru ini.

Analisis Keunggulan

Strategi ini memiliki keuntungan sebagai berikut:

  1. Kombinasi dua rata-rata dan volume transaksi, menghindari blind area dari penilaian indikator teknis tunggal.

  2. Brines dengan parameter yang berbeda menentukan harga transaksi yang spesifik, sehingga masuk lebih tepat.

  3. Stop loss strategi yang masuk akal untuk mengunci keuntungan dan mengendalikan risiko.

  4. Hasil pengamatan yang baik, pendapatan yang stabil, dapat secara praktis digunakan untuk perdagangan kuantitatif.

Analisis risiko

Strategi ini juga memiliki beberapa risiko:

  1. Strategi dua garis rata mudah menghasilkan sinyal yang salah, yang memerlukan pengelupasan dari indikator kuantitatif.

  2. Tidak tepatnya pengaturan parameter Brin-band dapat menyebabkan terlalu sering atau jarang masuk.

  3. Stop loss yang ditetapkan tidak tepat dapat mempengaruhi keuntungan strategi.

  4. Perlu banyak data historis untuk melakukan verifikasi ulang, dan masih bisa terjadi kerugian yang tidak disengaja pada hard drive.

Arah optimasi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Mengoptimalkan parameter sistem garis rata untuk mencari kombinasi garis rata yang optimal.

  2. Optimalkan parameter Brin untuk membuat entri lebih akurat.

  3. Mengatur stop loss secara dinamis dan menetapkan rasio untung rugi yang wajar sesuai dengan kondisi pasar.

  4. Menambahkan penilaian indikator teknis lainnya, seperti MACD, KD, dan lain-lain, untuk meningkatkan akurasi strategi.

  5. Menggunakan metode pembelajaran mesin untuk mencari parameter yang optimal secara otomatis, membuat strategi lebih kasar.

Meringkaskan

Secara keseluruhan, strategi ini adalah strategi perdagangan kuantitatif yang sangat praktis, kinerja yang baik, mudah diterapkan, risiko dapat dikendalikan, dan merupakan strategi yang stabil yang cocok untuk perdagangan nyata, yang layak dipelajari oleh pedagang kuantitatif. Tentu saja, ruang untuk pengoptimalan strategi masih sangat besar, dan diharapkan ada lebih banyak ahli perdagangan kuantitatif untuk meningkatkannya.

Kode Sumber Strategi
/*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)
//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////