Mengembangkan strategi CTA untuk keuntungan mutlak dari transaksi kuantitatif hingga pengurusan aset

Penulis: , Dicipta: 2019-06-26 10:27:41, Dikemas kini: 2023-10-30 20:30:50

[TOC]

img

Pengantar

Kenapa perlu belajar pelajaran ini?Apa faedahnya untuk belajar kursus ini? Pertama, kursus ini adalah berdasarkan bahasa pengaturcaraan JavaScript dan Python, bahasa itu hanya teknologi, dan akhirnya kita perlu menggunakan teknologi ini ke dalam industri. Perdagangan kuantitatif adalah industri baru yang sedang berkembang pesat dan permintaan bakat yang tinggi.

Pelajaran sistem melalui kursus ini akan membantu anda untuk memahami lebih mendalam mengenai bidang perdagangan kuantitatif, jika anda bersedia untuk merentasi bidang perdagangan kuantitatif, jika anda adalah peminat pelaburan saham atau niaga hadapan, perdagangan kuantitatif boleh membantu anda dalam perdagangan utama anda, dengan membangunkan strategi perdagangan untuk memperoleh keuntungan di pasaran kewangan, dan juga memperluaskan saluran dan platform kewangan pelaburan anda sendiri.

Sebelum ini, saya ingin membincangkan pengalaman perdagangan peribadi saya, saya bukan seorang profesional kewangan, saya belajar statistik. Saya mula berdagang saham secara subjektif sejak zaman pelajar, dan kemudian menjadi seorang pelabur kuantitatif untuk dana persendirian domestik, terutama dalam penyelidikan dan pembangunan strategi.

Saya juga telah mengembangkan pelbagai jenis strategi sebelum dan sesudah beberapa dekad di dalam lingkaran perdagangan ini. Konsep pelaburan saya adalah: kawalan risiko di atas segalanya dan memberi tumpuan kepada pulangan mutlak. Tema kursus kami adalah: Mengembangkan strategi CTA untuk pulangan mutlak dari perdagangan kuantitatif hingga pengurusan aset.

1. Strategi CTA niaga hadapan

1.1 Mengenali CTA niaga hadapan

Mungkin ada yang bertanya apa itu CTA? Apa sebenarnya CTA? CTA di luar negara dikenali sebagai penasihat perdagangan komoditi, di dalam negara biasanya dikenali sebagai pengurus pelaburan. CTA tradisional adalah mengumpul dana pelabur besar-besaran, kemudian menugaskan kepada institusi pelaburan profesional, dan akhirnya melalui penasihat perdagangan (iaitu CTA) untuk pelaburan niaga hadapan saham, niaga hadapan komoditi, niaga hadapan bon negara.

Tetapi sebenarnya, dengan perkembangan pasaran niaga hadapan global, konsep CTA juga semakin berkembang dan lebih luas daripada pasaran niaga hadapan tradisional. Ia boleh digunakan bukan sahaja untuk melabur di pasaran niaga hadapan, tetapi juga untuk melabur di pasaran kadar faedah, pasaran saham, pasaran pertukaran asing dan pasaran pilihan, dan sebagainya.

Sebelum tahun 1980-an, teknologi cakera elektronik masih belum matang, ketika itu kebanyakan peniaga menilai pergerakan masa depan niaga hadapan komoditi dengan menggunakan petanda teknikal seperti Indikator William, KDJ, RSI, MACD, CCI. Kemudian, peniaga menubuhkan dana khusus CTA untuk membantu pelanggan menguruskan aset. Hanya selepas populariti cakera elektronik pada tahun 1980-an, dana CTA yang benar-benar muncul.

Perubahan ukuran pengurusan dana CTA img Unit: Sejuta dolar

Jika kita lihat gambar di atas, terutamanya dengan kemunculan dagangan kuantitatif, jumlah dana CTA global telah meningkat dari $ 130.6 bilion pada tahun 2005 kepada lebih daripada $ 300 bilion pada tahun 2015.

Perkembangan bersama dengan peningkatan saiz adalah prestasi dana CTA, yang kita lihat di bawah ini adalah Indeks CTA Barlak, yang merupakan penanda aras industri yang mewakili penasihat perdagangan komoditi global. Dari akhir 1979 hingga akhir 2016, indeks dana CTA Barlak telah mencapai pendapatan kumulatif sebanyak 28.95 kali ganda, dengan pulangan tahunan 9.59%, dengan kadar sharp 0.37, dan kenaikan maksimum 15.66%.

Oleh kerana strategi CTA biasanya mempunyai hubungan yang sangat rendah dengan strategi lain dalam portfolio peruntukan aset. Seperti di bawah, dalam tempoh bearish saham global 2000-2002 dan krisis pinjaman global 2008, indeks dana Barclays CTA tidak hanya tidak jatuh tetapi juga memperoleh keuntungan positif, CTA boleh memberikan keuntungan yang kuat apabila pasaran saham dan pasaran bon mengalami krisis. Selain itu, kita juga dapat melihat bahawa banyak indeks Barclays CTA komoditi telah mencapai tahap keuntungan sejak tahun 1980 dan telah berusaha untuk menekan 500 dan juga menarik diri dari bawah 500.

img

Perkembangan CTA di negara kita hanya hampir satu dekad, tetapi momentumnya sangat kuat, yang kebanyakannya mendapat manfaat daripada persekitaran perdagangan berjangka komoditi domestik yang lebih terbuka, ambang modal perdagangan yang lebih rendah, penggunaan sistem dana jaminan yang membolehkan banyak perdagangan dua hala, bayaran urus niaga yang rendah, struktur teknologi bursa yang lebih maju berbanding saham, tetapi juga lebih mudah untuk perdagangan sistem, dan banyak lagi.

Sejak tahun 2010, dana CTA wujud terutamanya dalam bentuk dana persendirian. Dengan dasar domestik yang secara beransur-ansur membuka ruang pelaburan dana eksklusif, dana CTA mula wujud dalam bentuk dana eksklusif, cara operasi yang lebih telus dan terbuka, juga menjadi alat yang diperlukan untuk mengalokasikan aset lebih banyak pelabur.

img

Seperti yang ditunjukkan di atas, CTA juga lebih sesuai untuk pedagang individu berbanding dengan strategi perdagangan lain, sama ada dari segi ketersediaan yang mudah, ambang dana, pelaksanaan strategi dagangan dan penyambungan API. Kontrak berjangka domestik sangat kecil, contohnya: beberapa ribu ringgit jagung atau kacang kedelai boleh didagangkan, hampir tidak ada ambang dana, dan kerana sebahagian lagi strategi CTA berasal dari analisis teknikal tradisional, ia lebih mudah berbanding dengan strategi lain.

img

Proses reka bentuk strategi CTA juga agak mudah, terlebih dahulu data sejarah diproses secara awal, dan kemudian dimasukkan ke dalam model kuantitatif, model kuantitatif yang merangkumi strategi dagangan yang dibentuk oleh alat seperti pemodelan matematik, reka bentuk pengaturcaraan dan lain-lain, menghasilkan isyarat dagangan dengan menganalisis data ini secara pengiraan.

1.2 Jenis strategi CTA niaga hadapan

Dari segi strategi dagangan, strategi CTA juga pelbagai: ia boleh menjadi strategi trend atau strategi pilihan; ia boleh menjadi strategi jangka panjang jangka panjang atau strategi jangka pendek dalam sehari; logik strategi boleh berdasarkan analisis teknikal atau analisis asas; ia boleh menjadi perdagangan subjektif atau perdagangan sistem.

Strategi CTA mempunyai kaedah pengelasan yang berbeza, mengikut kaedah dagangan, boleh dibahagikan kepada: dagangan subjektif dan dagangan sistem, strategi CTA di luar negara yang lebih maju dalam perkembangannya, strategi CTA dagangan sistem telah mendekati 100%. Menurut kaedah analisis, boleh dibahagikan kepada: analisis asas dan analisis teknikal. Menurut sumber pendapatan, boleh dibahagikan kepada: dagangan trend dan dagangan guncangan.

Secara keseluruhannya, strategi CTA mewakili kira-kira 70% strategi trend, kira-kira 25% strategi pulangan purata, dan kira-kira 5% strategi anti-trend atau pembalikan trend. Strategi trend yang paling besar, mengikut tempoh pegangan, boleh dibahagikan kepada: perdagangan frekuensi tinggi, perdagangan dalam hari, perdagangan pendek sederhana, perdagangan panjang sederhana.

Strategi bandar yang kerapPada masa ini terdapat dua strategi perdagangan frekuensi tinggi yang mainstream di pasaran, satu adalah strategi frekuensi tinggi untuk membuat pasaran, dan yang lain adalah strategi penawaran frekuensi tinggi. Strategi membuat pasaran adalah untuk menyediakan kecairan di pasaran dagangan, iaitu, dalam pasaran dagangan yang mempunyai pedagang dagangan, seseorang yang ingin membeli dan menjual perdagangan, pedagang dagangan mesti menjamin bahawa transaksi tunggalnya dapat dilakukan. Jika kecairan di pasaran tidak mencukupi, menyebabkan tunggal tidak dapat berurusan, pedagang dagangan mesti membeli dan menjual cakera lawan orang lain.

Strategi pilihan frekuensi tinggiSuti frekuensi tinggi adalah perdagangan dua saham atau gabungan ETF dan ETF yang sangat berkaitan. Menurut kaedah pengiraan ETF, harga yang diharapkan ETF boleh dikira dengan cara yang sama. Dengan harga indeks ETF mungkin dikurangkan daripada harga yang diharapkan ETF, anda boleh mendapatkan perbezaan, biasanya harga ini akan beroperasi dalam saluran harga, jika perbezaan itu menembusi saluran ke bawah, anda boleh berdagang perbezaan ini, menunggu untuk kembali dari perbezaan, dan mendapat keuntungan dari itu.

Strategi dalamanJika secara harfiah, ia boleh dipanggil strategi dagangan dalam sehari selagi ia tidak memegang saham semalaman. Oleh kerana tempoh pegangan dagangan dalam hari adalah pendek, ia biasanya tidak dapat membuat keuntungan dengan serta-merta setelah memasuki pasaran, ia akan keluar dengan cepat. Oleh itu, risiko pasaran yang ditanggung oleh kaedah perdagangan ini adalah rendah. Tetapi kerana pasaran berubah dengan cepat dalam masa yang singkat, strategi dalam hari biasanya memerlukan permintaan yang lebih tinggi kepada peniaga.

Strategi jangka panjangSecara teori, jangka masa pegangan yang lebih lama, lebih besar kapasiti strategi, lebih rendah perbandingan risiko. Khususnya dalam perdagangan institusi, kerana kapasiti strategi pendek adalah terhad, dana besar tidak boleh masuk dan keluar dalam masa yang singkat, maka lebih banyak strategi jangka panjang sedang akan disusun. Biasanya jangka masa pegangan adalah beberapa hari, bulan, atau bahkan lebih lama.

Data Strategi CTASecara amnya, strategi CTA digunakan untuk mengkaji data minit, jam dan hari, termasuk: harga buka, harga tertinggi, harga minimum, harga penutupan, jumlah dagangan, dan lain-lain; hanya segelintir strategi CTA menggunakan data Tick, seperti data mendalam seperti harga beli, harga jual, harga beli, dan jumlah jualan dalam data L2.

img

Untuk strategi CTA, idea asas yang kita fikirkan adalah berdasarkan kepada penunjuk teknikal tradisional, kerana terdapat lebih banyak rujukan awam, dan logiknya biasanya lebih mudah, sebahagian besarnya berdasarkan prinsip statistik. Contohnya, pelbagai penunjuk teknikal yang kita kenal: MA, SMA, EMA, MACD, KDJ, RSI, BOLL, W&R, DMI, ATR, SAR, BIAS, OBV, dan sebagainya.

Terdapat juga beberapa model perdagangan klasik yang boleh digunakan dan diperbaiki di pasaran, termasuk: pelbagai perpaduan garis, DualThrust, R-Breaker, perdagangan pantai, perdagangan grid, dan lain-lain.

Semua ini adalah strategi dagangan berdasarkan analisis teknikal tradisional, yang mana prosesnya adalah berdasarkan data sejarah dan konsep dagangan yang betul, untuk menguraikan faktor atau syarat jual beli yang mempunyai kelebihan kebarangkalian, dan mengandaikan pasaran akan tetap berlaku pada masa akan datang, akhirnya menggunakan kod untuk melaksanakan strategi dagangan dan perdagangan sepenuhnya automatik.

Kelebihan utama strategi CTA adalah bahawa ia dapat memperoleh keuntungan mutlak sama ada pasaran semasa naik atau turun, terutamanya apabila pasaran naik atau naik dengan cepat atau pergerakan pasaran jelas merosot. Keuntungan strategi ini sangat besar, bagaimanapun, terdapat kecenderungan untuk memperoleh keuntungan. Jika pasaran berada dalam sektor yang bergolak, atau apabila trend tidak jelas, strategi ini mungkin membeli pada titik tinggi, menjual pada titik rendah, dan terus-menerus mengambil kerugian.

1.3 Prinsip keuntungan strategi CTA niaga hadapan

Strategi CTA niaga hadapan menghasilkan wang kerana beberapa sebab:

  1. Pergerakan harga adalah bertentangan, ia sentiasa berterusan dengan cara trend. Apabila pelabur melihat harga naik, mereka akan membeli dengan angin, yang menyebabkan harga meningkat lebih lanjut. Harga turun juga berlaku. Oleh kerana pelabur lebih banyak bertindak tidak rasional, kadang-kadang kita akan melihat harga naik dengan luar biasa, turun dengan luar biasa.
  2. Toleransi setiap pelabur terhadap nisbah keuntungan dan kerugian adalah tidak simetris, dan kemampuan mereka untuk menanggung risiko juga berbeza. Bagi kebanyakan pedagang runcit, mereka lebih suka memilih kaedah perdagangan yang lebih konservatif, dan pasaran lebih mudah bergerak.
  3. Pembentukan harga ditentukan oleh transaksi, dan sebenarnya di sebalik transaksi itu adalah manusia yang mendorong, tetapi sifat manusia sukar diubah, yang menyebabkan bentuk tetap berulang, strategi yang berkesan dalam mempertimbangkan semula data sejarah, tetapi juga meramalkan masa depan mungkin dan akan berfungsi.

Selain itu, ciri perdagangan trend tracking adalah, kehilangan sedikit wang apabila tidak ada pasaran, dan membuat wang besar apabila pasaran datang, tetapi orang yang telah berdagang tahu bahawa pasaran adalah sebahagian besar masa kerana pasaran yang bergelora, dan hanya dalam masa yang singkat adalah pasaran trend. Oleh itu, strategi trend tracking mempunyai peluang kemenangan yang rendah dalam perdagangan, tetapi secara keseluruhan setiap perdagangan memperoleh keuntungan yang lebih besar.

Oleh kerana strategi mengikuti trend tidak stabil dalam pendapatan, banyak institusi pelaburan akan membina portfolio dengan pelbagai strategi yang berbeza, di mana terdapat beberapa strategi pembalikan. Strategi pembalikan adalah hubungan diri yang mempunyai faktor negatif dalam urutan masa harga, iaitu tinggi dan rendah.

CTA berkaitan dengan aset tradisional img

Kita lihat pada gambar di atas, secara teori, pelbagai gaya yang berbeza atau strategi yang kurang relevan, akan membuat isyarat dagangan yang berbeza pada masa yang sama ketika menghadapi pelbagai perubahan harga pasaran. Oleh kerana pelbagai kurva pendapatan saling bertindih, sehingga pendapatan keseluruhan membentuk pelengkap, kurva pendapatan menjadi lebih perlahan, yang mengurangkan turun naik pendapatan.

Dari sudut pandang di atas, bagaimana untuk mengawal strategi ini, daripada membangunkan satu strategi peringkat master, lebih baik daripada membangunkan banyak strategi kerang tengah? Di sini kita dapat mengambil contoh algoritma hutan rawak dalam pembelajaran mesin, bahawa hutan rawak bukan satu algoritma yang bebas, ia adalah rangka kerja keputusan yang mengandungi banyak pokok keputusan; setara dengan strategi induk pada strategi anak pokok keputusan; melalui strategi ibu dan kumpulan strategi anak kawalan.

Seterusnya, perlu merancang strategi induk yang boleh dilakukan dengan menilai kecairan, keuntungan dan kestabilan pelbagai varieti dalam pasaran niaga hadapan komoditi keseluruhan, menyaring gabungan varieti niaga hadapan komoditi yang mempunyai kadar turun naik yang rendah, menyaring secara netral industri, mengurangkan lagi turun naik keseluruhan melalui penyusunan sektor yang terpecah-pecah, dan akhirnya berdagang dengan membina pelbagai varieti niaga hadapan komoditi yang sebenar melalui pencocokan nilai pasaran.

Setiap varieti juga boleh dikonfigurasikan dengan pelbagai strategi parameter, yang boleh memilih kombinasi parameter yang berhampiran untuk melakukan pemantauan semula yang baik, apabila trend pasaran jelas, strategi parameter pelbagai biasanya akan bertindak selaras, sama seperti kenaikan harga; apabila pasaran berada dalam pasaran yang goyah, strategi parameter pelbagai biasanya akan bertindak tidak selaras, sehingga masing-masing melakukan lebih banyak atau tidak melakukan apa-apa untuk melindungi risiko, sama seperti penurunan harga; ini dapat mengurangkan lagi kadar pemantauan semula terbesar dalam portfolio, sementara mengekalkan pulangan keseluruhan yang tidak berubah.

2. Kesan CTA strategi niaga hadapan klasik

Newton pernah berkata: "Jika saya melihat lebih jauh daripada orang lain, itu kerana saya berdiri di atas bahu raksasa".

Strategi CTA yang didedahkan secara terbuka di pasaran mempunyai strategi selaras, strategi tali pinggang, ahli strategi pedagang pantai, strategi momentum, strategi strategi, dan sebagainya. Semua strategi perdagangan kuantitatif mempunyai ciri yang sama, iaitu mereka akan mati dengan mudah, dan strategi akan gagal dengan perlahan apabila mereka didedahkan. Tetapi ini tidak menghalang kita untuk mempelajari strategi ini, memanfaatkan esensi mereka, sehingga dapat melihat masalah di atas bahu raksasa.

2.1 Analisis asas niaga hadapan (Inventori, perbezaan asas, harga)

Analisis asas tidak memerlukan perhatian terhadap pergerakan harga jangka pendek, percaya bahawa nilai akhirnya akan tercermin dalam harga, lebih banyak menganalisis faktor-faktor yang mempengaruhi harga, menilai berapa banyak nilai varieti. Secara amnya menggunakan kaedah analisis bawah: dari faktor makro, faktor varieti dan faktor lain.

img

Jika kita lihat gambar di atas, terdapat banyak faktor yang mempengaruhi harga komoditi, dengan jumlah keseluruhan berjumlah puluhan item, dan beberapa puluh item yang lebih kecil, dan data ini sentiasa berubah.

Pada hakikatnya, analisis asas masa hadapan komoditi tidak menganalisis semua faktor, kita hanya perlu menangkap elemen teras analisis asas untuk mencari peraturan dari maklumat yang rumit dan rumit.

Faktor MakroMakroekonomi data rumit dan berubah-ubah, setiap hari setiap saat, terdapat banyak data ekonomi yang diterbitkan, di kalangan ahli politik, bank pusat, bank, rasmi dan tidak rasmi. Kecuali krisis politik dan ekonomi, analisis makro adalah bahan yang baik untuk berbual, tidak banyak kegunaan. Ahli pengurusan dana terkenal Amerika Syarikat, Peter Lynch pernah menyatakan: "Saya tidak menghabiskan lebih daripada 15 minit setahun untuk menganalisis keadaan ekonomi yang besar".

Faktor pelbagaiDalam analisis asas, analisis jenis terutamanya menganalisis kenaikan air, hubungan bekalan dan permintaan, inventori komoditi, keuntungan industri dan lain-lain.

Kawan-kawan yang membuat masa hadapan tahu bahawa masa hadapan komoditi domestik boleh dibahagikan secara mudah kepada: barangan perindustrian dan produk pertanian. Cara analisis barangan perindustrian dan produk pertanian adalah berbeza, kita menerangkan dari kedua-dua aspek bekalan dan permintaan, dalam barangan perindustrian bekalan adalah agak stabil, kecuali terdapat terobosan teknologi yang besar, jika tidak, kapasiti pengeluaran tidak mungkin mempunyai perubahan besar dalam masa yang singkat, jadi faktor yang mempengaruhi harga barangan perindustrian adalah permintaan. Dalam barangan perindustrian, permintaan adalah relatif stabil, dalam jangka panjang terdapat perubahan dalam permintaan untuk produk pertanian, tetapi dalam jangka pendek permintaan untuk produk pertanian cenderung stabil, jadi faktor yang mempengaruhi harga produk pertanian adalah bekalan.

Oleh itu, menurut undang-undang ekonomi, harga barangan akhirnya ditentukan oleh hubungan bekalan dan permintaan, secara teori, harga masa depan barangan dapat ditentukan dengan mendapatkan data bekalan dan permintaan. Untuk produk perindustrian, data bekalan lebih mudah diperoleh, tetapi data permintaan lebih sukar diperoleh, untuk produk pertanian, data permintaan lebih mudah diperoleh, tetapi data bekalan lebih sukar diperoleh.

Sebenarnya kita juga boleh melakukan pengurangan yang lebih lanjut, penawaran dan permintaan dalam pasaran ekonomi adalah stok, kita boleh menggunakan data inventori untuk menilai hubungan antara bekalan dan permintaan pasaran. Jika stok komoditi tinggi, menunjukkan bahawa kekuatan bekalan pasaran lebih besar daripada permintaan, dengan syarat keadaan luar tidak berubah, harga komoditi akan turun. Jika stok komoditi rendah, menunjukkan bahawa kekuatan permintaan pasaran lebih besar daripada bekalan, dengan syarat keadaan luar tidak berubah, harga komoditi akan naik.

Di samping menganalisis inventori komoditi, perbezaan harga antara pasaran hadapan dan pasaran hadapan juga perlu dianalisis, iaitu apa yang dipanggil margin. Jika harga hadapan lebih besar daripada harga hadapan, kita memanggilnya kenaikan harga hadapan; jika harga hadapan kurang daripada harga hadapan, kita memanggilnya pelepasan masa hadapan. Mengikut sistem penyerahan hadapan, pada tarikh penyerahan hadapan, harga hadapan harus sama dengan harga hadapan.

img

Sama ada naik atau turun, kerana kekangan dalam sistem penghantaran niaga hadapan, harga niaga hadapan pada tarikh penghantaran secara teori harus sama dengan harga masa kini. Dengan semakin dekatnya tarikh penghantaran, harga masa kini dan harga niaga hadapan akan hampir sepadan, satu adalah masa hadapan kembali ke masa kini, yang lain adalah masa hadapan kembali ke masa hadapan.

Berdasarkan prinsip di atas, kita boleh menggunakan stok dan margin untuk menilai harga hadapan. Jika stok komoditi yang lebih rendah, dan jika harga hadapan jauh lebih rendah daripada harga hadapan, maka kita boleh menilai: kekuatan permintaan pasaran hadapan lebih besar daripada kekuatan bekalan, dan harga hadapan akan meningkat dengan lebih besar kebarangkalian; dan juga kerana sistem penghantaran hadapan, harga hadapan akan diimbangi dengan tarikh penghantaran yang lebih dekat, dan sama dengan harga hadapan, harga hadapan akan meningkat dengan lebih besar kebarangkalian.

Akhirnya, kita menentukan arah kemungkinan besar harga masa depan melalui inventori dan margin, tetapi tidak ada titik jual yang lebih tepat, jadi analisis teknikal diperlukan untuk memberikan isyarat masuk keluar yang jelas. Struktur analisis asas keseluruhan adalah: stok rendah + air yang mendalam + analisis teknikal banyak isyarat = banyak; stok tinggi + kenaikan besar + analisis teknikal isyarat udara = kosong.

2.2 Peraturan Perdagangan Pantai

Mengenai strategi dagangan, kita terpaksa menyebut undang-undang dagangan pantai yang mewakili. Undang-undang dagangan pantai berasal dari satu eksperimen yang paling terkenal dalam sejarah dagangan, di mana spekulator komoditi Richard Dennis ingin mengetahui apakah pedagang hebat dilahirkan atau dibesarkan. Untuk itu, pada tahun 1983 dia merekrut 13 orang dan mengajar mereka konsep asas dagangan hadapan, serta kaedah dan prinsip dagangannya sendiri. Pelajar-pelajar ini dikenali sebagai pelabur pantai.

Dalam tempoh empat tahun berikutnya, mereka memperoleh purata pulangan tahunan sebanyak 80 peratus. Dennis juga membuktikan bahawa dengan satu sistem dan peraturan yang mudah, orang yang mempunyai sedikit atau tidak ada pengalaman perdagangan boleh menjadi pedagang yang baik. Tetapi terdapat beberapa pelaut yang menjual peraturan perdagangan pelau di laman web mereka.

Selepas kebenaran diketahui, orang mendapati bahawa undang-undang perdagangan ikan laut menggunakan saluran Dongjian yang dioptimumkan, dan menggunakan petunjuk ATR untuk pengurusan kedudukan. Mengikuti ujian sejarah selama beberapa dekad, ia menjadi kaedah perdagangan yang boleh menghasilkan wang dengan mudah untuk peruncit biasa dan masih berkesan pada beberapa jenis.

Prinsip Utama Pantai

  • Menguasai kelebihan: Cari strategi dagangan yang bernilai positif kerana ia akan menghasilkan pulangan yang positif dalam jangka masa panjang.
  • Mengurus risiko: Mengendalikan risiko, menjaga kedudukan, jika tidak, anda mungkin tidak dapat menunggu hari untuk menghasilkan hasil.
  • Bertegas: Hanya dengan teguh melaksanakan strategi anda, anda akan mendapat hasil sistem yang sebenar.
  • Ini adalah jelas: sistem yang mudah adalah lebih kuat daripada sistem yang rumit dalam jangka masa panjang.

Oleh itu, apa yang dikatakan oleh undang-undang perdagangan pantai? 1, Pasaran - apa yang dibeli dan dijual, pada dasarnya di mana pasaran yang diperdagangkan, pelaut adalah peniaga niaga hadapan, mereka hanya memilih pasaran yang mempunyai jumlah dagangan yang tinggi dan cair, kerana memilih pasaran yang tidak aktif untuk berdagang akan meningkatkan harga keluar masuk dan kehilangan banyak peluang trend. 2. saiz kedudukan - berapa banyak yang dibeli dan dijual adalah bahagian yang sangat penting dalam keseluruhan strategi, yang biasanya diabaikan atau disalahpahami oleh kebanyakan orang. Peraturan perdagangan pantai menggunakan ATR, iaitu indikator luas pergerakan sebenar purata, untuk mengira kedudukan terbuka, isyarat kenaikan, isyarat berhenti. Ini adalah reka bentuk yang sangat cerdik yang bertujuan untuk menyesuaikan saiz kedudukan melalui luas pergerakan mutlak pasaran, mengurangkan pegangan apabila pasaran tidak menentu, meningkatkan pegangan apabila pasaran tidak menentu. 3. Masuk pasaran - Masuk pasar yang menggunakan saluran Dongjian, apabila harga melangkau harga tertinggi 20 atau 55 garis K, maka masuk lebih banyak, apabila harga jatuh di bawah harga terendah 20 atau 55 garis K, maka masuk kosong. Apabila isyarat muncul, masuk perdagangan, tidak sama jika menutup atau menurunkan garis K. 4. Hentikan kerugian -- Perdagangan yang tidak berhenti kerugian tidak akan berjaya dalam jangka masa panjang, tetapi kebanyakan peniaga memegang kedudukan kerugian, cuba untuk berharap pasaran akan berbalik. Pantai menetapkan secara ketat bila untuk keluar dari kedudukan kerugian, jika memegang banyak pesanan, dan harga jatuh 2 unit, banyak kepala akan merosakkan perpecahan. Jika memegang pesanan kosong, dan harga naik 2 unit, kepala kosong akan menghentikan perpecahan kerugian. 5. Hentikan kenaikan -- Hentikan kenaikan paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras paras

Dari sini kita dapat melihat bahawa undang-undang perdagangan pantai walaupun nampaknya sangat mudah, tetapi sebenarnya ia telah membentuk sistem perdagangan yang cacat dalam erti kata yang sebenarnya, yang merangkumi semua aspek sistem perdagangan yang lengkap, tanpa meninggalkan ruang untuk membuat keputusan yang dibayangkan secara subjektif kepada peniaga, yang membolehkan kelebihan operasi sistem yang disusun dilakukan.

Kelebihan terbesar perdagangan pantai adalah membantu kita membina satu kaedah perdagangan yang berkesan, ia adalah satu gabungan pembinaan kumpulan, stop loss, dan strategi untuk mengikuti trend pasaran, terutamanya penggunaan nilai ATR dan pengurusan kedudukan. Sudah tentu ia juga mempunyai satu masalah yang sama dengan strategi pengesanan trend, iaitu mendengkur kembali.

3. Strategi CTA untuk membangunkan masa hadapan dalam pertempuran sebenar

3.1 Pembangunan strategi trend CTA berasaskan bahasa Melayu

Pada akhir abad yang lalu, satu kaedah dagangan yang sangat ajaib mula popular di bidang pelaburan kewangan di Amerika Syarikat, dan selepas ribuan orang mempraktikkannya, kaedah ini didapati berkesan dan mempunyai nilai praktikal yang besar, dan diiktiraf oleh banyak pakar pelaburan dan peniaga profesional, sehingga kini dapat digunakan dengan sempurna dalam hampir semua bidang pelaburan kewangan, sama ada mata wang asing, emas, saham, niaga hadapan, minyak mentah, indeks dan bon, ini adalah kaedah operasi huru-hara.

Istilah huru-hara pada asalnya merujuk kepada gambaran keadaan huru-hara di alam semesta, dengan idea: hasilnya adalah pasti, tetapi kerana pengetahuan yang ada tidak dapat mengira hasilnya, kerana pengiraan itu sendiri juga mengubah hasilnya, akhirnya mungkin terdapat hasil terbesar atau terkecil, tetapi tidak ada hasil yang pasti. Ini sangat serupa dengan pasaran dagangan, peserta menganalisis pasaran dan membeli dan menjual perdagangan yang juga mengubah pasaran. Pasaran mempunyai variasi kekal, apabila peserta mengetahui bentuk baru pasaran, pasaran juga mengetahui bahawa ia berlaku seperti yang diketahui oleh peserta, jadi ia berubah. Dan ia pasti cenderung untuk berubah ke arah yang tidak diketahui oleh peserta, ia mempunyai kecerdasan yang cukup untuk mencegah peserta menangkap undang-undang perubahannya, iaitu, pasaran tidak stabil, pemahaman pasaran tidak mewakili masa depan.

Kaos Operasi, adalah satu set yang lengkap idea pelaburan, strategi dagangan dan masuk keluar isyarat, yang dicipta oleh Bill Williams. Pada masa ini terdapat banyak pelabur di peringkat antarabangsa menggunakan Kaos Operasi untuk terlibat dalam dagangan pasaran, kerana perkembangan pasaran kewangan di Malaysia lambat, dan Kaos Teori juga merupakan idea yang agak baru, jadi terdapat sedikit orang yang mengkaji Kaos Operasi di dalam negara.

Seperti namanya, asas teori operasi huru-hara adalah teori huru-hara, yang dikemukakan oleh ahli meteorologi Edward Lorenz dan merupakan salah satu penemuan saintifik terbesar pada akhir abad ke-20; dia yang mengemukakan keropok efek kupu-kupu yang terkenal. Bill Williams secara kreatif menggunakan teori huru-hara dalam bidang pelaburan kewangan, dan menggabungkan disiplin seperti geometri pecahan, dinamika bukan linear, untuk mewujudkan satu siri penunjuk analisis teknikal yang sangat berkesan.

Keseluruhan operasi huru-hara terdiri daripada lima dimensi besar (penunjuk teknologi):

  • Tali ikan hiu (Alligator)

  • The Fractal

  • The Momentum

  • Kelajuan

  • The Balance Line (Garis Keseimbangan)

    img

Kita lihat gambar di atas, garis ikan hiu adalah satu set garis keseimbangan menggunakan geometri pemisahan dan dinamika bukan linear, yang pada dasarnya adalah garis purata bergerak dengan indeks pengembang, yang merupakan jenis garis rata, tetapi kaedah pengiraan agak rumit daripada garis rata biasa. Kemudian mari kita lihat bagaimana untuk menentukan garis ikan hiu dalam bahasa Melayu:

// 参数
N1:=11;
N2:=21;

// 定义价格中线
N3:=N1+N2;
N4:=N2+N3;
HL:=(H+L)/2;

// 鳄鱼线
Y^^SMA(REF(HL,N3),N4,1);
R:=SMA(REF(HL,N2),N3,1);
G:=SMA(REF(HL,N1),N2,1);

Pertama kita tentukan 2 parameter luar N1 dan N2, kemudian kiralah purata HL bagi harga tertinggi dan harga terendah berdasarkan parameter luar, kemudian kiralah purata HL dengan parameter yang berbeza, untuk ciuman bibir adalah purata kecil untuk garis tengah sekali lagi, gigi adalah purata tengah untuk garis tengah sekali lagi, pinggul adalah purata besar untuk garis tengah sekali lagi. Dalam strategi ini, kita menggunakan pinggul.

Dalam operasi huru-hara, satu konsep pemisahan yang sangat jelas didefinisikan, kita boleh membuat perumpamaan: membuka telapak tangan, jari-jari ke atas, jari tengah adalah pemisahan atas, jari kecil di sebelah kiri dan jari tanpa nama, jari tengah dan jari tengah di sebelah kanan mewakili garis K yang tidak berinovasi tinggi; pemisahan asas terdiri daripada 5 garis K ini; maka pemisahan boleh didefinisikan dengan kod berikut:

// 分形
TOP_N:=BARSLAST(REF(H,2)=HHV(H,5))+2;
BOTTOM_N:=BARSLAST(REF(L,2)=LLV(L,5))+2;

TOP:=REF(H,TOP_N);
BOTTOM:=REF(L,BOTTOM_N);

MAX_YRG^^MAX(MAX(Y,R),G); 
MIN_YRG^^MIN(MIN(Y,R),G); 

TOP_FRACTAL^^VALUEWHEN(H>=MAX_YRG,TOP);
BOTTOM_FRACTAL^^VALUEWHEN(L<=MIN_YRG,BOTTOM);

Dengan mengira garisan ikan hiu dan pecahan, kita boleh menulis strategi operasi huru-hara yang mudah berdasarkan kedua-dua syarat ini, dengan menggunakan satu set indeks dengan berat purata bergerak sebagai harga rujukan untuk mengira garisan ikan hiu dan pecahan. Sudah tentu strategi operasi huru-hara versi asal akan menjadi lebih rumit. Kod adalah sebagai berikut:

// 如果当前无多单,并且收盘价升破上分形,并且上分形在鳄鱼线上方时,多头开仓
BKVOL=0 AND C>=TOP_FRACTAL AND TOP_FRACTAL>MAX_YRG,BPK(1);
// 如果当前无空单,并且收盘价跌破下分形,并且下分形在鳄鱼线下方时,空头开仓
SKVOL=0 AND C<=BOTTOM_FRACTAL AND BOTTOM_FRACTAL<MIN_YRG,SPK(1);

// 如果收盘价跌破鳄鱼的下巴时,多头平仓
C<Y,SP(BKVOL);
// 如果收盘价升破鳄鱼的下巴时,空头平仓
C>Y,BP(SKVOL);

Untuk memudahkan anda memahami, saya telah menulis catatan terperinci secara langsung ke dalam kod, dan kita boleh meringkaskan logik perdagangan strategi ini kepada beberapa perkara berikut:

  • Pelbagai perdagangan terbuka: Jika tiada banyak pesanan pada masa ini, dan harga penutupan meningkat dengan memecahkan pecahan atas, dan pecahan atas berada di atas garisan ikan hiu.
  • Perdagangan kosong: Jika tiada pesanan kosong pada masa ini, dan harga penutupan jatuh ke bawah pecahan, dan pecahan bawah berada di bawah garis ikan hiu.
  • Di samping itu, ia juga boleh menyebabkan masalah yang sama.
  • Pelancongan kosong: Jika harga penutupan naik, bibir ikan hiu akan pecah.

Seterusnya, mari kita lihat apa sebenarnya hasil daripada strategi retrospeksi operasi huru-hara yang mudah ini. Untuk membuat retrospeksi lebih dekat dengan persekitaran sebenar, di sini, seting bayaran prosedur adalah dua kali ganda daripada bursa, pembukaan dan penempatan lebih 2 lompatan setiap slider. Jenis data retrospeksi adalah Indeks keluli skru, jenis dagangan adalah keluli skru utama berterusan, pembukaan 1 tangan tetap. Di bawah ini adalah laporan prestasi retrospeksi awal pada tahap 1 jam.

img img img

Dari segi grafik dana dan rekod prestasi, strategi ini menunjukkan prestasi yang baik, dan grafik dana keseluruhan adalah stabil ke atas. Tetapi jenis keluli berbintik-bintik telah berubah sejak akhir tahun 2016, dengan perubahan ciri pasaran dari pergerakan serentak tinggi sebelumnya ke pergerakan goyah yang luas. Dari segi grafik dana, keuntungan yang jelas lemah sejak tahun 2017.

Kesimpulannya, kaedah operasi huru-hara adalah untuk mencari titik balik, tanpa perlu bimbang bagaimana pasaran berjalan, tidak perlu bimbang tentang terobosan palsu, dan jika terobosan pecah, masuk langsung. Jangan pernah cuba meramalkan pasaran, tetapi menjadi pengamat dan pengikut.

3.2 Pembangunan strategi CTA berdasarkan bahasa JavaScript

Soros pernah mengemukakan satu proposisi penting dalam bukunya, The Alchemist's Almanac of Currency, yang ditulis pada tahun 1987: Saya percaya harga pasaran selalu salah dalam pengertian mereka yang berat sebelah terhadap masa depan. Beliau berpendapat bahawa hipotesis pasaran yang berkesan hanyalah hipotesis teori, bahawa sebenarnya peserta pasaran tidak selalu rasional, dan pada setiap titik masa, peserta tidak dapat memperoleh dan mentafsirkan semua maklumat secara objektif, dan bahawa walaupun ia adalah maklumat yang sama, maklum balas semua orang tidak sama.

Berdasarkan prinsip di atas, kita juga tahu bahawa dalam pasaran niaga hadapan yang tidak berkesan, kontrak peratusan pertukaran yang berbeza tidak selalu disinkronkan oleh pengaruh pasaran, dan penentuan harganya juga tidak sepenuhnya berkesan. Oleh itu, berdasarkan harga kontrak peratusan pertukaran yang berbeza pada satu tanda dagangan, jika dua harga muncul margin harga yang lebih besar, kontrak niaga hadapan yang berbeza pada masa yang sama boleh dibeli dan dijual, dengan peruntukan jangka panjang.

Seperti masa hadapan komoditi, mata wang digital juga mempunyai gabungan kontrak jangka panjang yang berkaitan; seperti di bursa OkEX: ETC minggu itu, ETC minggu depan, ETC suku; sebagai contoh, anda boleh menjual ETC minggu itu, membeli ETC suku, dan menghapuskan perbezaan ini. Jika perbezaan harga hari tertentu mencapai 7, kita boleh menjangkakan bahawa perbezaan harga akan kembali ke 5 pada masa akan datang.

Walaupun perbezaan harga ini wujud, pemprosesan buatan memakan masa, ketidaktepatan dan kesan perubahan harga, dan pilihan buatan sering mempunyai banyak ketidakpastian. Dengan menggunakan model kuantitatif untuk menangkap peluang pilihan dan membuat strategi perdagangan pilihan, dan algoritma terprogram untuk menghantar pesanan perdagangan secara automatik ke bursa, peluang yang tepat akan ditangkap dengan cepat, dan keuntungan yang stabil dan cekap. Itulah daya tarikan pilihan pilihan kuantitatif.

Kursus ini akan mengajar anda bagaimana untuk menggunakan platform dagangan kuantitatif pencipta dan kontrak niaga hadapan ETC di bursa OkEX dalam perdagangan mata wang digital, dengan strategi pilihan yang mudah, untuk menunjukkan jika anda menangkap peluang pilihan sesaat, ambil keuntungan yang dapat dilihat setiap kali, sambil melindungi risiko yang mungkin berlaku.

Mencipta strategi jangka panjang untuk mata wang digitalKesukaran: Tingkat sederhanaKawasan Strategik

  • Tanda dagangan: ETH klasik (ETC)
  • Data perbezaan harga: ETC mingguan - ETC suku (diecualikan pemeriksaan integriti)
  • Siklus urus niaga: 5 minit
  • 头寸匹配:1:1
  • Jenis urus niaga: berlainan jenis

Logik Strategi

  • Syarat pembukaan perbelanjaan yang berlebihan: Jika akaun semasa tidak memegang saham dan harga kurang daripada boll, anda akan melakukan perbelanjaan berlebihan.
  • Syarat bukaan harga yang berbeza: Jika akaun semasa tidak memegang saham, dan harga yang berbeza lebih besar daripada boll naik, bukaan harga yang berbeza; iaitu: jual ETC pada minggu itu, beli ETC pada suku.
  • Syarat untuk melakukan penempatan harga yang lebih tinggi: Jika akaun semasa memegang ETC lebih banyak mingguan, dan memegang ETC kosong suku, dan harga lebih besar daripada boll di tengah-tengah trek, harga yang lebih tinggi adalah penempatan harga yang lebih tinggi; iaitu: menjual ETC mingguan, membeli ETC suku.
  • Syarat untuk melakukan perpaduan harga kosong: Jika akaun semasa memegang ETC pada minggu yang sama, dan memegang lebih banyak pesanan ETC untuk suku, dan harga yang berbeza kurang daripada boll di tengah-tengah, harga kosong akan berlaku; iaitu: beli ETC pada minggu yang sama, jual ETC pada suku.

Di atas adalah penerangan logik yang mudah mengenai strategi CFD mata wang digital, jadi bagaimana untuk mewujudkan idea anda dalam program? Kami cuba membina kerangka kerja sebelum pencipta mengukur platform dagangan.

function Data() {}  // 基础数据函数
Data.prototype.mp = function () {}  // 持仓函数
Data.prototype.boll = function () {}  // 指标函数
Data.prototype.trade = function () {}  // 下单函数
Data.prototype.cancelOrders = function () {}  // 撤单函数
Data.prototype.isEven = function () {}  // 处理单只合约函数
Data.prototype.drawingChart = function () {}  // 画图函数

function onTick() {
    var data = new Data(tradeTypeA, tradeTypeB);  // 创建一个基础数据对象
    var accountStocks = data.accountData.Stocks;  // 账户余额
    var boll = data.boll(dataLength, timeCycle);  // 计算boll技术指标
    data.trade();  // 计算交易条件下单
    data.cancelOrders();  // 撤单
    data.drawingChart(boll);  // 画图
    data.isEven();  // 处理持有单个合约
}

//入口函数
function main() {
    while (true) {  // 进入轮询模式
        onTick();  // 执行onTick函数
        Sleep(500);  // 休眠0.5秒
    }
}

Bayangkan bagaimana proses urus niaga kita dalam urus niaga yang bertanggungjawab? Dalam urus niaga sistem tidak ada perbezaan yang penting, hanya: mendapatkan data, mengira data, membuat urus niaga, memproses selepas membuat pesanan. Begitu juga dalam program, pertama-tama program akan menjalankan fungsi utama baris ke-20, yang merupakan peraturan konvensional, apabila program menjalankan strategi urus niaga, pemprosesan seterusnya (jika ada) akan memasuki mod gelung tanpa had, iaitu mod pusingan, dalam mod pusingan, akan melaksanakan fungsi onTick berulang-ulang.

Jadi dalam fungsi onTick, ini adalah proses dagangan yang kita lakukan dalam dagangan subjektif: mula-mula mendapatkan data harga asas, kemudian mendapatkan baki akaun, kemudian mengira penunjuk, kemudian mula mengira syarat dagangan dan membuat pesanan, dan akhirnya memproses selepas membuat pesanan, termasuk: pengeluaran pesanan, gambar, memproses kontrak individu.

Rangka kerja strategik boleh dibuat dengan mudah dengan memandangkan idea strategi dan proses dagangan. Seluruh strategi boleh disederhanakan kepada tiga langkah:

  • Pengesahan pra-transaksi.
  • Mengambil dan mengira data.
  • Di bawah ini adalah senarai dan proses seterusnya.

Apabila rangka kerja strategi dagangan telah dibina, kod butiran yang diperlukan perlu diisi dalam rangka kerja strategi berdasarkan proses dagangan sebenar dan butiran dagangan.

1. Pengesahan Pra-Perdagangan

1. Mengisytiharkan pembolehubah global yang diperlukan

  • Mengisytiharkan objek chart untuk grafik konfigurasivar chart = {}
  • Panggilan fungsi Chart, initialize chartvar ObjChart = Chart ( chart )
  • Mengisytiharkan satu barisan kosong untuk menyimpan siri perbezaan hargavar bars = []
  • Mengisytiharkan pembolehubah timestamp untuk rekod data sejarahvar oldTime = 0

2. Parameter luaran untuk menetapkan dasar

var tradeTypeA = "this_week"; // 套利A合约
var tradeTypeB = "quarter"; // 套利B合约
var dataLength = 10; //指标周期长度
var timeCycle = 1; // K线周期
var name = "ETC"; // 币种
var unit = 1; // 下单量

3. Menentukan fungsi pemprosesan data

  • Fungsi data asas: Data () Buat fungsi pembina Data dan tentukan sifat-sifatnya. Ia termasuk: data akaun, data simpanan, data garis K, harga jual/beli kontrak A/B, perbezaan harga positif/berlawanan.
function Data(tradeTypeA, tradeTypeB) { // 传入套利A合约和套利B合约
    this.accountData = _C(exchange.GetAccount); // 获取账户信息
    this.positionData = _C(exchange.GetPosition); // 获取持仓信息
    var recordsData = _C(exchange.GetRecords); //获取K线数据
    exchange.SetContractType(tradeTypeA); // 订阅套利A合约
    var depthDataA = _C(exchange.GetDepth); // 套利A合约深度数据
    exchange.SetContractType(tradeTypeB); // 订阅套利B合约
    var depthDataB = _C(exchange.GetDepth); // 套利B合约深度数据
    this.time = recordsData[recordsData.length - 1].Time; // 获取最新数据时间
    this.askA = depthDataA.Asks[0].Price; // 套利A合约卖一价
    this.bidA = depthDataA.Bids[0].Price; // 套利A合约买一价
    this.askB = depthDataB.Asks[0].Price; // 套利B合约卖一价
    this.bidB = depthDataB.Bids[0].Price; // 套利B合约买一价
    // 正套价差(合约A卖一价 - 合约B买一价)
    this.basb = depthDataA.Asks[0].Price - depthDataB.Bids[0].Price;
    // 反套价差(合约A买一价 - 合约B卖一价)
    this.sabb = depthDataA.Bids[0].Price - depthDataB.Asks[0].Price;
}
  • Dapatkan fungsi pemegang:mp () Melalui seluruh susunan pegangan, kembali jumlah pegangan untuk kontrak tertentu, arah tertentu, jika tidak, kembali false
Data.prototype.mp = function (tradeType, type) {
    var positionData = this.positionData; // 获取持仓信息
    for (var i = 0; i < positionData.length; i++) {
        if (positionData[i].ContractType == tradeType) {
            if (positionData[i].Type == type) {
                if (positionData[i].Amount > 0) {
                    return positionData[i].Amount;
                }
            }
        }
    }
    return false;
}
  • Garis K dan fungsi penunjuk:boll () Mengikut data perbezaan harga positif / kontra, siri K baris baru disusun; dan mengembalikan data uptrend, midtrend, downtrend yang dikira oleh penunjukboll.
Data.prototype.boll = function (num, timeCycle) {
    var self = {}; // 临时对象
    // 正套价差和反套价差中间值
    self.Close = (this.basb + this.sabb) / 2;
    if (this.timeA == this.timeB) {
        self.Time = this.time;
    } // 对比两个深度数据时间戳
    if (this.time - oldTime > timeCycle * 60000) {
        bars.push(self);
        oldTime = this.time;
    } // 根据指定时间周期,在K线数组里面传入价差数据对象
    if (bars.length > num * 2) {
        bars.shift(); // 控制K线数组长度
    } else {
        return;
    }
    var boll = TA.BOLL(bars, num, 2); // 调用talib库中的boll指标
    return {
        up: boll[0][boll[0].length - 1], // boll指标上轨
        middle: boll[1][boll[1].length - 1], // boll指标中轨
        down: boll[2][boll[2].length - 1] // boll指标下轨
    } // 返回一个处理好的boll指标数据
}
  • Fungsi di bawah:trade () Menghantar nama kontrak order dan jenis order, kemudian order dengan harga yang sama, dan mengembalikan hasil order. Oleh kerana memerlukan dua order yang berbeza pada masa yang sama, harga beli / jual diubah mengikut nama kontrak order dalam fungsi.
Data.prototype.trade = function (tradeType, type) {
    exchange.SetContractType(tradeType); // 下单前先重新订阅合约
    var askPrice, bidPrice;
    if (tradeType == tradeTypeA) { // 如果是A合约下单
        askPrice = this.askA; // 设置askPrice
        bidPrice = this.bidA; // 设置bidPrice
    } else if (tradeType == tradeTypeB) { // 如果是B合约下单
        askPrice = this.askB; // 设置askPrice
        bidPrice = this.bidB; // 设置bidPrice
    }
    switch (type) { // 匹配下单模式
        case "buy":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Buy(askPrice, unit);
        case "sell":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Sell(bidPrice, unit);
        case "closebuy":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Sell(bidPrice, unit);
        case "closesell":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Buy(askPrice, unit);
        default:
            return false;
    }
}
  • Fungsi membatalkan pesanan:cancelOrders () Mendapatkan semua susunan pesanan yang belum selesai dan membatalkannya secara individu. Dan kembali false jika ada pesanan yang belum selesai, dan kembali benar jika tidak ada pesanan yang belum selesai.
Data.prototype.cancelOrders = function () {
    Sleep(500); // 撤单前先延时,因为有些交易所你懂的
    var orders = _C(exchange.GetOrders); // 获取未成交订单数组
    if (orders.length > 0) { // 如果有未成交的订单
        for (var i = 0; i < orders.length; i++) { //遍历未成交订单数组
            exchange.CancelOrder(orders[i].Id); //逐个取消未成交的订单
            Sleep(500); //延时0.5秒
        }
        return false; // 如果取消了未成交的单子就返回false
    }
    return true; //如果没有未成交的订单就返回true
}
  • Mengurus memegang kontrak tunggal: isEven ()) Dalam proses urus niaga, berlaku keadaan satu kaki, di mana semua kedudukan boleh ditangani dengan mudah.
Data.prototype.isEven = function () {
    var positionData = this.positionData; // 获取持仓信息
    var type = null; // 转换持仓方向
    // 如果持仓数组长度余2不等于0或者持仓数组长度不等于2
    if (positionData.length % 2 != 0 || positionData.length != 2) {
        for (var i = 0; i < positionData.length; i++) { // 遍历持仓数组
            if (positionData[i].Type == 0) { // 如果是多单
                type = 10; // 设置下单参数
            } else if (positionData[i].Type == 1) { // 如果是空单
                type = -10; // 设置下单参数
            }
            // 平掉所有仓位
            this.trade(positionData[i].ContractType, type, positionData[i].Amount);
        }
    }
}
  • Fungsi gambar:drawingChart ()) Menggunakan kaedah ObjChart.add () untuk melukis data pasaran dan data penunjuk yang diperlukan dalam carta: naik, tengah, turun, perbezaan harga positif / kontra.
Data.prototype.drawingChart = function (boll) {
    var nowTime = new Date().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(chart);
}

4. Dalam fungsi input main (), pelaksanaan kod praprosesan urus niaga yang hanya dijalankan sekali selepas program dimulakan; termasuk:

  • Tidak ada maklumat penting dalam panel penapis.SetErrorFilter ( )
  • Setup mata wang digital untuk ditukarexchange.IO ( )
  • Rajah yang digambar sebelum program dimulakanObjChart.reset ( )
  • Maklumat bar status sebelum program dimulakanLogProfitReset ( )

Setelah menentukan praproses transaksi di atas, langkah seterusnya adalah masuk ke mod rundingan, menjalankan fungsi onTick () berulang; dan menetapkan masa tidur semasa rundingan Sleep (), kerana API beberapa pertukaran mata wang digital mempunyai had masuk dalam jumlah lawatan dalam masa tertentu.

function main() {
    // 过滤控制台中不是很重要的信息
    SetErrorFilter("429|GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout|Futures_OP");
    exchange.IO("currency", name + '_USDT'); //设置要交易的数字货币币种
    ObjChart.reset(); //程序启动前清空之前绘制的图表
    LogProfitReset(); //程序启动前清空之前的状态栏信息
    while (true) { // 进入轮询模式
        onTick(); // 执行onTick函数
        Sleep(500); // 休眠0.5秒
    }
}

Kedua, mendapatkan dan mengira data

  1. Mengambil objek data asas, baki akaun, dan data penunjukboll untuk penggunaan logik dagangan.
function onTick() {
    var data = new Data(tradeTypeA, tradeTypeB); // 创建一个基础数据对象
    var accountStocks = data.accountData.Stocks; // 账户余额
    var boll = data.boll(dataLength, timeCycle); // 获取boll指标数据
    if (!boll) return; // 如果没有boll数据就返回
}

Ketiga, permohonan dan proses susulan

  1. Mengikut logik strategi di atas, menjalankan operasi jual beli. Pertama, menilai sama ada harga dan syarat penunjuk berlaku, kemudian menilai sama ada syarat pegangan berlaku, dan akhirnya menjalankan fungsi pesanan bawah trade ().
// 价差说明
// basb = (合约A卖一价 - 合约B买一价)
// sabb = (合约A买一价 - 合约B卖一价)
if (data.sabb > boll.middle && data.sabb < boll.up) { // 如果sabb高于中轨
    if (data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单
        data.trade(tradeTypeA, "closebuy"); // 合约A平多
    }
    if (data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单
        data.trade(tradeTypeB, "closesell"); // 合约B平空
    }
} else if (data.basb < boll.middle && data.basb > boll.down) { // 如果basb低于中轨
    if (data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单
        data.trade(tradeTypeA, "closesell"); // 合约A平空
    }
    if (data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单
        data.trade(tradeTypeB, "closebuy"); // 合约B平多
    }
}
if (accountStocks * Math.max(data.askA, data.askB) > 1) { // 如果账户有余额
    if (data.basb < boll.down) { // 如果basb价差低于下轨
        if (!data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单
            data.trade(tradeTypeA, "buy"); // 合约A开多
        }
        if (!data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单
            data.trade(tradeTypeB, "sell"); // 合约B开空
        }
    } else if (data.sabb > boll.up) { // 如果sabb价差高于上轨
        if (!data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单
            data.trade(tradeTypeA, "sell"); // 合约A开空
        }
        if (!data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单
            data.trade(tradeTypeB, "buy"); // 合约B开多
        }
    }
}
  1. Apabila pesanan selesai, keadaan tidak normal seperti pesanan yang belum diselesaikan, memegang kontrak tunggal, dan lukisan carta perlu ditangani.
data.cancelOrders(); // 撤单
data.drawingChart(boll); // 画图
data.isEven(); // 处理持有单个合约

Di atas, kami telah membuat strategi CFD mata wang digital yang mudah dan lengkap dengan lebih daripada 200 baris.

// 全局变量
// 声明一个配置图表的 chart 对象
var chart = {
    __isStock: true,
    tooltip: {
        xDateFormat: '%Y-%m-%d %H:%M:%S, %A'
    },
    title: {
        text: '交易盈亏曲线图(详细)'
    },
    rangeSelector: {
        buttons: [{
            type: 'hour',
            count: 1,
            text: '1h'
        }, {
            type: 'hour',
            count: 2,
            text: '3h'
        }, {
            type: 'hour',
            count: 8,
            text: '8h'
        }, {
            type: 'all',
            text: 'All'
        }],
        selected: 0,
        inputEnabled: false
    },
    xAxis: {
        type: 'datetime'
    },
    yAxis: {
        title: {
            text: '价差'
        },
        opposite: false,
    },
    series: [{
        name: "上轨",
        id: "线1,up",
        data: []
    }, {
        name: "中轨",
        id: "线2,middle",
        data: []
    }, {
        name: "下轨",
        id: "线3,down",
        data: []
    }, {
        name: "basb",
        id: "线4,basb",
        data: []
    }, {
        name: "sabb",
        id: "线5,sabb",
        data: []
    }]
};
var ObjChart = Chart(chart); // 画图对象
var bars = []; // 存储价差序列
var oldTime = 0; // 记录历史数据时间戳

// 参数
var tradeTypeA = "this_week"; // 套利A合约
var tradeTypeB = "quarter"; // 套利B合约
var dataLength = 10; //指标周期长度
var timeCycle = 1; // K线周期
var name = "ETC"; // 币种
var unit = 1; // 下单量

// 基础数据
function Data(tradeTypeA, tradeTypeB) { // 传入套利A合约和套利B合约
    this.accountData = _C(exchange.GetAccount); // 获取账户信息
    this.positionData = _C(exchange.GetPosition); // 获取持仓信息
    var recordsData = _C(exchange.GetRecords); //获取K线数据
    exchange.SetContractType(tradeTypeA); // 订阅套利A合约
    var depthDataA = _C(exchange.GetDepth); // 套利A合约深度数据
    exchange.SetContractType(tradeTypeB); // 订阅套利B合约
    var depthDataB = _C(exchange.GetDepth); // 套利B合约深度数据
    this.time = recordsData[recordsData.length - 1].Time; // 获取最新数据时间
    this.askA = depthDataA.Asks[0].Price; // 套利A合约卖一价
    this.bidA = depthDataA.Bids[0].Price; // 套利A合约买一价
    this.askB = depthDataB.Asks[0].Price; // 套利B合约卖一价
    this.bidB = depthDataB.Bids[0].Price; // 套利B合约买一价
    // 正套价差(合约A卖一价 - 合约B买一价)
    this.basb = depthDataA.Asks[0].Price - depthDataB.Bids[0].Price;
    // 反套价差(合约A买一价 - 合约B卖一价)
    this.sabb = depthDataA.Bids[0].Price - depthDataB.Asks[0].Price;
}

// 获取持仓
Data.prototype.mp = function (tradeType, type) {
    var positionData = this.positionData; // 获取持仓信息
    for (var i = 0; i < positionData.length; i++) {
        if (positionData[i].ContractType == tradeType) {
            if (positionData[i].Type == type) {
                if (positionData[i].Amount > 0) {
                    return positionData[i].Amount;
                }
            }
        }
    }
    return false;
}

// 合成新K线数据和boll指标数据
Data.prototype.boll = function (num, timeCycle) {
    var self = {}; // 临时对象
    // 正套价差和反套价差中间值
    self.Close = (this.basb + this.sabb) / 2;
    if (this.timeA == this.timeB) {
        self.Time = this.time;
    } // 对比两个深度数据时间戳
    if (this.time - oldTime > timeCycle * 60000) {
        bars.push(self);
        oldTime = this.time;
    } // 根据指定时间周期,在K线数组里面传入价差数据对象
    if (bars.length > num * 2) {
        bars.shift(); // 控制K线数组长度
    } else {
        return;
    }
    var boll = TA.BOLL(bars, num, 2); // 调用talib库中的boll指标
    return {
        up: boll[0][boll[0].length - 1], // boll指标上轨
        middle: boll[1][boll[1].length - 1], // boll指标中轨
        down: boll[2][boll[2].length - 1] // boll指标下轨
    } // 返回一个处理好的boll指标数据
}

// 下单
Data.prototype.trade = function (tradeType, type) {
    exchange.SetContractType(tradeType); // 下单前先重新订阅合约
    var askPrice, bidPrice;
    if (tradeType == tradeTypeA) { // 如果是A合约下单
        askPrice = this.askA; // 设置askPrice
        bidPrice = this.bidA; // 设置bidPrice
    } else if (tradeType == tradeTypeB) { // 如果是B合约下单
        askPrice = this.askB; // 设置askPrice
        bidPrice = this.bidB; // 设置bidPrice
    }
    switch (type) { // 匹配下单模式
        case "buy":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Buy(askPrice, unit);
        case "sell":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Sell(bidPrice, unit);
        case "closebuy":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Sell(bidPrice, unit);
        case "closesell":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Buy(askPrice, unit);
        default:
            return false;
    }
}

// 取消订单
Data.prototype.cancelOrders = function () {
    Sleep(500); // 撤单前先延时,因为有些交易所你懂的
    var orders = _C(exchange.GetOrders); // 获取未成交订单数组
    if (orders.length > 0) { // 如果有未成交的订单
        for (var i = 0; i < orders.length; i++) { //遍历未成交订单数组
            exchange.CancelOrder(orders[i].Id); //逐个取消未成交的订单
            Sleep(500); //延时0.5秒
        }
        return false; // 如果取消了未成交的单子就返回false
    }
    return true; //如果没有未成交的订单就返回true
}

// 处理持有单个合约
Data.prototype.isEven = function () {
    var positionData = this.positionData; // 获取持仓信息
    var type = null; // 转换持仓方向
    // 如果持仓数组长度余2不等于0或者持仓数组长度不等于2
    if (positionData.length % 2 != 0 || positionData.length != 2) {
        for (var i = 0; i < positionData.length; i++) { // 遍历持仓数

Berkaitan

Lebih lanjut

dianwan99Belajar untuk belajar

DadyBelajar

xunfeng91Belajar