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

Penulis: , Dibuat: 2019-06-26 10:27:41, Diperbarui: 2023-10-30 20:30:50

[TOC]

img

Pengantar

Mengapa harus belajar pelajaran ini?Apa manfaatnya untuk belajar ini? Pertama, kursus ini didasarkan pada bahasa pemrograman JavaScript dan Python, bahasa hanya teknologi, dan akhirnya kita harus menerapkan teknologi ini ke industri. Quantitative trading adalah industri yang baru muncul, saat ini sedang dalam tahap pertumbuhan yang cepat, dan permintaan untuk bakat sangat besar.

Pelajaran sistematis melalui kursus ini dapat membantu Anda untuk memiliki pemahaman yang lebih dalam tentang bidang perdagangan kuantitatif, jika Anda siap untuk melangkah ke bidang perdagangan kuantitatif, jika Anda adalah seorang investor saham atau masa depan, maka perdagangan kuantitatif dapat sepenuhnya membantu perdagangan utama Anda, dengan mengembangkan strategi perdagangan yang dapat menghasilkan keuntungan di pasar keuangan, juga memperluas saluran dan platform keuangan investasi Anda sendiri.

Sebelumnya, saya akan menceritakan pengalaman pribadi saya, saya bukan seorang profesional keuangan, saya adalah seorang ahli statistik. Saya pertama kali melakukan perdagangan saham secara subjektif sejak masa kuliah, dan kemudian kebetulan menjadi praktisi perdagangan kuantitatif untuk dana swasta domestik, terutama melakukan penelitian dan pengembangan strategi.

Dalam lingkaran perdagangan ini, sebelum dan sesudahnya, saya juga memiliki waktu lebih dari satu dekade dan telah mengembangkan berbagai jenis strategi. Ide investasi saya adalah: pengendalian risiko di atas segalanya, fokus pada keuntungan mutlak. Tema kursus kami adalah: Mengembangkan strategi CTA untuk keuntungan mutlak dari perdagangan kuantitatif hingga manajemen aset.

1. Strategi CTA untuk menghasilkan uang

1.1 Mengenal CTA futures

Mungkin ada yang bertanya apa itu CTA? Apa sebenarnya CTA? CTA di luar negeri disebut sebagai penasihat perdagangan komoditas, di dalam negeri biasanya disebut sebagai manajer investasi. CTA tradisional adalah mengumpulkan dana dari investor besar, kemudian mengutusnya ke lembaga investasi profesional, dan akhirnya melalui penasihat perdagangan (yaitu CTA) untuk berinvestasi dalam futures saham, futures komoditas, dan futures obligasi.

Namun, pada kenyataannya, seiring dengan perkembangan pasar berjangka global, konsep CTA juga semakin berkembang dan lebih luas dari masa depan tradisional. Ini tidak hanya dapat berinvestasi di pasar berjangka, tetapi juga di pasar suku bunga, pasar saham, pasar valuta asing, dan pasar opsi, dll.

Sebelum tahun 1980-an, teknologi e-disk belum cukup matang, saat itu sebagian besar pedagang menilai arah masa depan komoditas dengan cara menggambar secara manual indikator-indikator teknis seperti indikator William, KDJ, RSI, MACD, CCI. Kemudian ada pedagang yang mendirikan dana khusus CTA untuk membantu klien mengelola aset. Hanya setelah popularitas e-disk, dana CTA yang sebenarnya mulai muncul.

Perubahan ukuran manajemen dana CTA img Satuan: 1 miliar dolar AS

Jika kita melihat grafik di atas, khususnya dengan munculnya transaksi kuantitatif, CTA global telah meningkat dari $130.6 miliar pada tahun 2005 menjadi lebih dari $300 miliar pada tahun 2015; dan strategi CTA juga menjadi salah satu strategi investasi yang lebih populer dari hedge fund global.

Performa CTA meningkat seiring dengan pertumbuhan CTA Fund, yaitu Indeks CTA Barclays, yang merupakan benchmark industri yang mewakili para penasihat perdagangan komoditas global. Dari akhir 1979 hingga akhir 2016, indeks CTA Barclays telah mengumpulkan keuntungan sebesar 28.95 kali lipat, dengan pengembalian tahunan sebesar 9.59%, Sharpe ratio 0,37, dan pengembalian maksimum 15,66%.

Karena strategi CTA biasanya memiliki relevansi yang sangat rendah dengan strategi lain dalam portofolio alokasi aset. Di bawah ini adalah lingkaran merah, pada saat pasar saham global mengalami penurunan pada tahun 2000-2002 dan pada saat krisis pinjaman global 2008, indeks dana CTA dari Barclays tidak hanya tidak turun, tetapi juga menghasilkan keuntungan positif, dan CTA dapat memberikan keuntungan yang kuat ketika pasar saham dan pasar obligasi mengalami krisis. Selain itu, kita juga dapat melihat bahwa banyak indeks komoditas Barclays CTA telah mencapai tingkat keuntungan sejak tahun 1980 dan terus menekan indeks 500 dan juga mundur dari indeks 500.

img

Perkembangan CTA di Cina hanya sekitar satu dekade, tetapi momentumnya sangat kuat, sebagian besar karena manfaat dari lingkungan perdagangan komoditas berjangka yang lebih terbuka di dalam negeri, ambang modal perdagangan yang lebih rendah, sistem jaminan yang memungkinkan perdagangan dua arah, biaya transaksi yang lebih rendah, arsitektur teknologi bursa yang lebih maju dibandingkan dengan saham dan lebih mudah untuk perdagangan sistem, dll.

Sejak tahun 2010, CTA telah beroperasi sebagai dana swasta. Dengan kebijakan domestik yang secara bertahap membuka ruang investasi investor, CTA mulai beroperasi sebagai dana eksklusif. Cara operasinya yang lebih transparan dan terbuka juga menjadi alat yang diperlukan untuk mengalokasikan aset lebih banyak investor.

img

Seperti yang ditunjukkan pada gambar di atas, baik dari segi kemudahan akses, ambang dana, cara pelaksanaan strategi perdagangan, dan pairing API, strategi CTA juga lebih cocok untuk pedagang individu dibandingkan strategi perdagangan lainnya. Kontrak berjangka domestik sangat kecil, misalnya: beberapa ribu rupiah jagung atau kacang polong dapat diperdagangkan, dan hampir tidak ada ambang dana, karena sebagian lagi dari strategi CTA berasal dari analisis teknis tradisional, sehingga relatif lebih mudah dibandingkan dengan strategi lain.

img

Proses desain strategi CTA juga relatif sederhana, dengan data historis yang diproses terlebih dahulu dan kemudian dimasukkan ke dalam model kuantitatif. Model kuantitatif mencakup strategi perdagangan yang dibentuk oleh alat-alat seperti pemodelan matematis, desain pemrograman, dan lain-lain.

1.2 Jenis strategi CTA berjangka

Dari sudut pandang strategi trading, strategi CTA juga beragam: dapat berupa strategi tren atau strategi opsi; strategi jangka panjang pada siklus besar atau strategi jangka pendek dalam sehari; logika strategi dapat didasarkan pada analisis teknis atau analisis fundamental; dapat berupa perdagangan subjektif atau perdagangan sistematik.

Strategi CTA memiliki metode klasifikasi yang berbeda, berdasarkan metode perdagangan, dapat dibagi menjadi: perdagangan subjektif dan perdagangan sistem, strategi CTA di luar negeri yang lebih maju dalam perkembangannya, strategi CTA perdagangan sistem sudah mendekati 100%. Menurut metode analisis, dapat dibagi menjadi: analisis fundamental dan analisis teknis. Menurut sumber pendapatan, dapat dibagi menjadi: perdagangan tren dan perdagangan guncangan.

Secara keseluruhan, strategi CTA di seluruh pasar perdagangan, strategi tren menyumbang sekitar 70%, strategi mean return sekitar 25%, dan strategi kontra-tren atau reversal tren sekitar 5%. Strategi tren yang memiliki pangsa terbesar, berdasarkan siklus kepemilikan, dapat dibagi menjadi: perdagangan frekuensi tinggi, perdagangan intraday, perdagangan jangka pendek menengah, perdagangan jangka panjang menengah.

Strategi Kota Berfrekuensi TinggiSaat ini ada dua strategi perdagangan frekuensi tinggi yang populer di pasar, satu adalah strategi melakukan pasar frekuensi tinggi, dan yang lainnya adalah strategi penawaran frekuensi tinggi. Strategi melakukan pasar adalah untuk memberikan likuiditas di pasar perdagangan, yaitu di pasar perdagangan yang memiliki pedagang pasar, seseorang ingin membeli dan menjual perdagangan, pedagang harus menjamin transaksi tunggalnya dapat dilakukan. Jika likuiditas pasar tidak memadai, yang menyebabkan transaksi tunggal tidak dapat dilakukan, pedagang pasar harus membeli dan menjual pesaingnya.

Strategi Suat Frekuensi TinggiHigh-frequency swap adalah perdagangan dua saham atau ETF dan ETF yang memiliki hubungan yang kuat. Menurut metode perhitungan ETF, harga ekspektasi ETF dapat dihitung dengan cara yang sama. Harga indeks ETF dapat dikurangi dengan harga ekspektasi ETF, menghasilkan margin yang biasanya akan berjalan di dalam sebuah saluran harga, dan jika margin tersebut menembus saluran ke bawah, Anda dapat memperdagangkan margin ini, menunggu untuk kembali dari margin, dan mendapatkan keuntungan dari itu.

Strategi Dalam NegeriJika secara harfiah, selama tidak memegang saham untuk bermalam-malam, itu bisa disebut strategi trading intraday. Karena siklus trading intraday yang lebih pendek, biasanya tidak dapat mendapatkan keuntungan segera setelah masuk ke pasar, maka trading dengan metode ini memiliki risiko pasar yang lebih rendah. Tetapi karena pasar berubah lebih cepat dalam waktu singkat, strategi intraday biasanya menuntut lebih banyak dari trader.

Strategi Jangka PanjangSecara teori, jangka waktu kepemilikan yang lebih lama, kapasitas strategi yang lebih besar, dan risiko keuntungan yang lebih rendah. Terutama dalam perdagangan institusional, karena jangka pendek strategi kapasitas terbatas, dana besar tidak dapat masuk dan keluar dalam waktu singkat, sehingga akan mengkonfigurasi lebih banyak strategi jangka panjang menengah. Periode kepemilikan biasanya beberapa hari, bulan, atau bahkan lebih lama.

Data Strategi CTASecara umum, strategi CTA menggunakan data menit, jam, dan hari, yang mencakup: harga buka, harga tertinggi, harga terendah, harga tutup, volume transaksi, dll. Hanya sedikit strategi CTA yang menggunakan data Tick, seperti data mendalam seperti harga beli, harga jual, harga beli, volume jual dari data L2.

img

Untuk strategi CTA, ide dasar yang pertama kali kita pikirkan adalah berdasarkan indikator teknis tradisional, karena ada lebih banyak referensi publik, dan logika biasanya lebih sederhana, sebagian besar didasarkan pada prinsip statistik. Misalnya, berbagai indikator teknis yang kita kenal: MA, SMA, EMA, MACD, KDJ, RSI, BOLL, W&R, DMI, ATR, SAR, BIAS, OBV, dan sebagainya.

Ada beberapa model perdagangan klasik yang tersedia di pasar yang dapat digunakan dan ditingkatkan, termasuk: multi-linear, dual thrust, R-breaker, seafood trading, grid trading, dan banyak lagi.

Semua ini adalah strategi perdagangan berdasarkan analisis teknis tradisional, yang prosesnya adalah berdasarkan data sejarah dan ide perdagangan yang benar, untuk menguraikan faktor atau kondisi jual beli yang memiliki keuntungan probabilitas, dan mengasumsikan bahwa pasar akan tetap berlaku di masa depan, akhirnya menggunakan kode untuk mengimplementasikan strategi perdagangan dan perdagangan sepenuhnya otomatis.

Keuntungan terbesar dari strategi CTA adalah bahwa tidak peduli apakah pasar saat ini naik atau turun, keuntungan mutlak dapat diperoleh, terutama ketika pasar naik atau turun dengan cepat, atau ketika tren pasar jelas melemah. Keuntungan dari strategi ini sangat besar.

1.3 Keuntungan dari strategi CTA futures

Strategi CTA berjangka menghasilkan uang karena beberapa alasan:

  1. Gerakan harga bersifat kontraspektif, dan selalu berlanjut dengan cara tren. Ketika investor melihat harga naik, mereka akan membeli dengan angin, sehingga mengakibatkan harga naik lebih lanjut. Harga turun juga sama. Karena investor lebih banyak melakukan tindakan irasional, kadang-kadang kita akan melihat harga naik dan turun secara spektakuler.
  2. Toleransi setiap investor terhadap rasio laba rugi tidak simetris, dan toleransi terhadap risiko juga berbeda. Bagi sebagian besar pedagang ritel, mereka lebih cenderung memilih metode perdagangan yang lebih konservatif dan pasar lebih mudah bergerak.
  3. Pembentukan harga ditentukan oleh transaksi, dan memang dibalik transaksi ada manusia yang mendorong, tetapi sifat manusia sulit diubah, yang menyebabkan munculnya bentuk yang tetap berulang, strategi yang efektif dalam memprediksi data historis, juga memprediksi masa depan yang mungkin dan akan efektif.

Selain itu, trend tracking trading memiliki karakteristik yang berbeda, yaitu kehilangan sedikit uang ketika tidak ada pasar, dan menghasilkan banyak uang ketika pasar datang, tetapi orang yang melakukan perdagangan tahu bahwa pasar sebagian besar waktu karena pasar yang bergetar, hanya dalam waktu yang singkat adalah pasar tren. Jadi strategi trend tracking trading memiliki tingkat kemenangan yang lebih rendah, tetapi secara keseluruhan setiap perdagangan memiliki tingkat keuntungan dan kerugian yang lebih besar.

Karena strategi trend tracking tidak stabil dalam pengembalian, banyak lembaga investasi akan membangun portofolio dengan berbagai strategi multi, yang juga memiliki sejumlah strategi reversal di tengahnya. Strategi reversal adalah koefisien keberadaan koefisien negatif dalam hubungan waktu urutan harga, yaitu tinggi dan rendah.

Hubungan CTA dengan aset tradisional img

Kita melihat gambar di atas, secara teori berbagai gaya yang berbeda atau strategi yang relatif kurang relevan, akan membuat sinyal perdagangan yang berbeda pada saat yang sama dalam menghadapi berbagai perubahan harga pasar. Karena banyak kurva laba saling tumpang tindih, sehingga pendapatan keseluruhan membentuk komplementer, kurva laba menjadi lebih rata, sehingga mengurangi volatilitas laba.

Dari sudut pandang di atas dapat disimpulkan bahwa, daripada mengembangkan strategi tingkat master, lebih baik untuk mengembangkan beberapa strategi kerucut tengah, bagaimana cara mengendalikannya? Di sini kita dapat mengambil contoh dari algoritma hutan acak dalam pembelajaran mesin, bahwa hutan acak bukanlah algoritma yang mandiri, itu adalah kerangka keputusan yang terdiri dari beberapa pohon keputusan.

Selanjutnya, perlu merancang strategi induk yang dapat dilakukan dengan mengevaluasi likuiditas, keuntungan, dan stabilitas dari berbagai varietas di pasar berjangka komoditas keseluruhan, menyaring kombinasi varietas komoditas berjangka yang memiliki tingkat volatilitas yang rendah, kemudian melakukan penyaringan netral industri, mengurangi lebih jauh volatilitas keseluruhan dengan mendistribusikan sektor dari portofolio, dan akhirnya melakukan perdagangan dengan membangun kombinasi multi-varietas komoditas berjangka yang sebenarnya dengan pencocokan nilai pasar.

Setiap varietas juga dapat mengkonfigurasi strategi multi-parameter, yang dapat memilih kombinasi parameter dekat yang berkinerja baik untuk retargeting, ketika tren pasar jelas, strategi multi-parameter biasanya akan berkinerja konsisten, setara dengan kenaikan; ketika pasar berada di pasar yang bergolak, strategi multi-parameter biasanya akan berkinerja tidak konsisten, sehingga masing-masing melakukan lebih banyak atau melakukan lebih sedikit untuk melindungi risiko, setara dengan penurunan; ini dapat mengurangi tingkat retargeting maksimum portofolio lebih lanjut, sementara mempertahankan tingkat pengembalian keseluruhan.

2. Contoh strategi CTA futures klasik

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

Strategi CTA yang tersedia di pasaran adalah strategi linear, strategi Blink-Band, strategi trader pantai, strategi momentum, strategi opsi, dan sebagainya. Strategi perdagangan kuantitatif memiliki ciri bahwa mereka akan mati begitu saja, dan strategi akan gagal begitu saja.

2.1 Analisis dasar futures (sumbangan, margin, harga)

Analisis fundamental tidak perlu peduli dengan pergerakan harga jangka pendek, percaya bahwa nilai akhirnya akan tercermin pada harga, tetapi lebih banyak menganalisis faktor-faktor yang mempengaruhi harga, menentukan berapa banyak nilai varietas tersebut.

img

Jika kita melihat grafik di atas, ada banyak faktor yang mempengaruhi harga komoditas, dengan jumlah total hingga lusinan item, dan beberapa lusin item lebih, dan data ini terus berubah.

Pada kenyataannya, analisis dasar untuk komoditas berjangka tidak menganalisis semua faktor, kita hanya perlu menangkap elemen inti analisis dasar, dan kita dapat menyaring dan mencari aturan dari informasi yang rumit dan rumit.

Faktor MakroData makro ekonomi sangat rumit dan berubah-ubah, setiap hari setiap saat, ada banyak data ekonomi yang diterbitkan, dari berbagai kalangan politik, bank sentral, bank, resmi dan tidak resmi. Kecuali krisis politik dan ekonomi, analisis makro adalah bahan yang baik untuk berbicara, dan tidak praktis.

Faktor VarietasDalam analisis dasar, analisis varietas terutama menganalisis kenaikan harga, hubungan pasokan dan permintaan, persediaan komoditas, keuntungan industri, dll.

Teman-teman yang suka berdagang berjangka tahu bahwa komoditas berjangka dalam negeri dapat dibagi secara sederhana menjadi: barang industri dan produk pertanian. Cara analisis barang industri dan produk pertanian berbeda, kita menerangkan dari kedua aspek pasokan dan permintaan. Dalam produk industri, persediaan relatif stabil, kecuali jika ada terobosan teknologi besar, maka kapasitas produksi tidak mungkin berubah secara signifikan dalam waktu singkat, sehingga faktor yang mempengaruhi harga barang industri terutama adalah permintaan. Dalam produk pertanian, permintaan relatif stabil, dalam jangka panjang permintaan produk pertanian berubah, tetapi dalam jangka pendek permintaan produk pertanian cenderung stabil, sehingga faktor yang mempengaruhi harga produk pertanian terutama adalah pasokan.

Oleh karena itu, menurut hukum ekonomi, harga komoditas akhirnya ditentukan oleh hubungan pasokan dan permintaan, dan secara teoritis, harga komoditas masa depan dapat ditentukan jika data pasokan dan permintaan dapat diperoleh. Untuk produk industri, data pasokan lebih mudah diperoleh, tetapi data permintaan lebih sulit diperoleh, untuk produk pertanian, data permintaan lebih mudah diperoleh, dan data pasokan lebih sulit diperoleh.

Faktanya kita juga bisa melakukan pengurangan lebih lanjut, pasokan dan permintaan di pasar ekonomi adalah persediaan, kita dapat menggunakan data persediaan untuk menilai hubungan antara pasokan dan permintaan di pasar. Jika persediaan suatu komoditas tinggi, berarti kekuatan pasokan pasar lebih besar daripada permintaan, dengan asumsi kondisi eksternal tidak berubah, harga komoditas akan turun. Jika persediaan komoditas rendah, berarti kekuatan permintaan pasar lebih besar daripada pasokan, dengan asumsi kondisi eksternal tidak berubah, harga komoditas akan naik.

Selain menganalisis persediaan komoditas, perlu juga menganalisis perbedaan harga pasar spot dengan pasar futures, yang disebut margin. Jika harga futures lebih besar dari harga spot, kita menyebutnya kenaikan harga futures; jika harga futures lebih rendah dari harga spot, kita menyebutnya kenaikan harga futures. Menurut sistem pengiriman futures, pada tanggal pengiriman futures, harga futures harus sama dengan harga spot.

img

Baik naik atau turun, karena kendala pada sistem pengiriman berjangka, harga berjangka pada tanggal pengiriman harus secara teori sama dengan harga spot. Dengan semakin dekatnya tanggal pengiriman, harga spot akan cenderung konsisten dengan harga futures, salah satunya adalah futures return to spot, dan yang lainnya adalah futures return to spot.

Berdasarkan prinsip di atas, kita dapat menilai harga futures dengan menggunakan persediaan dan kerucut pada saat yang sama. Jika suatu komoditas memiliki persediaan yang lebih rendah, dan jika harga futures jauh lebih rendah dari harga spot, maka kita dapat menilai: kekuatan permintaan pasar spot lebih besar daripada kekuatan penawaran, dan harga spot di masa depan lebih mungkin naik; dan karena sistem pengiriman futures, harga futures akan mendistribusikan dengan mendekati tanggal pengiriman, sehingga harga futures lebih mungkin naik.

Akhirnya, kita menentukan arah kemungkinan besar dari harga masa depan melalui persediaan dan margin, tetapi tidak ada titik jual yang lebih akurat, sehingga analisis teknis juga diperlukan untuk memberikan sinyal masuk keluar yang jelas. Struktur analisis dasar adalah: persediaan rendah + deepwater + analisis teknis sinyal multihead = melakukan lebih banyak; persediaan tinggi + kenaikan besar + analisis teknis sinyal udara = melakukan kosong.

2.2 Peraturan perdagangan pantai

Berbicara tentang strategi trading, kita harus menyebutkan hukum perdagangan pantai yang representatif. Hukum perdagangan pantai berasal dari eksperimen yang paling terkenal dalam sejarah perdagangan, ketika spekulator komoditas Richard Dennis ingin mengetahui apakah pedagang hebat dilahirkan atau dibesarkan. Untuk itu, pada tahun 1983 ia merekrut 13 orang dan mengajarkan mereka konsep dasar perdagangan berjangka, serta metode dan prinsip-prinsip perdagangan sendiri. Para praktisi ini dikenal sebagai para pelaku perdagangan pantai.

Dalam empat tahun berikutnya, para penyu mencapai rata-rata laba bersih 80% per tahun. Dennis juga membuktikan bahwa dengan satu set sistem dan aturan yang sederhana, orang yang memiliki sedikit atau tidak ada pengalaman trading dapat menjadi pedagang yang baik. Namun, ada penyu yang menjual aturan perdagangan penyu di situs web mereka. Untuk mencegah perilaku ini, dua penyu asli, Curtis Feith dan Arthur Madock, memutuskan untuk membuat aturan perdagangan penyu gratis untuk umum di situs web mereka.

Setelah kebenaran terungkap, orang-orang menemukan bahwa aturan perdagangan ikan laut menggunakan saluran Dongjian yang dioptimalkan, dan menggunakan indikator ATR untuk manajemen posisi. Setelah menjalani ujian sejarah selama beberapa dekade, menjadi metode perdagangan yang dapat menghasilkan uang dengan mudah bagi pedagang biasa, masih berlaku di beberapa varietas.

Prinsip Inti Pantai

  • Menguasai keuntungan: Menemukan strategi perdagangan yang diharapkan bernilai positif karena dapat menghasilkan keuntungan positif dalam jangka panjang.
  • Mengelola risiko: Mengontrol risiko, menjaga posisi, atau Anda mungkin tidak bisa menunggu hari untuk menghasilkan hasil.
  • Tetap teguh: Hanya dengan teguh melaksanakan strategi Anda, Anda akan benar-benar mendapatkan hasil dari sistem.
  • "Sistem yang sederhana akan lebih kuat dari sistem yang kompleks dalam jangka panjang", jelasnya.

Jadi, selanjutnya, mari kita lihat apa yang sebenarnya dikatakan oleh hukum perdagangan pantai. 1, Pasar - apa yang dibeli dan dijual, pada dasarnya pasar mana yang diperdagangkan, para pedagang laut adalah pedagang berjangka, mereka hanya memilih pasar dengan volume perdagangan yang tinggi dan likuiditas tinggi, karena memilih pasar yang tidak aktif akan meningkatkan harga keluar masuk dan kehilangan banyak peluang tren. 2, Ukuran posisi - berapa banyak yang dibeli dan dijual adalah bagian yang sangat penting dari keseluruhan strategi, yang biasanya diabaikan atau disalahartikan oleh kebanyakan orang. Hukum perdagangan pantai menggunakan ATR, atau indikator luas fluktuasi sebenarnya rata-rata, untuk menghitung posisi terbuka, sinyal kenaikan, sinyal stop loss. Ini adalah desain yang sangat cerdik yang dimaksudkan untuk menyesuaikan ukuran posisi melalui luas fluktuasi absolut pasar, mengurangi kepemilikan ketika volatilitas pasar lebih tinggi, meningkatkan kepemilikan ketika volatilitas pasar lebih rendah. 3, masuk pasar --- masuk pasar ikan laut mengambil keuntungan dari saluran Dongjian, ketika harga naik melewati harga tertinggi 20 atau 55 garis K, maka masuk lebih banyak, ketika harga turun melewati harga terendah 20 atau 55 garis K, maka masuk kosong. Ketika sinyal muncul, masuk pasar perdagangan, tidak peduli menutup atau bawah garis K. 4. Stop Loss - Perdagangan tanpa stop loss tidak akan berhasil dalam jangka panjang, tetapi sebagian besar pedagang memegang posisi yang merugikan, mencoba untuk berharap pasar berubah. Pantai sangat ketat mengatur kapan harus keluar dari posisi yang merugikan, jika memegang banyak pesanan, dan harga turun 2 unit, banyak kepala akan merugikan posisi. Jika memegang pesanan kosong, dan harga naik 2 unit, kepala kosong akan menghentikan posisi yang merugikan. 5, stop-loss -- Stop-loss dari pasang surut berarti kehilangan banyak pasang surut, yang juga merupakan bagian yang sulit diterima oleh banyak pedagang. Jika Anda saat ini memegang banyak order dan harga turun di bawah lintasan saluran Dongqian pada hari ke-10, Anda akan menebang semua order tambahan; jika Anda saat ini memegang banyak order kosong dan harga naik di lintasan saluran Dongqian pada hari ke-10, Anda akan menebang semua order kosong.

Dari sini kita dapat melihat bahwa hukum perdagangan pantai tampak sederhana, tetapi pada kenyataannya telah membentuk sistem perdagangan yang benar-benar cacat, yang mencakup semua aspek dari sistem perdagangan yang lengkap, tanpa meninggalkan ruang bagi para pedagang untuk membuat keputusan imajinatif yang subjektif, yang memungkinkan keuntungan dari operasi sistem yang terprogram untuk dimainkan.

Keuntungan terbesar dari metode perdagangan pantai adalah membantu kita membangun metode perdagangan yang efektif, yang menggabungkan strategi pembentukan posisi, stop loss, dan strategi untuk mengikuti tren pasar, terutama penggunaan nilai ATR dan manajemen posisi. Tentu saja, itu juga memiliki masalah yang sama dengan strategi pelacakan tren, yaitu memunculkan kembali.

3. Strategi CTA untuk pengembangan real-time

3.1 Mengembangkan strategi tren CTA berbasis bahasa Melayu

Pada akhir abad yang lalu, sebuah metode perdagangan yang sangat ajaib mulai populer di bidang investasi keuangan di Amerika Serikat, setelah dipraktekkan oleh ribuan orang, metode ini ditemukan efektif dan memiliki nilai praktis yang besar, dan diakui oleh banyak ahli investasi dan pedagang profesional, sehingga hingga sekarang dapat diterapkan dengan sempurna di hampir semua bidang investasi keuangan, baik itu forex, emas, saham, berjangka, minyak mentah, indeks dan obligasi, ini adalah metode operasi kekacauan.

Kata kekacauan mengacu pada deskripsi keadaan kekacauan alam semesta, yang idenya adalah: hasilnya pasti, tetapi karena pengetahuan yang ada tidak dapat menghitung hasilnya, karena perhitungan itu sendiri juga mengubah hasilnya, dan akhirnya mungkin ada hasil terbesar atau terkecil, tanpa hasil yang pasti. Ini sangat mirip dengan pasar perdagangan, para peserta menganalisis pasar dan membeli dan menjual transaksi yang juga mengubah pasar. Pasar memiliki variabilitas abadi, ketika para peserta mengetahui bentuk baru pasar, pasar juga mengetahui bahwa hal itu terjadi ketika mereka mengetahui bahwa pasar baru berubah; dan itu pasti cenderung berubah ke arah yang tidak diketahui oleh para peserta, dan memiliki kecerdasan yang cukup untuk mencegah para peserta menangkap hukum perubahannya, yaitu, pasar tidak stabil, pemahaman pasar tentang masa lalu tidak dapat mewakili masa depan.

Chaos Operating Method (COS), adalah satu set ide investasi, strategi perdagangan dan sinyal masuk keluar yang lengkap, yang diciptakan oleh Bill Williams. Saat ini, banyak investor di seluruh dunia yang terlibat dalam perdagangan pasar dengan cara operasi kekacauan, karena perkembangan pasar keuangan di negara kita lambat, dan teori kekacauan juga merupakan ide yang relatif baru, sehingga sedikit orang yang mempelajari metode operasi kekacauan di dalam negeri.

Seperti namanya, dasar teori operasi kekacauan adalah teori kekacauan, yang dikemukakan oleh ahli meteorologi Edward Lorenz dan merupakan salah satu penemuan ilmiah terbesar pada akhir abad ke-20; yang terkenal dengan efek kupu-kupu. Bill Williams secara kreatif menerapkan teori kekacauan ke bidang investasi keuangan, dan menggabungkan disiplin ilmu seperti geometri pecahan, dinamika non-linear, dan lain-lain, untuk menciptakan serangkaian indikator analisis teknis yang sangat efektif.

Seluruh sistem operasi Chaos terdiri dari lima dimensi besar (Indikator Teknis):

  • Alligator

  • The Fractal

  • The Momentum (dalam bahasa Inggris).

  • Kecepatan (Acceleration)

  • The Balance Line (Garis Keseimbangan)

    img

Kita lihat di gambar di atas, garis ikan hiu adalah seperangkat garis keseimbangan yang menggunakan geometri pembagian dan dinamika non-linier, yang pada dasarnya adalah garis bergerak terberat dengan indeks ekspansi, yang merupakan jenis garis rata, tetapi metode perhitungannya sedikit lebih rumit daripada garis rata biasa. Selanjutnya kita akan melihat bagaimana menggunakan bahasa Mac untuk mendefinisikan garis ikan hiu:

// 参数
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-tama kita menentukan dua parameter eksternal N1 dan N2, lalu menghitung HL rata-rata harga tertinggi dan harga terendah berdasarkan parameter eksternal, kemudian menghitung HL rata-rata dengan parameter yang berbeda, untuk ciuman bibir adalah rata-rata siklus kecil di tengah garis lagi, gigi adalah rata-rata siklus tengah garis lagi, pinggul adalah rata-rata siklus besar di tengah garis lagi. Dalam strategi ini, kita menggunakan pinggul.

Dalam operasi kekacauan yang sangat visual, kita dapat membuat perumpamaan dengan definisi konsep pembagian, kita dapat membuat perumpamaan: membuka telapak tangan, jari-jari ke atas, jari tengah adalah pembagian atas, jari kelingking dan jari telunjuk di sebelah kiri, jari tengah dan jari tengah di sebelah kanan masing-masing mewakili garis K yang tidak berinovasi tinggi. Sebuah pembagian dasar terdiri dari 5 garis K ini.

// 分形
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);

Menghitung garis hiu dan pecahan, kita dapat menulis strategi operasi kekacauan sederhana berdasarkan dua kondisi ini, dengan menggunakan seperangkat indeks ditambah dengan rata-rata bergerak yang ditimbang sebagai harga acuan untuk menghitung garis hiu dan pecahan indikator. Tentu saja strategi operasi kekacauan versi aslinya akan lebih rumit. Kode 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 pemahaman, saya langsung menuliskan komentar rinci di dalam kode, dan kita dapat meringkas logika perdagangan dari strategi ini menjadi beberapa poin:

  • Opening Multiple: Jika saat ini tidak ada banyak pesanan, dan harga penutupan naik, dan harga penutupan naik di atas garis ikan hiu.
  • Posisi terbuka kosong: Jika saat ini tidak ada pesanan kosong, dan harga penutupan jatuh ke bawah pecahan, dan pecahan bawah berada di bawah garis ikan hiu.
  • Di sisi lain, para investor juga ingin melihat bagaimana mereka dapat menghemat uangnya.
  • Jika harga tutup naik, Anda akan kehilangan bibir ikan hiu.

Selanjutnya, mari kita lihat bagaimana hasil dari strategi retesting yang sederhana ini. Untuk membuat retesting lebih dekat dengan lingkungan nyata, di sini kita mengatur biaya operasi menjadi dua kali lipat dari bursa, dengan posisi terbuka dan posisi terbuka ditambah dua lompatan masing-masing. Varietas data retesting adalah indeks baja berotot, varietas perdagangan adalah kekuatan utama baja berotot, terus menerus, tetap satu tangan. Berikut adalah laporan kinerja retesting awal pada tingkat 1 jam.

img img img

Dari segi kurva modal dan data kinerja retrospektif, strategi ini berkinerja baik, dan kurva modal secara keseluruhan stabil naik. Namun, dari akhir tahun 2016, karakteristik pasar dari varietas baja cor telah berubah, dari pergerakan satu sisi yang sebelumnya berfluktuasi tinggi menjadi pergerakan goyah yang luas. Dari segi kurva modal, keuntungan tahun 2017 hingga saat ini sangat lemah.

Dengan kata lain, inti dari metode operasi kekacauan adalah menemukan titik balik, tidak perlu khawatir tentang bagaimana pasar berjalan, tidak perlu khawatir tentang terobosan yang benar, jika terobosan terjadi, langsung masuk. Jangan pernah mencoba memprediksi pasar, tetapi menjadi pengamat dan pengikut.

3.2 Perkembangan strategi CTA suite berbasis JavaScript

Soros pernah membuat proposisi penting dalam bukunya, The Alchemist's Algorithm of Currency, yang ditulis pada tahun 1987: "Saya percaya bahwa harga pasar selalu salah dalam arti bahwa mereka memiliki kecenderungan terhadap masa depan". Dia berpendapat bahwa hipotesis efektif pasar hanyalah hipotesis teoritis, bahwa sebenarnya para peserta pasar tidak selalu rasional, dan bahwa pada setiap titik waktu, para peserta tidak dapat sepenuhnya memperoleh dan secara obyektif menafsirkan semua informasi, dan bahwa bahkan jika itu adalah informasi yang sama, semua orang tidak memiliki umpan balik yang sama. Artinya, harga itu sendiri telah mengandung harapan yang salah dari para peserta pasar, sehingga harga pasar selalu salah secara inheren. Mungkin ini adalah sumber keuntungan dari para profiteur.

Menurut prinsip di atas, kita juga tahu bahwa dalam pasar berjangka yang tidak efektif, kontrak berjangka yang berbeda periode tidak selalu sinkron dipengaruhi oleh pasar, dan penentuan harga tidak sepenuhnya efektif. Jadi, berdasarkan harga kontrak berjangka yang berbeda periode dari indikator perdagangan yang sama, jika dua harga terjadi perbedaan harga yang lebih besar, Anda dapat membeli dan menjual kontrak berjangka yang berbeda periode pada saat yang sama, melakukan penyebaran jangka panjang.

Seperti halnya komoditas berjangka, mata uang digital juga memiliki kombinasi kontrak leverage jangka panjang yang terkait; seperti yang ada di OKEX: ETC minggu itu, ETC minggu berikutnya, ETC kuartal. Sebagai contoh, asumsikan bahwa selisih harga ETC minggu itu dan ETC kuartal bertahan sekitar 5 untuk waktu yang lama. Jika selisih harga suatu hari mencapai 7, kita memperkirakan bahwa selisih harga akan kembali ke 5 di masa depan; maka kita dapat menjual ETC minggu itu, membeli ETC kuartal pada saat yang sama, dan menghapus selisih tersebut; dan sebaliknya.

Meskipun perbedaan harga ini ada, ada banyak ketidakpastian dalam manipulasi buatan yang memakan waktu, ketidakakuratan, dan dampak dari perubahan harga. Dengan menggunakan model kuantitatif untuk menangkap peluang dan mengembangkan strategi perdagangan, dan algoritma terprogram untuk secara otomatis mengirimkan pesanan perdagangan ke bursa, peluang yang cepat dan akurat ditangkap, dan keuntungan yang stabil dan efisien.

Pada bagian ini, kita akan mengajarkan bagaimana dalam perdagangan mata uang digital, menggunakan inventor untuk mengukur platform perdagangan dan kontrak futures ETC di bursa OkEX, untuk menunjukkan strategi penawaran yang sederhana jika Anda menangkap peluang penawaran instan, meraih keuntungan yang terlihat setiap kali, sementara risiko yang mungkin Anda hadapi.

Menciptakan strategi CFD mata uang digitalKesulitan: Rata-rataLingkungan Strategis

  • Tanda perdagangan: ETH klasik (ETC)
  • Data perbedaan harga: ETC minggu - ETC kuartal (dihilangkan tes kointegrasi)
  • Siklus transaksi: 5 menit
  • 头寸匹配:1:1
  • Tipe transaksi: periode transgenik

Logika strategis

  • Kondisi trading over-deferred: Jika akun saat ini tidak memiliki saham dan harga over-deferred kurang dari boll, trading over-deferred dilakukan.
  • Kondisi buka lepas: Jika akun saat ini tidak memiliki saham, dan harganya lebih besar dari boll, maka buka lepas; yaitu: jual ETC minggu itu, beli ETC kuartal itu.
  • Kondisi penyeimbangan over-disparity: Jika akun saat ini memiliki ETC lebih banyak mingguan, dan memiliki ETC lebih banyak kuartal, dan perbedaan harga lebih besar dari boll, maka over-disparity akan terjadi.
  • Jika akun saat ini memegang ETC pada minggu yang sama, dan memiliki lebih banyak pesanan ETC per kuartal, dan harga yang berbeda kurang dari boll di tengah jalur, maka harga yang berbeda akan terjadi.

Di atas adalah deskripsi logika dari strategi trading cryptocurrency cross-term yang sederhana, jadi bagaimana cara mewujudkan ide Anda dalam program? Kami mencoba membangun kerangka kerja sebelum penemu mengkuantifikasi platform perdagangan.

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 transaksi kita dalam transaksi dominan? Dalam transaksi sistem tidak ada perbedaan yang esensial, hanya: mendapatkan data, menghitung data, melakukan transaksi, memproses setelah melakukan pesanan. Begitu juga dalam program, pertama-tama program akan mengeksekusi fungsi utama baris ke-20, yang merupakan peraturan konvensional, ketika program mengeksekusi proses strategi transaksi sebelumnya (jika ada) akan masuk ke mode loop tanpa batas, yaitu mode rounding, dalam mode rounding akan mengeksekusi fungsi onTick berulang-ulang.

Jadi dalam fungsi onTick, ini adalah proses transaksi yang kita lakukan dalam transaksi subjektif: pertama mendapatkan data harga dasar, kemudian mendapatkan saldo akun, kemudian menghitung indikator, kemudian mulai menghitung kondisi transaksi dan memesan, dan akhirnya pengolahan setelah memesan, termasuk: penarikan pesanan, gambar, pengolahan kontrak tunggal.

Dengan mempertimbangkan ide-ide strategis dan proses transaksi, kerangka kerja strategis dapat dengan mudah dibangun. Seluruh strategi dapat disederhanakan menjadi tiga langkah:

  • Sebelum melakukan transaksi, prosesnya dilakukan terlebih dahulu.
  • Mengambil dan menghitung data.
  • Permintaan dan proses selanjutnya.

Setelah kerangka kerja strategi perdagangan telah dibangun, kode detail yang diperlukan harus diisi dalam kerangka kerja strategi sesuai dengan proses transaksi dan detail transaksi yang sebenarnya.

Pertama, proses pra-transaksi.

1. Mengatakan variabel global yang diperlukan

  • Mengatakan objek chart untuk grafik konfigurasivar chart = {}
  • Panggilan fungsi Chart, inisialisasi grafikvar ObjChart = Chart ( chart )
  • Mendefinisikan suatu himpunan kosong untuk menyimpan urutan perbedaan hargavar bars = []
  • Mengatakan variabel timestamp yang mencatat data historisvar oldTime = 0

2. Parameter eksternal dari kebijakan konfigurasi

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

3. Mendefinisikan fungsi pemrosesan data

  • Fungsi data dasar: Data () Membuat constructor fungsi Data dan mendefinisikan sifat internalnya. Ini termasuk: data akun, data kepemilikan, data garis waktu K, harga jual/beli kontrak A/B, dan perbedaan nilai positif/kontra.
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 saham: mp () Melalui seluruh susunan kepemilikan, mengembalikan jumlah kepemilikan untuk kontrak tertentu, jumlah kepemilikan untuk arah tertentu, jika tidak, mengembalikan 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 indikator:boll () Menggunakan data perbedaan harga positif/kontra, mengkomposisi urutan garis K baru; dan mengembalikan data tren, tren tengah, dan tren bawah yang dihitung oleh indikatorboll.
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 berikut:trade () Mengirimkan nama kontrak suborder dan jenis kontrak suborder, lalu melakukan suborder dengan harga setara, dan mengembalikan hasil suborder. Karena diperlukan dua suborder yang berbeda pada saat yang sama, dalam fungsi ini dilakukan konversi harga beli/jual berdasarkan nama kontrak suborder.
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 array pesanan tertunda, dan membatalkannya satu per satu. Dan kembali false jika ada pesanan tertunda, kembali true jika tidak ada pesanan tertunda.
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
}
  • Mengelola kontrak tunggal: isEven ()) Dalam proses transaksi leverage, terjadi situasi satu kaki, di mana semua posisi diproses secara langsung dengan cara yang sederhana.
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 metode ObjChart.add () untuk menggambar data pasar dan data indikator yang diperlukan dalam grafik: naik, naik, turun, positif / negatif.
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 (), menjalankan kode pra-pengolahan transaksi, yang hanya dijalankan sekali setelah program dimulai; termasuk:

  • Tidak ada informasi penting di filter panelSetErrorFilter ( )
  • Setel mata uang digital untuk diperdagangkanexchange.IO ( )
  • Grafik yang dibuat sebelum program dimulaiObjChart.reset ( )
  • Informasi status bar sebelum program dimulaiLogProfitReset ( )

Setelah menentukan pra-pengolahan transaksi di atas, langkah selanjutnya adalah masuk ke mode pertanyaan, mengulangi fungsi onTick (), dan mengatur waktu tidur saat pertanyaan Sleep (), karena API beberapa pertukaran mata uang digital memiliki batasan jumlah akses dalam waktu 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秒
    }
}

2. Mendapatkan dan menghitung data

  1. Mendapatkan objek data dasar, saldo akun, dan indikatorboll untuk digunakan dalam logika perdagangan.
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, daftarkan dan perbaiki

  1. Mengikuti logika strategi di atas, operasi jual beli dilakukan. Pertama-tama menentukan apakah kondisi harga dan indikator berlaku, kemudian menentukan apakah kondisi kepemilikan berlaku, dan akhirnya menjalankan fungsi sub-order 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. Setelah pesanan selesai, Anda perlu menangani hal-hal yang tidak normal seperti pesanan yang belum selesai, memegang kontrak tunggal, dan menggambar grafik.
data.cancelOrders(); // 撤单
data.drawingChart(boll); // 画图
data.isEven(); // 处理持有单个合约

Di atas, kami telah membuat strategi CFD mata uang digital sederhana yang lengkap dengan lebih dari 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 banyak

dianwan99Belajar Belajar

Ayah.Belajar

xunfeng91Belajar