, [nowTime, ini.basb]]); ObjChart.add (([4, [nowTime, this.sabb]]); ObjChart.update (grafik); {}
### 4. In the entry function main(), execute the pre-transaction pre-processing code, which will only run once after the program is started, including:
- ```SetErrorFilter ( )``` to filter the unimportant information in the console
- ```exchange.IO ( )``` to set the digital currency to be traded
- ```ObjChart.reset ( )``` to clear the previous chart drawn before starting the program
- ```LogProfitReset ( )``` to clear the status bar information before starting the program
After the above pre-transaction pre-processing is defined, the next step is to enter the polling mode and execute the onTick() function repeatedly. It also sets the sleep time for Sleep () polling, because the API of some digital currency exchanges has built-in access limit for a certain period of time.
Fungsi utama
// Menapis maklumat yang tidak penting dalam konsol
SetErrorFilter ((
## II. Get and calculate data
1. Obtain basic data object, account balance, and boll indicator data for use in the trading logic.
Fungsi onTick() { var data = baru Data ((tradeTypeA, tradeTypeB); // Buat objek data asas var accountStocks = data.accountData.Stocks; // baki akaun var boll = data.boll ((dataLength, timeCycle); // Dapatkan data penunjuk boll if (!boll) return; // Return jika tiada data boll {}
## III. Place an order and handle the follow-up
1. Execute the buying and selling operation according to the above strategic logic. First, judge whether the price and indicator conditions are valid, then judge whether the position conditions are valid, and finally execute the trade () order function.
// Penjelasan perbezaan harga
// basb = (Menjual satu harga kontrak A - Beli satu harga kontrak B)
// sabb = (Beli satu harga kontrak A - Jual satu harga kontrak B)
jika (data.sabb > boll.middle && data.sabb < boll.up) { // Jika sabb lebih tinggi daripada trek tengah
jika (data.mp(tradeTypeA, 0)) { // Semak sama ada kontrak A mempunyai pesanan panjang sebelum meletakkan pesanan
data.trade ((tradeTypeA,
2. After the order is placed, it is necessary to deal with the abnormal situations such as the unsettled order and the holding of a single contract. And draw the chart.
data.cancelOrders(); // batalkan pesanan data.drawingChart ((bol); // lukisan data.isEven(); // Mengurus memegang kontrak individu
As above, we have created a simple cross-period arbitrage strategy of digital currency completely through more than 200 lines code. The complete code is as follows:
// Peralihan global
// Mengisytiharkan objek carta untuk carta konfigurasi
carta var = {
__isStock: benar,
Tip alat: {
xDateFormat:
// Parameter
var tradeTypeA =
// data asas fungsi Data ((tradeTypeA, tradeTypeB) { // Melewatkan dalam kontrak arbitrase A dan kontrak arbitrase B this.accountData = _C(exchange.GetAccount); // Dapatkan maklumat akaun this.positionData = _C(exchange.GetPosition); // Dapatkan maklumat kedudukan var rekodData = _C(exchange.GetRecords); // Dapatkan data K-line pertukaran.SetContractType(tradeTypeA); // Mendaftar untuk arbitrage Kontrak var depthDataA = _C(exchange.GetDepth); // Arbitrage Data kedalaman kontrak pertukaran.SetContractType(tradeTypeB); // Mendaftar untuk kontrak arbitrase B var depthDataB = _C(exchange.GetDepth); // Data kedalaman kontrak Arbitrage B this.time = rekodData[rekodData.length - 1].Time; // Masa untuk mendapatkan data terkini this.askA = kedalamanDataA.Aks[0].Price; // Jual satu harga arbitrage Kontrak this.bidA = depthDataA.Bids[0].Price; // Beli satu harga arbitrage Kontrak this.askB = depthDataB.Aks[0].Price; // Jual satu harga kontrak arbitrage B this.bidB = depthDataB.Bids[0].Price; // Beli satu harga kontrak arbitrage B // Perbezaan harga arbitrage positif (Menjual satu harga kontrak A - Beli satu harga kontrak B) this.basb = depthDataA.Aks[0].Price - depthDataB.Bids[0].Price; // Perbezaan harga arbitrage negatif (Beli satu harga kontrak A - Jual satu harga kontrak B) this.sabb = depthDataA.Bids[0].Price - depthDataB.Aks[0].Price; {}
// Dapatkan kedudukan Data.prototype.mp = fungsi (perdaganganJenis, jenis) { var positionData = this.positionData; // Dapatkan maklumat kedudukan untuk (var i = 0; i < kedudukanData.panjang; i++) { jika (posisiData[i].ContractType == tradeType) { jika (posisiData[i].Jenis == jenis) { jika (posisiData[i].Jumlah > 0) { Kembali kedudukanData[i].Jumlah; {} {} {} {} pulangkan false; {}
// Sintesis data K-line baru dan data penunjuk boll Data.prototype.boll = fungsi (nombor, masa) { var self = {}; // Objek sementara // Nilai median antara perbezaan harga arbitrage positif dan perbezaan harga arbitrage negatif self.Close = (ini.basb + ini.sabb) / 2; jika (this.timeA == this.timeB) { self.Time = this.time; } // Bandingkan dua cap masa data kedalaman jika (this.time - oldTime > timeCycle * 60000) { bar.push ((self); oldTime = this.time; } // Pindahkan objek data perbezaan harga ke dalam susunan K-garis mengikut tempoh masa yang ditentukan jika (bars.length > num * 2) { bar.shift(); // Kawal panjang barisan K-garis { lain { pulangan; {} var boll = TA.BOLL(bars, num, 2); // Panggil penunjuk boll di perpustakaan talib Kembali { ke atas: boll[0][boll[0].length - 1], // petunjuk boll trek atas tengah: boll[1][boll[1].panjang - 1], // petunjuk boll trek tengah ke bawah: boll[2][boll[2].panjang - 1] // petunjuk boll ke bawah trek } // Kembalikan data penunjuk boll yang diproses {}
// Buat pesanan
Data.prototype.trade = fungsi (tradeType, jenis) {
exchange.SetContractType(tradeType); // Mendaftar semula kontrak sebelum meletakkan pesanan
var askPrice, bidPrice;
if (tradeType == tradeTypeA) { // Jika pesanan diletakkan dalam kontrak A
askPrice = ini.askA; // Tetapkan askPrice
bidPrice = this.bidA; // Tetapkan bidPrice
} lain jika (tradeType == tradeTypeB) { // Jika pesanan diletakkan dalam kontrak B
askPrice = this.askB; // Tetapkan askPrice
bidPrice = this.bidB; // Tetapkan bidPrice
{}
menukar (jenis) { // Mencocokkan mod penempatan pesanan
kes
// Batalkan pesanan Data.prototype.cancelOrders = fungsi () { Tidur ((500); // Kelewatan sebelum pembatalan, kerana beberapa pertukaran, anda tahu apa yang saya maksudkan var order = _C(exchange.GetOrders); // Dapatkan pelbagai pesanan yang belum dipenuhi if (orders.length > 0) { // Jika ada pesanan yang belum dipenuhi untuk (var i = 0; i < order.length; i++) { // Iterate melalui pelbagai perintah yang tidak dipenuhi exchange.CancelOrder ((pesanan[i].Id); // Batalkan pesanan yang belum diisi satu demi satu Tidur ((500); // Tidur selama 0.5 saat {} kembali false; // Kembali false jika pesanan yang belum diisi dibatalkan {} kembali benar; // Kembali benar jika tidak ada pesanan yang belum dipenuhi {}
// Mengurus memegang kontrak individu Data.prototype.isEven = fungsi () { var positionData = this.positionData; // Dapatkan maklumat kedudukan var jenis = sifar; // menukar arah kedudukan // Jika selebihnya 2 dari panjang array kedudukan tidak sama dengan 0 atau panjang array kedudukan tidak sama dengan 2 jika (positionData.length % 2!= 0 untuk (var i = 0; i < positionData.length; i++) { // Iterate melalui array kedudukan if (positionData[i].Type == 0) { // Jika ia adalah perintah panjang jenis = 10; // Tetapkan parameter urutan } lain jika (positionData[i].Type == 1) { // Jika ia adalah perintah pendek jenis = -10; // Tetapkan parameter urutan {} // Tutup semua kedudukan this.trade(positionData[i].ContractJenis, jenis, kedudukanData[i].Jumlah); {} {} {}
// Menggambar Data.prototype.drawingGrafik = fungsi (bola) { var nowTime = baru Tanggal (().getTime ((); ObjChart.add (([0, [nowTime, boll.up]]); ObjChart.add (([1, [nowTime, boll.middle]]); ObjChart.add (([2, [nowTime, boll.down]]); ObjChart.add (([3, [nowTime, this.basb]]); ObjChart.add (([4, [nowTime, this.sabb]]); ObjChart.update (grafik); {}
// Syarat Perdagangan
Fungsi onTick() {
var data = baru Data ((tradeTypeA, tradeTypeB); // Buat objek data asas
var accountStocks = data.accountData.Stocks; // baki akaun
var boll = data.boll ((dataLength, timeCycle); // Dapatkan data penunjuk boll
if (!boll) return; // Return jika tiada data boll
// Penjelasan perbezaan harga
// basb = (Menjual satu harga kontrak A - Beli satu harga kontrak B)
// sabb = (Beli satu harga kontrak A - Jual satu harga kontrak B)
jika (data.sabb > boll.middle && data.sabb < boll.up) { // Jika sabb lebih tinggi daripada trek tengah
jika (data.mp(tradeTypeA, 0)) { // Semak sama ada kontrak A mempunyai pesanan panjang sebelum meletakkan pesanan
data.trade ((tradeTypeA,
// Fungsi kemasukan
Fungsi utama
// Menapis maklumat yang tidak penting dalam konsol
SetErrorFilter ((
Oleh itu, kita boleh membeli rendah dan menjual tinggi pada perbezaan harga untuk mendapatkan keuntungan. Kemudian, mengikut prinsip penyimpangan standard dalam statistik, jalur Bollinger dibentuk oleh trek tengah dan trek atas dan bawah yang dikira oleh penyimpangan standard, pembentukan tiga jalur mesh, yang sangat praktikal dalam transaksi arbitraj perbezaan harga.
Selepas ujian, beroperasi mengikut strategi ini, pendapatan keseluruhan agak stabil, walaupun pendapatan tidak banyak setiap kali tanpa mempertimbangkan yuran pengendalian dan kos kesan. Perlu diperhatikan bahawa kerana arbitraj statistik, terdapat risiko pengembangan kebalikan perbezaan harga. Kita mesti mempertimbangkan masalah stop-loss semasa merancang. Kedua, kita juga perlu memberi perhatian kepada kos kesan. Apabila kecairan dua kontrak yang terlibat dalam transaksi menyusut, ia akan memberi kesan yang besar kepada pendapatan, dan pelabur harus mengelakkannya sesuai.
Dalam dua kelas terakhir, kami menulis strategi trend dalam MyLanguage dan strategi arbitrage dalam JavaScript. Kami tidak melihat sebarang masalah dalam backtest strategi. Walau bagaimanapun, perdagangan kuantitatif bukanlah program, yang backtestnya boleh dilakukan secara langsung tanpa sebarang masalah.
Sebenarnya, backtest hanyalah simulasi strategi. Ia hanya digunakan untuk menilai prestasi strategi dalam data sejarah. Ia membolehkan peniaga menilai dan membuang beberapa strategi perdagangan dengan cepat.
Dalam banyak kes, strategi yang kelihatan hebat dalam backtest sering gagal memenuhi standard backtest di pasaran sebenar kerana pelbagai sebab.
Kita harus mempunyai konsep data statik dan data dinamik untuk mengukur terlebih dahulu. Dalam backtest, kita menggunakan data sejarah statik. Harga pembukaan tinggi dan penutupan rendah dengan setiap garis K lengkap, dan setiap isyarat urus niaga boleh ditutup 100%. Tetapi data di pasaran sebenar adalah dinamik. Sebagai contoh, jika harga maksimum lebih besar daripada harga maksimum dalam masa 1 jam pembukaan, beli. Tetapi jika garis K semasa belum selesai, harga maksimum adalah dinamik, dan isyarat perdagangan mungkin berkedip ke belakang dan ke hadapan. Situasi ini menunjukkan bahawa strategi menggunakan fungsi masa depan dalam menilai keadaan perdagangan beli dan jual.
Apakah fungsi masa depan? Mari kita lihat penjelasan Ensiklopedia Baidu terlebih dahulu: Kuantiti bergantung pada kuantiti lain, seperti kuantiti A dan kuantiti B. Jika B berubah, A berubah, maka A adalah fungsi B. Jika B adalah kuantiti kemudian, A adalah kuantiti sebelumnya, A berubah dengan B, dan A adalah fungsi masa depan B. Anda mungkin keliru.
Secara umum, ia adalah fungsi mengutip data masa depan, seperti meramalkan harga esok dengan harga esok. Jika penunjuk teknikal mengandungi fungsi masa depan, isyaratnya tidak pasti. Ia sering isyarat urus niaga semasa. Apabila garis K seterusnya muncul, isyarat itu hilang atau menukar kedudukan.
Harga penutupan adalah fungsi masa depan. Harga penutupan sentiasa berubah sehingga garis K terkini habis. Anda mesti menunggu sehingga garis K habis untuk menentukan harga penutupan. Oleh kerana harga penutupan itu sendiri adalah fungsi masa depan, semua penunjuk teknikal berdasarkan harga penutupan juga adalah fungsi masa depan.
Oleh itu, jika penunjuk teknikal menggunakan harga penutupan yang disahkan sebagai data asas, isyarat dagangan tidak akan berubah tidak kira berapa lama ia telah berlalu, dapat dikatakan bahawa penunjuk teknikal tidak merujuk kepada fungsi masa depan. Tetapi data asas yang digunakan adalah harga penutupan yang tidak disahkan, jadi penunjuk teknikal ini merujuk kepada fungsi masa depan, dan isyarat dagangan mungkin berubah dalam aplikasi praktikal.
Fungsi masa depan menggunakan harga masa depan, yang juga boleh menggunakan harga masa lalu sebaliknya. Ini juga merupakan masalah yang banyak pemula cenderung mengabaikan. Untuk lebih menggambarkan masalah ini di masa depan, mari kita ambil contoh: jika harga maksimum semasa lebih besar daripada harga maksimum dalam masa 1 jam selepas pembukaan, beli pada harga pembukaan. Jelas, tidak ada masalah dengan syarat isyarat beli dan jual, tetapi harga pesanan telah menggunakan harga masa lalu.
Dalam backtest, strategi adalah normal, kerana enjin backtest berdasarkan data statik boleh ditutup 100% hanya jika terdapat isyarat beli. Walau bagaimanapun, apabila harga tertinggi lebih besar daripada harga tertinggi dalam masa 1 jam selepas pembukaan, ia pasti bahawa pesanan tidak boleh dikeluarkan pada harga pembukaan harga sebelumnya.
Yang dipanggil kekosongan harga merujuk kepada harga yang dipaparkan pada carta garis K, tetapi harga yang tidak boleh didagangkan di pasaran sebenar, terutamanya dibahagikan kepada kes-kes berikut:
Overfitting adalah kesilapan biasa yang dilakukan oleh pemula perdagangan kuantitatif. Apa itu overfitting? Untuk mengambil contoh yang mudah, sesetengah orang menggunakan banyak latihan untuk menghafal setiap soalan dalam peperiksaan sekolah. Dia tidak boleh melakukannya jika subjek berubah sedikit semasa peperiksaan. Kerana dia menghafal latihan setiap soalan dengan cara yang sangat kompleks, dia tidak abstrak peraturan umum.
Seperti carta di atas, model boleh menyesuaikan diri dengan data dengan sempurna selagi ia cukup kompleks. Ini juga berlaku untuk terlalu sesuai dalam perdagangan kuantitatif. Jika strategi anda rumit dan mempunyai banyak parameter luaran, akan selalu ada satu atau beberapa parameter yang dapat sesuai dengan pasaran sejarah dalam ujian belakang data sejarah yang terhad.
Walau bagaimanapun, dalam pasaran sebenar masa depan, perubahan harga mungkin melebihi had strategi anda. Sebenarnya, intipati pembangunan strategi perdagangan kuantitatif adalah proses pencocokan data bukan rawak tempatan dari sebilangan besar data yang seolah-olah rawak. Oleh itu, kita perlu menggunakan pengetahuan statistik untuk mengelakkan perangkap. Bagaimana kita melakukannya?
Penyelesaian kompromi adalah menggunakan data intra-sampel dan extra-sampel. Bahagikan keseluruhan data kepada dua bahagian, dan gunakan intra-sampel sebagai set latihan, yang bertanggungjawab untuk backtest data. Sampel tambahan digunakan sebagai set ujian dan bertanggungjawab untuk pengesahan. Jika terdapat sedikit data sejarah, anda juga boleh menggunakan kaedah ujian silang.
Jika anda mendapati bahawa data dari sampel tidak berfungsi dengan baik, dan anda merasakan bahawa ia terlalu buruk untuk kehilangan model atau anda tidak bersedia untuk mengakui bahawa model anda tidak baik, dan anda terus mengoptimumkan model untuk data sampel tambahan sehingga data sampel tambahan juga berfungsi dengan baik, maka anda mesti kehilangan wang anda pada akhirnya.
Bias kelangsungan hidup boleh dijelaskan dengan contoh berikut: 1. Apabila berdiri di tuyere, babi akan terbang. 2. Orang yang menjual parasut dalam talian dipuji, kerana orang yang mempunyai masalah dengan parasut tidak hidup lagi. 3. Wartawan menyoal siasat sama ada penumpang telah membeli tiket di dalam bas, kerana orang yang tidak mempunyai tiket tidak boleh naik bas sama sekali. 4. Media mengiklankan bahawa loteri boleh dimenangi, kerana media tidak akan secara aktif mempromosikan orang yang tidak memenangi loteri.
Dalam contoh di atas, kita dapat mendapati bahawa maklumat yang biasanya diterima orang sebenarnya disaring, yang menjadikan sejumlah besar data atau sampel diabaikan secara selektif, dan hasilnya adalah kesimpulan berdasarkan bias kelangsungan hidup telah menyimpang dari masa nyata. Jadi dalam perdagangan kuantitatif, kita juga perlu memberi tumpuan kepada apakah hasil backtest adalah sebahagian daripada nasib. Dalam banyak kes, hasil backtest mungkin merupakan prestasi terbaik dalam keseluruhan backtest. Perhatikan angka berikut:
Gambar di sebelah kiri adalah strategi perdagangan yang sangat baik. Kurva modal adalah baik, dan tidak ada pengeluaran yang ketara, dan pulangan keuntungan yang stabil dapat diperoleh. Tetapi lihat gambar di sebelah kanan. Ia hanya yang terbaik dalam beratus-ratus transaksi backtest. Di sisi lain, apabila kita melihat pasaran kewangan, selalu ada lebih banyak bintang dan bintang umur panjang yang kurang. Jika strategi peniaga konsisten dengan keadaan pasaran, maka pasaran setiap tahun boleh membuat kumpulan bintang, tetapi sukar untuk melihat bintang umur panjang yang dapat membuat keuntungan yang stabil selama lebih dari tiga tahun berturut-turut.
Kecuali anda sedang menunggu pesanan, anda mungkin mempunyai harga bergerak semasa berdagang. Pada jenis dengan perdagangan aktif, harga tawaran dan harga permintaan biasanya berbeza pada satu titik. Pada jenis dengan perdagangan tidak aktif, perbezaannya mungkin lebih besar. Setiap kali anda ingin mengambil inisiatif untuk menutup perjanjian, anda memerlukan perbezaan satu mata sekurang-kurangnya, atau lebih. Walau bagaimanapun, dalam ujian belakang, kita tidak perlu mempertimbangkan isu transaksi, selagi ada isyarat, kita boleh berdagang, jadi untuk mensimulasikan persekitaran perdagangan sebenar, kita mesti menambah satu harga bergerak sekurang-kurangnya.
Terutama untuk strategi yang diperdagangkan lebih kerap, jika harga bergerak tidak ditambah apabila strategi diuji kembali, kurva modal akan sentiasa miring ke atas, dan sebaik sahaja harga bergerak yang munasabah ditambah, ia akan berubah menjadi kerugian dengan serta-merta.
Strategi yang sama akan sangat berbeza di pasaran yang cekap dan tidak cekap, bahkan sebaliknya. Sebagai contoh, di pasaran yang tidak cekap seperti pasaran saham domestik, niaga hadapan komoditi, dan mata wang digital asing, kerana asas kecil jumlah dagangan, kapasiti strategi frekuensi tinggi itu sendiri tidak terlalu besar, dan tidak ada ruang keuntungan untuk lebih banyak orang, dan walaupun strategi yang pada asalnya menguntungkan telah menjadi kerugian. Tetapi di pasaran pertukaran asing yang cekap, ia boleh menampung banyak jenis strategi frekuensi tinggi yang berbeza.
Di atas adalah masalah dan perangkap yang mungkin berlaku dalam pembangunan dan penggunaan strategi. Bagi pemaju sistem perdagangan yang berpengalaman, backtesting adalah suatu keharusan. Kerana ia dapat memberitahu anda sama ada idea strategik boleh disahkan dalam transaksi sejarah. Tetapi banyak kali, backtesting tidak bermakna ia akan menguntungkan pada masa akan datang. Kerana terdapat terlalu banyak perangkap dalam backtest, anda tidak akan memahami tanpa membayar beberapa pelajaran. Kursus ini dapat membantu anda mengelakkan banyak jalan memutar kuantitatif dan perangkap sekurang-kurangnya.
Dalam
Walaupun Livermore akhirnya menghela nafas: Tidak ada yang luar biasa tentang trend. Selalu ada banyak orang yang bullish di pasaran bull dan bearish di pasaran bear. Tetapi mereka selalu pandai berdagang dengan pasaran, cuba membeli di titik terendah dan menjual di titik tertinggi. Seperti Turki Lama, mereka yang melihat pasaran dan memegang kedudukan mereka yang benar-benar membuat kekayaan yang besar, yang juga yang paling sukar dipelajari. Ini bukan sahaja menghadapi pilihan sasaran dan waktu, tetapi juga menghadapi soalan yang lebih penting: berapa banyak kedudukan (risiko) yang harus kita pegang (beruang)?
Semua peniaga yang gagal mempunyai pemikiran sepihak. Apabila berdagang, orang tamak hanya melihat keuntungan dan bukan risiko, sementara orang pemalu hanya melihat risiko dan bukan keuntungan. Orang tamak dan pemalu lupa risiko apabila meningkat, dan lupa keuntungan apabila jatuh. Walau bagaimanapun, peniaga yang berjaya akan mempertimbangkan kedua-dua risiko dan pulangan, iaitu, mereka akan menanggung beberapa dolar risiko untuk setiap dolar yang mereka hasilkan. Kemudian indeks untuk mengukur pulangan dan risiko adalah nisbah risiko pulangan.
Ramai orang tahu bahawa risiko adalah sama besar dengan keuntungan, iaitu pulangan adalah sebanding dengan risiko. Menurut pandangan sesetengah orang, hubungan antara pulangan dan risiko harus seperti berikut: paksi mendatar adalah peratusan risiko, dan paksi menegak adalah peratusan pulangan:
Tetapi dalam urus niaga sebenar, pulangan dan risiko jauh dari menjadi semudah dua titik garis, sekurang-kurangnya ia tidak selalu bergerak secara linear. Risiko sebenar adalah jumlah kerugian maksimum yang boleh diambil dengan pulangan yang dijangkakan, atau apa yang kita panggil turun naik maksimum. Walaupun kadang-kadang kerugian terapung maksimum tidak selalu sama dengan kerugian penutupan dari segi hasil perdagangan, kerugian terapung maksimum adalah nyata.
Dari sini, kita boleh tahu bahawa nisbah pulangan terhadap risiko dalam rajah di atas bukan prestasi sebenar. Dalam persekitaran perdagangan sebenar nisbah pulangan terhadap risiko harus sama seperti dalam carta di bawah:
Mari kita lihat carta di atas. kurva kuning menunjukkan turun naik nilai bersih pada risiko yang berbeza. Dengan peningkatan pulangan yang dijangkakan, risiko juga berkembang secara beransur-ansur. Jika kita menetapkan muflis pada 0.5, iaitu, kerugian maksimum mencapai 50%, maka ini adalah strategi perdagangan yang gagal. Walaupun pulangan akhir strategi adalah positif dari hasilnya, ia sudah muflis di tengah-tengah.
Walaupun strategi anda adalah positif, ia akan menjadi pembubaran di bawah pengurusan kedudukan yang salah. Jadi dari sudut ini, berapa banyak untuk membeli dan menjual adalah lebih penting daripada bila untuk membeli dan menjual. Bagaimana untuk menguruskan kedudukan secara saintifik telah menjadi isu asas dalam urus niaga kewangan. Jadi sebelum cuba menyelesaikan masalah ini, mari kita lihat bagaimana untuk bertaruh secara saintifik dalam perjudian.
Mari kita ambil permainan dilemparkan duit syiling sebagai contoh. Misalkan kedua-dua sisi duit syiling mempunyai berat yang sama. Jika terdapat keuntungan kepala 2 yuan dan kerugian ekor 1 yuan, jelas bahawa ini adalah permainan jangkaan positif. Kadar kemenangan adalah 50% dan kerugian 2.
Jika kita tidak berfikir dengan teliti, kita akan berfikir bahawa kerana pulangan setiap pertaruhan adalah 50% * 2-50% * 1, iaitu 50%, maka untuk mencapai pulangan maksimum dengan cepat, kita harus melabur modal sebanyak mungkin dalam setiap pertaruhan.
Walau bagaimanapun, adalah jelas bahawa ia tidak munasabah untuk melabur 100% daripada modal utama dalam setiap permainan perjudian, kerana selagi anda kehilangan modal utama sekali, ia akan hilang, walaupun ia sangat tidak mungkin. kerana selagi anda berjudi cukup kali, kehilangan wang pasti akan berlaku.
Seseorang mungkin bertanya, kerana pertaruhan 100% tidak munasabah, bagaimana dengan pertaruhan 90% atau lebih rendah? Sebenarnya, untuk menyelesaikan masalah ini, kita boleh membuat eksperimen untuk mensimulasikan permainan perjudian dan melihat bagaimana hasil setiap pertaruhan. Seperti yang ditunjukkan dalam carta berikut:
Dari carta, kita dapat melihat bahawa apabila kita secara beransur-ansur mengurangkan kedudukan dari 90%, 80%, 70%, 60% dan 50%, dalam pertaruhan yang sama, hasilnya sama sekali berbeza.
Kemudian sesetengah orang mungkin bertanya sama ada pertaruhan yang lebih kecil setiap kali, lebih baik, seperti 10%. Tidak mungkin untuk mengira setiap nisbah taruhan. Ini adalah masalah yang harus diselesaikan oleh Kriteria Kelly yang terkenal. Dalam statistik, Kriteria Kelly dapat memaksimumkan kadar pertumbuhan jangka panjang strategi dengan jangkaan positif taruhan berulang, dan ia boleh mengira nisbah taruhan terbaik dalam setiap taruhan.
Tidak hanya itu, dengan mengandaikan bahawa prinsipal dan pertaruhan dapat dibahagikan tanpa akhir, adalah mustahil untuk muflis dalam mana-mana pertaruhan dengan menggunakan Kriteria Kelly. Terutamanya dalam aplikasi praktikal transaksi kewangan, ia adalah strategi pengurusan kedudukan dengan serangan dan pertahanan.
Kemudian kita boleh mengira contoh perjudian dalam pelajaran ini mengikut Kriteria Kelly. Modal awal 100 yuan boleh mencapai 1 juta yuan pada kelajuan terpantas dengan menggunakan nisbah pertaruhan apabila nisbah kemenangan adalah 50% dan peluang adalah 2.
(0.5*(2+1) -1)/2=0.25
Kadar kemenangan 50% adalah 0.5. Kalikan peluang dengan 2 ditambah 1, kemudian kurangkan 1, dan kemudian bagi dengan 2. Hasil pengiraan adalah 0.25. Maksudnya, dalam setiap pertaruhan, menggunakan 25% daripada modal utama, anda boleh mencapai 1 juta yuan pada kelajuan terpantas. Kita boleh mensimulasikan secara manual mengikut hasil pengiraan untuk melihat sama ada ia betul.
Gambar di atas adalah hasil simulasi manual. Sila lihat baris terakhir. Dalam pertaruhan yang sama, selepas lebih daripada 100 pusingan, 25% kedudukan mencapai 1 juta yuan terlebih dahulu. Hasil 90%, 80%, 70% dan 60% kedudukan adalah negatif, yang menunjukkan bahawa walaupun strategi perdagangan jangkaan positif akan muflis di bawah pengurusan kedudukan yang salah.
Kami juga dapat melihat bahawa 50% kedudukan tidak akan kalah atau menang pada akhirnya, yang juga konsisten dengan hasil undang-undang nombor besar. Untuk lebih menggambarkan masalah ini, kedudukan 10% juga ditambahkan dalam simulasi manual. Walaupun hasil akhir adalah pulangan positif, kesannya beberapa perintah besar lebih buruk daripada kedudukan 25%.
Anda boleh melihat kuasa Kriteria Kelly. Jika anda memilih 10% daripada kedudukan utama dalam aplikasi sebenar, pokok anda akan menjadi lebih daripada 30,000 dalam lebih daripada 100 pertaruhan. Walaupun pulangan besar, berbanding dengan 25% daripada kedudukan utama, ia bersamaan dengan tidak ada keuntungan. Ini adalah kuasa pengetahuan.
Jika anda ingin membuat keuntungan dari Kriteria Kelly dalam hidup, anda perlu memenuhi syarat permohonan Kriteria Kelly. Tidak ada keraguan bahawa pertaruhan ini mesti datang dari pasaran kewangan. Terutamanya dalam perdagangan kuantitatif, kita boleh kira-kira mengira nisbah kemenangan dan peluang yang sesuai melalui backtesting data sejarah.
Sudah tentu, penerapan praktikal Kriteria Kelly dalam urus niaga kewangan tidak boleh begitu mudah, dan terdapat banyak butiran yang perlu ditangani, seperti kos modal dalam urus niaga leveraged, modal dan kedudukan dalam urus niaga sebenar tidak boleh dibahagikan secara tanpa wayar, dan nisbah kemenangan dan nisbah kerugian dalam urus niaga berubah secara dinamik, dan sebagainya.