Jaringan saraf dan perdagangan. Bagian 2: Perlengkapan DIY

Di artikel terakhir, saya menjelaskan bagaimana saya berhasil mendapatkan prediksi tren dari jaringan saraf di pasar nyata. Artikel tersebut membangkitkan minat, namun ternyata pertanyaan "Di mana buktinya?" Tidak ada Jawaban. Memang, topik jaringan saraf dalam perdagangan banyak dibahas, ada publikasi, cabang di forum profesional yang dikhususkan untuk itu. Tetapi tidak peduli seberapa banyak Anda membenamkan diri dalam topik tersebut, tidak peduli seberapa banyak Anda berkomunikasi dengan para ahli, kesan tetap bahwa semua ini adalah semacam ilusi yang sulit dipahami. Tidak ada yang benar-benar berfungsi, tidak ada yang, bahkan dari jarak jauh, tetapi benar-benar dapat menghubungkan jaringan saraf dan perkiraan pergerakan harga. Oleh karena itu, pendapat masyarakat yang beralasan kuat bahwa pergerakan harga pada prinsipnya tidak dapat diprediksi, dan semua pembicaraan ini adalah tentang tidak ada apa-apa.



Saya mengusulkan untuk menghilangkan keraguan ini sekali dan untuk semua dan untuk mentransfer wacana dari area “dapat memprediksi atau tidak” ke area “memprediksi baik atau buruk”. Dan kami akan melakukannya dengan cara yang sederhana, cepat, dan visual. Saya akan memberikan alat yang sudah jadi dan semua orang bisa mendapatkan hasilnya di komputer mereka. Proyek gratis GoogleColaboratory akan membantu kami dalam hal ini. Ini adalah platform terbuka untuk pengembangan kolaboratif, semua penghitungan dilakukan di server Google, semua interaksi melalui browser, pendaftaran tidak diperlukan.



Kode untuk pekerjaan kami terbuka dan sudah dimuat di GoogleColab. Hasil pelatihan jaringan saraf untuk masing-masing individu. Ini karena bobot awal didistribusikan secara acak dan hasilnya sedikit berbeda. Selain itu, perlu diingat bahwa riwayat kutipan adalah data yang sangat berisik, jadi kualitas pelatihannya rendah, tetapi cukup untuk melihat bagaimana jaringan saraf akan memprediksi. Prakiraan harus kira-kira pada tingkat indikator yang baik.



Satu-satunya tempat di mana kami akan mempersingkat jalur kami adalah mengumpulkan data tentang sejarah pasangan perdagangan. Pengumpulan dilakukan oleh aplikasi untuk MetaTrader5, prosesnya tidak rumit, tetapi membutuhkan keterampilan dalam bekerja dengan penguji di MetaTrader5. Instruksi terperinci akan mengarah ke artikel terpisah, oleh karena itu, kami menggunakan data yang telah disiapkan sebelumnya untuk pasangan Euro / Dolar (bagi mereka yang menggunakan MT5, tautan ke Pakar ada di akhir artikel). Dimungkinkan untuk memastikan bahwa data yang disiapkan sebelumnya tidak "mengintip ke depan" dan tidak menyarankan jaringan saraf pada tahap terakhir, ketika kita beralih ke pengujian pasar nyata.



Ayo mulai ...



GoogleColaboratory



"Laptop" kami di GoogleColab dapat ditemukan di tautan ini . Jangan lupa untuk masuk ke akun Google (atau Gmail) Anda terlebih dahulu.



Salin "laptop" ke diri Anda sendiri.



gambar



Sekarang Anda perlu menjalankan semua blok secara berurutan dari atas ke bawah.



1. Menginstal perpustakaan



Langkah ini akan menginstal TensorFlow dan library lainnya. Prosesnya akan berakhir dengan sendirinya, tidak ada yang perlu dilakukan.



gambar



2. Memuat dan menyiapkan data untuk pelatihan



Pada tahap ini, kumpulan data akan dimuat, serta kumpulan data terpisah untuk pelatihan dan pengujian akan disiapkan. Dataset dikumpulkan untuk pasangan EURUSD untuk periode dari awal 2015 hingga saat ini, langkah pengumpulan datanya adalah kandil M6. 2 minggu terakhir - situs uji. Data dalam kumpulan data adalah kumpulan ratusan ribu baris, yang masing-masing adalah seperti ini



0.32,0.26,0.00,0.43 ... 0.66,0.25,0.24,0.05,0,1,1600144440,1.189240


Prediktor dipisahkan oleh koma, bidang 3 dan 4 dari ujung - ini adalah jawaban yang benar di mana tren pergi (0,1 - turun; 1,0 - naik). Bidang kedua dari ujung adalah id kandil. Yang terakhir adalah harga pada pembukaan candle. Dua bidang terakhir tidak digunakan untuk pelatihan.



3. Pelatihan dan pengujian model



Biarkan setelan jaringan neural default pada peluncuran pertama. Pelatihan akan berlangsung dalam lima lintasan sampai diperoleh hasil yang dapat diterima. Jika pelatihan berhasil, tabel seperti ini akan muncul:



+------------+---------+----------+-------------+------------+
|   |  |  |  (%) |  (%) 
+------------+---------+----------+-------------+------------+
|     0      |   7174  |   7173   |      50     |   100.0    |
|     2      |   6956  |   6731   |      50     |    95.4    |
|     4      |   6430  |   6224   |      50     |    88.2    |
|     6      |   5867  |   5630   |      51     |    80.1    |
|     8      |   5250  |   5065   |      50     |    71.9    |
|     10     |   4636  |   4450   |      51     |    63.3    |
|     12     |   3964  |   3772   |      51     |    53.9    |
|     14     |   3330  |   3152   |      51     |    45.2    |
|     16     |   2758  |   2539   |      52     |    36.9    |
|     18     |   2198  |   2012   |      52     |    29.3    |
|     20     |   1700  |   1544   |      52     |    22.6    |
|     22     |   1298  |   1167   |      52     |    17.2    |
|     24     |   958   |   825    |      53     |    12.4    |
|     26     |   699   |   517    |      57     |    8.5     |
|     28     |   446   |   278    |      61     |    5.0     |
|     30     |   246   |   127    |      65     |    2.6     |
+------------+---------+----------+-------------+------------+


Respons jaringan saraf adalah klasifikasi biner di mana [0 1] adalah "turun" dan [1 0] adalah "naik". Tetapi jaringan saraf tidak pernah merespons dengan nilai bilangan bulat, tanggapannya, tergantung pada tingkat "keyakinan", dapat berupa tipe [0,4 0,6]. Dalam tanggapan ini, jaringan saraf yakin bahwa harga akan turun, tetapi tidak terlalu yakin, dan dalam tanggapan [0,1 0,9] juga turun, tetapi ada kepercayaan yang jauh lebih besar. Seperti inilah array tanggapan nyata itu:



[[0.5084921  0.49150783]
 [0.3930727  0.6069273 ]
 [0.4930727  0.50692725]
 ...
 [0.5189831  0.48101687]
 [0.27955987 0.7204401 ]
 [0.476914   0.5230861 ]]


Bidang tabel "Respons jaringan" adalah perbedaan dalam respons biner ini dikalikan dengan 100. Jelas, perbedaan ini mencirikan "kepercayaan" jaringan dalam perkiraannya. Hasilnya, setelah dikalikan dengan 100, kita memiliki nilai dalam rentang 0 sampai 100. Sekarang Anda tidak dapat mengambil semua jawaban, tetapi hanya memilih jawaban yang "keyakinan" -nya dimiliki jaringan neural. Untuk memahami seberapa besar jawaban mempengaruhi hasil ramalan, bagian tes diperiksa untuk kebenaran ramalan di berbagai tingkat "keyakinan" ini. Setiap baris tabel adalah pemeriksaan untuk nilai baru yang lebih tinggi dari Respon Jaringan. Semakin tinggi filter "Respons Jaringan", semakin sedikit respons, tetapi semakin baik. Ini dapat dilihat di kolom "Menang" dan "Kalah". Proses berhenti ketika tanggapan (Sinyal) menjadi kurang dari 1% dari semua data uji.



Jika jaringan belum dilatih dalam satu lintasan, cukup mulai ulang blok ini (Anda tidak perlu memuat ulang data).



4. Hasil pada grafik perdagangan



Jalankan blok ini. Semuanya jelas di sini, pada grafik pasangan perdagangan dari set pengujian, sinyal jaringan saraf ditarik, hijau ke atas, merah ke bawah.



gambar



5. Menguji di pasar nyata



Selama pemeriksaan ini, data untuk jaringan neural dimuat, yang dibuat saat candle baru ditambahkan secara real time. Itu. bagian terakhir dari data yang diterima dibuat pada pembukaan kandil, dalam kasus kami, kandil nol M6. Data ini tentu saja tidak mengandung jawaban yang benar, jaringan diundang untuk membuat ramalan yang sebenarnya. Anda dapat memastikan bahwa data tidak berubah saat berpindah ke riwayat dengan menghapus komentar pada baris print (data) dan membandingkan nilai baris tertentu saat masuk dan setelah beberapa saat.



def get_from_ennro(symbol, tfm, dim, lim):
    ...
    # print(data)
    ...


Mungkin tidak ada sinyal di pasar nyata. Ini terjadi ketika volatilitas lebih kecil daripada di area pengujian, dalam hal ini jaringan saraf tidak melihat titik masuk.



kesimpulan



Iya! Kualitas prakiraan tidak sesuai untuk posisi pembukaan. Tetapi kami tidak menetapkan tugas seperti itu, yang utama adalah bahwa jaringan saraf mempelajari dan mengenali sesuatu pada grafik, menebak trennya, ramalannya jelas tidak kacau. Harap diperhatikan bahwa kami menggunakan konfigurasi jaringan neural paling sederhana - Sequential Dense dengan 2 lapisan dan hanya 10 epoch untuk pelatihan. Ada ruang untuk pengembangan lebih lanjut.



Sudah ada solusi yang secara kualitatif meningkatkan ramalan, tetapi tentang itu di artikel berikutnya.



PS Bagi mereka yang ingin mengumpulkan dan menyiapkan data untuk setiap pasangan di MetaTrader5 sendiri, baca di sini dan gunakan GoogleColab, yang diberikan di sini .



All Articles