Dalam investasi kuantitatif, data ini terutama tercermin dalam harga dan pergerakan titik data objek investasi yang dilacak. Misalnya untuk harga saham, data seri waktu yang dicatat secara teratur dalam periode waktu tertentu dapat merujuk pada grafik berikut, yang akan memberi pembaca pemahaman yang lebih jelas:
Seperti yang dapat Anda lihat, tanggal berada pada sumbu x, dan harga ditampilkan pada sumbu y. Dalam hal ini,
Namun, ketika Anda menggunakan data deret waktu, Anda akan sering melihat lebih dari hanya jenis data yang hanya berisi dua kolom: tanggal dan harga. Dalam kebanyakan kasus, Anda akan menggunakan lima kolom data: periode data, harga pembukaan, harga tertinggi, harga terendah, dan harga penutupan. Ini berarti bahwa jika periode data Anda ditetapkan pada tingkat harian, perubahan harga tinggi, terbuka, rendah dan dekat hari akan tercermin dalam data deret waktu ini.
Data Tick adalah struktur data perdagangan yang paling rinci di bursa. Ini juga merupakan bentuk data deret waktu yang diperluas yang disebutkan di atas, termasuk: harga pembukaan, harga tertinggi, harga terendah, harga terakhir, jumlah perdagangan dan omset. Jika data transaksi dibandingkan dengan sungai, data Tick adalah data sungai pada bagian lintas tertentu.
Setiap tindakan bursa asing akan didorong ke pasar secara real-time, sementara bursa domestik memeriksa dua kali per detik. Jika ada tindakan dalam periode ini, snapshot akan dihasilkan dan didorong.
Semua kode dan akuisisi data deret waktu dalam tutorial ini akan diselesaikan di platform FMZ Quant.
Meskipun data Tick domestik bukan Tick nyata, itu bisa sangat dekat dan memulihkan realitas setidaknya dengan menggunakan data ini untuk backtesting.
Tidak hanya itu, pada FMZ Quant, bahkan jika data dengan periode 1 jam dimuat, granularitas data masih dapat disesuaikan, seperti menyesuaikan granularitas data menjadi 1 menit. Pada saat ini, garis K 1 jam terdiri dari data 1 menit. Tentu saja, semakin kecil granularitasnya, semakin tinggi presisi. Yang lebih kuat adalah bahwa jika Anda beralih data ke bot nyata Tick, Anda dapat mengembalikan lingkungan bot nyata dengan lancar. yaitu, data nyata Tick Exchange dua kali per detik.
Sekarang Anda telah mempelajari konsep dasar yang perlu Anda pahami untuk menyelesaikan tutorial ini. Konsep-konsep ini akan segera kembali, dan Anda akan belajar lebih banyak tentang mereka nanti dalam tutorial ini.
Alat yang lebih baik membuat pekerjaan yang baik. Kita perlu untuk menyebarkan docker pada platform FMZ Quant pertama. Sehubungan dengan konsep docker, pembaca dengan pengalaman pemrograman dapat membayangkan sebagai sistem Docker yang dikemas secara resmi, yang telah merangkum antarmuka API publik dari berbagai bursa arus utama dan rincian teknis strategi menulis dan backtesting.
Metode A: Pengguna dapat menyewa atau membeli server sendiri dan menyebarkan mereka di berbagai platform komputasi awan, seperti AWS, Alibaba Cloud, Digital Ocean dan Google Cloud. Keuntungannya adalah bahwa keamanan strategi dan keamanan sistem dijamin. Untuk platform FMZ Quant, pengguna didorong untuk menggunakan metode ini. Penyebaran terdistribusi menghilangkan bahaya serangan server yang tersembunyi (baik itu pelanggan atau platform itu sendiri).
Metode B: Menggunakan server publik platform FMZ Quant untuk penyebaran, platform menyediakan empat lokasi untuk penyebaran di Hong Kong, Singapura, Jepang dan Timur AS. Pengguna dapat menyebarkan sesuai dengan lokasi pertukaran yang ingin mereka perdagangan dan prinsip kedekatan. Keuntungan dari aspek ini adalah bahwa itu sederhana dan mudah untuk menyelesaikan dengan satu klik, yang sangat cocok untuk pengguna pemula.
Untuk pemula, artikel ini akan menggunakan metode B.
Operasi khusus adalah: masuk keFMZ.COM, klik Dashboard, Docker, dan klik One-click Rent a docker VPS untuk menyewa docker.
Masukkan kata sandi, seperti yang ditunjukkan di bawah ini setelah sukses penerapan:
Membuat robot sangat sederhana. Setelah mengimplementasikan docker, klik kolom Bot di sebelah kiri, klik Tambahkan bot, isi nama dalam nama tag, dan pilih docker yang baru saja diimplementasikan. Parameter dan periode K-line di bawah ini dapat diatur sesuai dengan situasi tertentu, terutama dalam koordinasi dengan strategi perdagangan.
Sejauh ini, lingkungan kerja kami telah dibangun. dapat dilihat bahwa itu sangat sederhana dan efektif, dan setiap fungsi melakukan tugasnya sendiri. selanjutnya, kita akan mulai menulis strategi kuantitatif.
Kami telah menyebutkan konsep data deret waktu dan data Tick di atas. selanjutnya, kami menggunakan strategi EMA sederhana untuk menghubungkan kedua konsep.
EMA periode lambat, seperti EMA 7 hari, dan EMA periode cepat, seperti EMA 3 hari. Mereka diterapkan pada grafik K-line yang sama. Ketika EMA periode cepat melintasi EMA periode lambat, kita menyebutnya Golden Cross; Ketika EMA periode lambat turun melalui EMA periode cepat, kita menyebutnya Bearish Crossover.
Dasar untuk membuka posisi adalah membuka posisi panjang dengan Golden Cross, dan membuka posisi pendek dengan Bearish Crossover.
Mari kita buka.FMZ.COM, masuk ke akun, Dashboard, Perpustakaan Strategi, dan buat strategi baru. Pilih Python di bahasa penulisan strategi di pojok kiri atas. Berikut ini adalah kode strategi ini. Setiap baris memiliki komentar rinci. Silakan luangkan waktu untuk memahami. Strategi ini bukan strategi bot nyata. Jangan bereksperimen dengan uang sungguhan. Tujuan utamanya adalah untuk memberi Anda gagasan umum tentang penulisan strategi dan templat untuk belajar.
import types # Import the Types module library, which is designed to handle the various data types that will be used in the code.
def main(): # The main function, where the strategy logic begins.
STATE_IDLE = -1 # Mark position status variables
state = STATE_IDLE # Mark the current position status
initAccount = ext.GetAccount() # The spot digital currency trading class library (python version) is used here. Remember to check it when writing the strategy to obtain the initial account information.
while True: # Enter the loop
if state == STATE_IDLE : # Here begins the logic of opening positions.
n = ext.Cross(FastPeriod,SlowPeriod) # The indicator crossover function is used here, for details please see: https://www.fmz.com/strategy/21104.
if abs(n) >= EnterPeriod : # If n is greater than or equal to the market entry observation period, the market entry observation period here is to prevent positions from being opened indiscriminately as soon as the market opens.
opAmount = _N(initAccount.Stocks * PositionRatio,3) # Opening position quantity, for the usage of _N, please check the official API documentation.
Dict = ext.Buy(opAmount) if n > 0 else ext.Sell(opAmount) # Create a variable to store the open position status and execute the open position operation.
if Dict : # Check the dict variable and prepare for the following log output.
opAmount = Dict['amount']
state = PD_LONG if n > 0 else PD_SHORT # Both PD_LONG and PD_SHORT are global constants used to represent long and short positions, respectively.
Log("Details of opening positions",Dict,"Cross-period",n) # Log information
else: # Here begins the logic of closing positions.
n = ext.Cross(ExitFastPeriod,ExitSlowPeriod) # The indicator crossover function.
if abs(n) >= ExitPeriod and ((state == PD_LONG and n < 0) or (state == PD_SHORT and n > 0)) : # If the market exit observation period has passed and the current account status is in the position status, then you can determine the Golden Cross or Bearish Crossover.
nowAccount = ext.GetAccount() # Refresh and get account information again.
Dict2 = ext.Sell(nowAccount.Stocks - initAccount.Stocks) if state == PD_LONG else ext.Buy(initAccount.Stocks - nowAccount.Stocks) # The logic of closing a position is to close the long position if it is a long position and close the short position if it is a short position.
state = STATE_IDLE # Mark the position status after closing positions.
nowAccount = ext.GetAccount() # Refresh and get account information again.
LogProfit(nowAccount.Balance - initAccount.Balance,'money:',nowAccount.Balance,'currency:',nowAccount.Stocks,'The details of closing positions',Dict2,'Cross-over period:',n) # Log information
Sleep(Interval * 1000) # Pause the loop for one second to prevent the account from being restricted due to too fast API access frequency.
Klik backtest, Anda dapat melihat bahwa ada banyak parameter yang dapat disesuaikan, yang dapat dimodifikasi secara langsung. Untuk masa depan, strategi semakin kompleks, dan parameter semakin banyak. Metode modifikasi ini dapat membantu pengguna menghindari kesulitan memodifikasi kode satu per satu, yang nyaman, cepat, dan jelas.
Opsi optimasi berikut dapat mengoptimalkan parameter yang ditetapkan secara otomatis. Sistem akan mencoba berbagai parameter optimal untuk membantu pengembang strategi menemukan pilihan optimal.
Dari contoh di atas, kita dapat melihat bahwa dasar perdagangan kuantitatif adalah melalui analisis data deret waktu dan interaksi backtesting data tik. Tidak peduli seberapa kompleks logika, tidak dapat dipisahkan dari dua elemen dasar ini. Perbedaannya hanyalah perbedaan dimensi. Misalnya, transaksi frekuensi tinggi membutuhkan aspek data yang lebih rinci dan lebih banyak data deret waktu. Contoh lain adalah perdagangan arbitrase, yang membutuhkan banyak data dari sampel backtest. Ini mungkin memerlukan data mendalam berkelanjutan dari dua objek perdagangan selama lebih dari sepuluh tahun untuk mengetahui hasil statistik ekspansi dan pengurangan margin bunga mereka. Dalam artikel mendatang, saya akan memperkenalkan strategi perdagangan frekuensi tinggi dan strategi perdagangan arbitrase satu demi satu. Harap menantikan.