Siri masa merujuk kepada siri data yang diperoleh dalam selang masa yang sama. Dalam pelaburan kuantitatif, data ini terutamanya tercermin dalam harga dan pergerakan titik data objek pelaburan yang dikesan. Sebagai contoh, untuk harga saham, data siri masa yang direkodkan secara berkala dalam tempoh masa tertentu boleh merujuk kepada carta berikut, yang akan memberi pembaca pemahaman yang lebih jelas:
Seperti yang anda lihat, tarikh adalah pada paksi x, dan harga dipaparkan pada paksi y. Dalam kes ini,
Walau bagaimanapun, apabila anda menggunakan data siri masa, anda akan sering melihat lebih daripada hanya jenis data ini yang hanya mengandungi dua lajur: tarikh dan harga. Dalam kebanyakan kes, anda akan menggunakan lima lajur data: tempoh data, harga pembukaan, harga tertinggi, harga terendah, dan harga penutupan. Ini bermakna jika tempoh data anda ditetapkan pada tahap harian, perubahan harga tinggi, terbuka, rendah dan dekat hari ini akan tercermin dalam data siri masa ini.
Tick data adalah struktur data perdagangan yang paling terperinci di bursa. Ia juga merupakan bentuk data siri masa yang diperluaskan yang disebutkan di atas, termasuk: harga pembukaan, harga tertinggi, harga terendah, harga terakhir, kuantiti perdagangan dan perolehan.
Setiap tindakan bursa asing akan didorong ke pasaran dalam masa nyata, sementara pertukaran domestik memeriksa dua kali sesaat. Jika terdapat tindakan dalam tempoh ini, snapshot akan dihasilkan dan didorong. Sebagai perbandingan, data push hanya boleh dianggap sebagai OnTime dalam keadaan terbaik, bukan OnTick.
Semua kod dan pemerolehan data siri masa dalam tutorial ini akan disiapkan di platform FMZ Quant.
Walaupun data Tick domestik bukan Tick sebenar, ia boleh menjadi tidak terhingga dekat dan memulihkan realiti sekurang-kurangnya dengan menggunakan data ini untuk backtesting.
Tidak hanya itu, pada FMZ Quant, walaupun data dengan tempoh 1 jam dimuatkan, granulariti data masih boleh diselaraskan, seperti menyesuaikan granulariti data kepada 1 minit. Pada masa ini, garis K 1 jam terdiri daripada data 1 minit. Sudah tentu, semakin kecil granulariti, semakin tinggi ketepatan. Yang lebih kuat adalah jika anda menukar data ke bot sebenar Tick, anda boleh memulihkan persekitaran bot sebenar dengan lancar. iaitu, data sebenar Tick Exchange dua kali sesaat.
Sekarang anda telah belajar konsep asas yang anda perlu memahami untuk menyelesaikan tutorial ini. konsep ini akan kembali tidak lama lagi, dan anda akan belajar lebih lanjut mengenai mereka kemudian dalam tutorial ini.
Alat yang lebih baik membuat kerja yang baik. Kita perlu menggunakan docker pada platform FMZ Quant terlebih dahulu. Mengenai konsep docker, pembaca dengan pengalaman pengaturcaraan dapat membayangkan ia sebagai sistem Docker yang dikemas secara rasmi, yang telah merangkumi antara muka API awam pelbagai bursa arus perdana dan butiran teknikal penulisan strategi dan pengujian belakang. Niat asal penubuhan sistem ini adalah untuk membuat pedagang kuantitatif memberi tumpuan kepada penulisan strategi dan reka bentuk ketika menggunakan platform FMZ Quant. butiran teknikal Quant ini dibentangkan kepada penulis strategi dalam formula yang dikemas untuk menjimatkan banyak masa dan usaha mereka.
Kaedah A: Pengguna boleh menyewa atau membeli pelayan sendiri dan menyebarkannya di pelbagai platform pengkomputeran awan, seperti AWS, Alibaba Cloud, Digital Ocean dan Google Cloud. Kelebihannya adalah kedua-dua keselamatan strategi dan keselamatan sistem dijamin. Untuk platform FMZ Quant, pengguna digalakkan menggunakan kaedah ini. Pengedaran yang diedarkan menghapuskan bahaya serangan pelayan yang tersembunyi (sama ada pelanggan atau platform itu sendiri).
Kaedah B: Gunakan pelayan awam platform FMZ Quant untuk penggunaan, platform ini menyediakan empat lokasi untuk penggunaan di Hong Kong, Singapura, Jepun dan Timur AS. Pengguna boleh menggunakan mengikut lokasi bursa yang mereka ingin berdagang dan prinsip kedekatan. Kelebihan aspek ini adalah bahawa ia mudah dan mudah diselesaikan dengan satu klik, yang sangat sesuai untuk pengguna pemula. Ia tidak perlu mengetahui banyak perkara mengenai pembelian pelayan Linux, dan juga menjimatkan masa dan tenaga dari mempelajari arahan Linux. Harga agak murah. Bagi pengguna dengan dana yang kecil, platform mengesyorkan menggunakan kaedah penggunaan ini.
Untuk pemula, artikel ini akan menggunakan kaedah B.
Operasi khusus adalah: log masuk keFMZ.COM, klik Dashboard, Docker, dan klik One-click Rent a docker VPS untuk menyewa docker.
Masukkan kata laluan, seperti yang ditunjukkan di bawah selepas berjaya digunakan:
Membuat robot sangat mudah. Selepas menggunakan docker, klik lajur Bot di sebelah kiri, klik Tambah bot, isi nama dalam nama tag, dan pilih docker yang baru digunakan. Parameter dan tempoh K-line di bawah boleh ditetapkan mengikut keadaan tertentu, terutamanya dalam koordinasi dengan strategi perdagangan.
Setakat ini, persekitaran kerja kami telah dibina. dapat dilihat bahawa ia sangat mudah dan berkesan, dan setiap fungsi melakukan tugasnya sendiri. seterusnya, kita akan mula menulis strategi kuantitatif.
Kita telah menyebut konsep data siri masa dan data Tick di atas. seterusnya, kita menggunakan strategi EMA mudah untuk menghubungkan kedua-dua konsep.
Apabila EMA tempoh cepat melintasi EMA tempoh perlahan, kita memanggilnya Golden Cross; apabila EMA tempoh perlahan turun melalui EMA tempoh cepat, kita memanggilnya Bearish Crossover.
Asas untuk membuka kedudukan adalah untuk membuka kedudukan panjang dengan Golden Cross, dan membuka kedudukan pendek dengan Bearish Crossover.
Mari kita bukaFMZ.COM, log masuk ke akaun, Dasbor, Perpustakaan Strategi, dan buat strategi baru. Pilih Python dalam bahasa penulisan strategi di sudut kiri atas. Berikut adalah kod strategi ini. Setiap baris mempunyai komen terperinci. Sila luangkan masa untuk memahami. Strategi ini bukan strategi bot sebenar. Jangan bereksperimen dengan wang sebenar. Tujuan utama adalah untuk memberi anda idea umum 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 bahawa terdapat banyak parameter yang boleh disesuaikan, yang boleh diubah secara langsung. Untuk masa depan, strategi semakin kompleks, dan parameter semakin banyak. Kaedah pengubahsuaian ini dapat membantu pengguna mengelakkan masalah mengubahsuai kod satu demi satu, yang mudah, cepat, dan jelas.
Pilihan pengoptimuman berikut boleh mengoptimumkan parameter yang ditetapkan secara automatik. Sistem akan mencuba pelbagai parameter optimum untuk membantu pemaju strategi mencari pilihan yang optimum.
Dari contoh di atas, kita dapat melihat bahawa asas perdagangan kuantitatif adalah melalui analisis data siri masa dan interaksi backtesting data tik. Tidak kira betapa kompleksnya logika, ia tidak dapat dipisahkan dari dua elemen asas ini. Perbezaannya hanyalah perbezaan dimensi. Sebagai contoh, urus niaga frekuensi tinggi memerlukan aspek data yang lebih terperinci dan lebih banyak data siri masa. Contoh lain adalah perdagangan arbitrase, yang memerlukan banyak data dari sampel backtest. Ia mungkin memerlukan data mendalam berterusan dua objek perdagangan selama lebih dari sepuluh tahun untuk mengetahui hasil statistik pengembangan dan pengurangan margin faedah mereka. Dalam artikel masa depan, saya akan memperkenalkan strategi perdagangan frekuensi tinggi dan strategi perdagangan arbitrase satu demi satu. Sila menantikannya.