
Strategi ini adalah berdasarkan pada rata-rata bergerak dan jumlah transaksi, merancang strategi kuantitatif untuk membendung kejatuhan. Apabila harga saham berada di garisan hari ke-20, dan jumlah pembelian hari itu lebih besar daripada jumlah penjualan dan lebih besar daripada jumlah transaksi rata-rata hari terakhir n, pasaran dianggap berada dalam keadaan bertopeng, membeli; apabila harga saham jatuh dari landasan, dan jumlah penjualan hari itu lebih besar daripada jumlah pembelian dan lebih besar daripada jumlah transaksi rata-rata hari terakhir n, pasaran dianggap berada dalam keadaan kosong, menjual.
Strategi ini dibuat berdasarkan dua petunjuk:
Garis dua rata: mengira garis 20 hari dan garis 60 hari, apabila di atas garis 20 hari melintasi garis 60 hari, pasaran dianggap berada dalam keadaan bullish; apabila di bawah garis 20 hari melintasi garis 60 hari, pasaran dianggap berada dalam keadaan bearish.
Jumlah urus niaga: mengira jumlah pembelian dan penjualan setiap hari, jika jumlah pembelian lebih besar daripada jumlah penjualan dan lebih besar daripada jumlah urus niaga rata-rata n hari yang lalu, maka ia dianggap sebagai perdagangan berganda; jika jumlah penjualan lebih besar daripada jumlah pembelian dan lebih besar daripada jumlah urus niaga rata-rata n hari yang lalu, maka ia dianggap sebagai perdagangan kosong.
Strategi dan logik perdagangan adalah seperti berikut:
Masuk berganda: Apabila harga penutupan berada di garisan 20 hari, dan jumlah pembelian hari itu lebih besar daripada jumlah penjualan dan jumlah urus niaga rata-rata n hari yang lalu, pasaran dianggap berada dalam keadaan melihat banyak, berdasarkan kadar turun naik, jalur Brin dikira, jika harga penutupan berada di antara rel tengah dan bawah jalur Brin, masuk ke dalam lebih banyak.
Masuk kosong: Apabila harga penutupan jatuh ke bawah, dan jumlah penjualan hari itu lebih besar daripada jumlah pembelian dan jumlah urus niaga rata-rata n hari yang lalu, pasar dianggap berada dalam keadaan kosong. Berdasarkan kadar turun naik, Burin band dikira, dan masuk kosong jika harga penutupan kurang dari Burin band.
Hentikan dan hentikan kerugian: Tetapkan tempat berhenti dan hentikan kerugian yang munasabah, tetapkan keuntungan atau mengurangkan kerugian. Seperti berhenti apabila harga saham meningkat sebanyak 5% daripada harga kemasukan; berhenti apabila kerugian mencapai 10%; atau berhenti apabila harga saham jatuh kembali setelah mencapai tinggi baru-baru ini.
Strategi ini mempunyai kelebihan berikut:
Gabungan dua garis rata-rata dan petunjuk jumlah urus niaga, mengelakkan kawasan buta yang dinilai oleh satu petunjuk teknikal.
Blink yang menggunakan parameter yang berbeza untuk menentukan harga dagangan tertentu, menjadikan kemasukan lebih tepat.
Strategi hentian dan hentian adalah munasabah untuk mengunci keuntungan dan mengawal risiko.
Hasil pengesanan adalah baik, pendapatan stabil, dan boleh digunakan secara praktikal untuk perdagangan kuantitatif.
Strategi ini mempunyai beberapa risiko:
Strategi dua garis rata mudah menghasilkan isyarat yang salah dan memerlukan penapisan dengan penunjuk kuantitatif.
Tetapan parameter Brin yang tidak betul boleh menyebabkan kemasukan terlalu kerap atau jarang.
Tetapan yang tidak betul pada titik hentian yang ditetapkan boleh menjejaskan keuntungan strategi.
Data sejarah yang diperlukan untuk pengesahan semula dan kemungkinan kehilangan yang tidak disengajakan dalam cakera.
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Mengoptimumkan parameter sistem garis rata untuk mencari kombinasi garis rata yang terbaik.
Optimumkan parameter Brin untuk membuat kemasukan lebih tepat.
Secara dinamik, anda boleh menyesuaikan titik hentian anda dan menetapkan nisbah keuntungan dan kerugian yang wajar mengikut keadaan pasaran.
Menambah penilaian petunjuk teknikal lain, seperti MACD, KD dan sebagainya, meningkatkan ketepatan strategi.
Menggunakan kaedah pembelajaran mesin untuk mencari parameter terbaik secara automatik, menjadikan strategi lebih kasar.
Strategi ini secara keseluruhan adalah strategi perdagangan kuantitatif yang sangat praktikal, prestasi yang baik, mudah dilaksanakan, risiko boleh dikawal, merupakan strategi yang stabil yang sesuai untuk perdagangan sebenar, yang patut dipelajari oleh pedagang kuantitatif. Sudah tentu, ruang untuk pengoptimuman strategi masih besar, diharapkan lebih banyak ahli perdagangan kuantitatif untuk 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)
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////