Analisis Data Seri Waktu dan Tes Balik Data Tick

Penulis:Lydia, Dibuat: 2023-01-06 15:27:16, Diperbarui: 2023-09-20 10:12:15

img

Analisis Data Seri Waktu dan Tes Balik Data Tick

Data deret waktu

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:

img

Seperti yang dapat Anda lihat, tanggal berada pada sumbu x, dan harga ditampilkan pada sumbu y. Dalam hal ini, interval periode waktu kontinu berarti bahwa hari-hari pada sumbu x dipisahkan oleh 14 hari: perhatikan perbedaan antara 7 Maret 2005 dan titik berikutnya, 31 Maret 2005, 5 April 2005, dan 19 April 2005.

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.

Apa itu data Tick?

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.

Ketik data pada FMZ Quant

Meskipun data Tick domestik bukan Tick nyata, itu bisa sangat dekat dan memulihkan realitas setidaknya dengan menggunakan data ini untuk backtesting.

img

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.

img

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.

Menyiapkan lingkungan kerja

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.

  • Pengembangan sistem docker dari platform FMZ Quant Ada dua metode untuk menyebarkan docker:

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.

img

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:

img

  • Hubungan antara konsep sistem robot dan docker Seperti yang disebutkan di atas, docker adalah seperti sistem docker, dan sistem docker adalah seperti seperangkat standar. kita telah menyebarkan seperangkat standar ini. selanjutnya, kita perlu menghasilkan instance untuk standar ini, yang merupakan robot.

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.

img

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.

Mengimplementasikan strategi EMA sederhana di Python

Kami telah menyebutkan konsep data deret waktu dan data Tick di atas. selanjutnya, kami menggunakan strategi EMA sederhana untuk menghubungkan kedua konsep.

  • Prinsip dasar dari strategi EMA

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.
  • Pengujian strategi EMA Pada halaman pengeditan strategi, kita telah selesai menulis strategi. Selanjutnya, kita perlu melakukan backtesting strategi untuk melihat bagaimana kinerja di pasar historis. Backtesting memainkan peran penting dalam setiap pengembangan strategi kuantitatif, tetapi hanya dapat digunakan sebagai referensi penting. Backtesting tidak sama dengan jaminan keuntungan, karena pasar terus berubah, dan backtesting hanyalah tindakan hindsight, yang masih termasuk dalam kategori induksi, pasar adalah deduktif.

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.

img

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.


Berkaitan

Lebih banyak