___ _ _ _ _ _ _____ _ _ ____ _
|_ _|_ __ | |_ ___| | (_) __ _ ___ _ __ | |_ |_ _| __ __ _ __| (_)_ __ __ _ | __ ) ___ | |_
| || '_ | __/ _ | | |/ _` |/ _ '_ | __| | || '__/ _` |/ _` | | '_ / _` | | _ / _ | __|
| || | | | || __/ | | | (_| | __/ | | | |_ | || | | (_| | (_| | | | | | (_| | | |_) | (_) | |_
|___|_| |_|_____|_|_|_|__, |___|_| |_|__| |_||_| __,_|__,_|_|_| |_|__, | |____/ ___/ __|
|___/ |___/
₿ Ξ ₳ ₮ ✕ ◎ ● Ð Ł Ƀ Ⱥ ∞ ξ ◈ ꜩ ɱ ε ɨ Ɓ Μ Đ ⓩ Ο Ӿ Ɍ ȿ
? Sinyal Perdagangan Cerdas ? https://t.me/intelligent_trading_signals
Proyek ini bertujuan untuk mengembangkan bot perdagangan cerdas untuk perdagangan mata uang kripto otomatis menggunakan algoritma pembelajaran mesin (ML) dan rekayasa fitur yang canggih. Proyek ini menyediakan fungsi utama berikut:
Layanan persinyalan berjalan di cloud dan mengirimkan sinyalnya ke saluran Telegram ini:
? Sinyal Perdagangan Cerdas ? https://t.me/intelligent_trading_signals
Semua orang dapat berlangganan saluran tersebut untuk mendapatkan kesan tentang sinyal yang dihasilkan bot ini.
Saat ini, bot dikonfigurasi menggunakan parameter berikut:
Ada periode senyap ketika skor lebih rendah dari ambang batas dan tidak ada notifikasi yang dikirim ke saluran. Jika skor lebih besar dari ambang batas, maka setiap menit dikirimkan notifikasi seperti apa
₿ 24.518 ??? Skor: -0,26
Angka pertama adalah harga penutupan terbaru. Skor -0.26 berarti kemungkinan besar harga akan terlihat lebih rendah dari harga penutupan saat ini.
Jika skor melebihi ambang batas yang ditentukan dalam model, maka sinyal beli atau jual akan dihasilkan yang berarti ini adalah saat yang tepat untuk melakukan perdagangan. Notifikasi tersebut terlihat sebagai berikut:
? BELI: ₿ 24.033 Skor: +0,34
Agar layanan pemberi sinyal dapat berfungsi, sejumlah model ML harus dilatih dan file model tersedia untuk layanan tersebut. Semua skrip dijalankan dalam mode batch dengan memuat beberapa data masukan dan menyimpan beberapa file keluaran. Skrip batch terletak di modul scripts
.
Jika semuanya sudah dikonfigurasi maka skrip berikut harus dijalankan:
python -m scripts.download_binance -c config.json
python -m scripts.merge -c config.json
python -m scripts.features -c config.json
python -m scripts.labels -c config.json
python -m scripts.train -c config.json
python -m scripts.signals -c config.json
python -m scripts.train_signals -c config.json
Tanpa file konfigurasi skrip akan menggunakan parameter default yang berguna untuk tujuan pengujian dan tidak dimaksudkan untuk menunjukkan kinerja yang baik. Gunakan contoh file konfigurasi yang disediakan untuk setiap rilis seperti config-sample-v0.6.0.jsonc
.
Parameter konfigurasi utama untuk kedua skrip adalah daftar sumber di data_sources
. Satu entri dalam daftar ini menentukan sumber data serta column_prefix
yang digunakan untuk membedakan kolom dengan nama yang sama dari sumber berbeda.
Unduh data historis terbaru: python -m scripts.download_binance -c config.json
Gabungkan beberapa kumpulan data bersejarah menjadi satu kumpulan data: python -m scripts.merge -c config.json
Skrip ini ditujukan untuk menghitung fitur turunan:
python -m scripts.features -c config.json
Daftar fitur yang akan dihasilkan dikonfigurasi melalui daftar feature_sets
di file konfigurasi. Bagaimana fitur dihasilkan ditentukan oleh generator fitur yang masing-masing memiliki beberapa parameter yang ditentukan di bagian konfigurasinya.
talib
mengandalkan perpustakaan analisis teknis TA-lib. Berikut contoh konfigurasinya "config": {"columns": ["close"], "functions": ["SMA"], "windows": [5, 10, 15]}
itbstats
mengimplementasikan fungsi yang dapat ditemukan di tsfresh seperti scipy_skew
, scipy_kurtosis
, lsbm
(pukulan terpanjang di bawah rata-rata), fmax
(lokasi pertama maksimum), mean
, std
, area
, slope
. Berikut adalah parameter umum: "config": {"columns": ["close"], "functions": ["skew", "fmax"], "windows": [5, 10, 15]}
itblib
diimplementasikan di ITB tetapi sebagian besar fiturnya dapat dihasilkan (lebih cepat) melalui talibtsfresh
menghasilkan fungsi dari perpustakaan tsfresh Skrip ini mirip dengan pembuatan fitur karena menambahkan kolom baru ke file masukan. Namun kolom tersebut menjelaskan sesuatu yang ingin kita prediksi dan apa yang tidak diketahui saat dijalankan dalam mode online. Misalnya, kenaikan harga di masa depan:
python -m scripts.labels -c config.json
Daftar label yang akan dihasilkan dikonfigurasi melalui daftar label_sets
dalam konfigurasi. Satu kumpulan label menunjuk ke fungsi yang menghasilkan kolom tambahan. Konfigurasinya sangat mirip dengan konfigurasi fitur.
highlow
mengembalikan Benar jika harga lebih tinggi dari ambang batas yang ditentukan dalam beberapa cakrawala masa depanhighlow2
Menghitung kenaikan (penurunan) di masa depan dengan syarat tidak ada penurunan (peningkatan) yang signifikan sebelumnya. Berikut konfigurasi umumnya "config": {"columns": ["close", "high", "low"], "function": "high", "thresholds": [1.0, 1.5, 2.0], "tolerance": 0.2, "horizon": 10080, "names": ["first_high_10", "first_high_15", "first_high_20"]}
topbot
Tidak digunakan lagitopbot2
Menghitung nilai maksimum dan minimum (diberi label Benar). Setiap nilai maksimum (minimum) yang diberi label dijamin dikelilingi oleh nilai minimum (maksimum) yang lebih rendah (lebih tinggi) dari level yang ditentukan. Perbedaan minimum yang diperlukan antara minimum dan maksimum yang berdekatan ditentukan melalui parameter level
. Parameter toleransi memungkinkan untuk memasukkan juga titik-titik yang mendekati maksimum/minimum. Berikut adalah konfigurasi umum: "config": {"columns": "close", "function": "bot", "level": 0.02, "tolerances": [0.1, 0.2], "names": ["bot2_1", "bot2_2"]}
Skrip ini menggunakan fitur masukan dan label yang ditentukan untuk melatih beberapa model ML:
python -m scripts.train -c config.json
prediction-metrics.txt
dengan skor prediksi untuk semua modelKonfigurasi:
model_store.py
train_features
labels
algorithms
Tujuan dari langkah ini adalah untuk menggabungkan skor prediksi yang dihasilkan oleh algoritma berbeda untuk label berbeda. Hasilnya adalah satu skor yang seharusnya digunakan oleh aturan sinyal pada langkah berikutnya. Parameter agregasi ditentukan di bagian score_aggregation
. buy_labels
dan sell_labels
menentukan skor prediksi masukan yang diproses oleh prosedur agregasi. window
adalah jumlah langkah sebelumnya yang digunakan untuk agregasi bergulir dan combine
adalah cara dua jenis skor (beli dan label) digabungkan menjadi satu skor keluaran.
Skor yang dihasilkan oleh prosedur agregasi adalah sejumlah angka dan tujuan dari aturan sinyal adalah untuk membuat keputusan perdagangan: beli, jual, atau tidak melakukan apa pun. Parameter aturan sinyal dijelaskan di trade_model
.
Skrip ini mensimulasikan perdagangan menggunakan banyak parameter sinyal beli-jual dan kemudian memilih parameter sinyal dengan kinerja terbaik:
python -m scripts.train_signals -c config.json
Skrip ini memulai layanan yang secara berkala menjalankan satu tugas yang sama: memuat data terbaru, menghasilkan fitur, membuat prediksi, menghasilkan sinyal, memberi tahu pelanggan:
python -m service.server -c config.json
Ada dua masalah:
python -m scripts.predict_rolling -c config.json
python -m scripts.train_signals -c config.json
Parameter konfigurasi ditentukan dalam dua file:
service.App.py
di bidang config
kelas App
-c config.jsom
argumen ke layanan dan skrip. Nilai-nilai dari file konfigurasi ini akan menimpa nilai-nilai di App.config
ketika file ini dimuat ke dalam skrip atau layanan Berikut adalah beberapa bidang terpenting (di App.py
dan config.json
):
data_folder
- lokasi file data yang diperlukan hanya untuk skrip offline batchsymbol
itu adalah pasangan perdagangan seperti BTCUSDT
labels
Daftar nama kolom yang diperlakukan sebagai label. Jika Anda menentukan label baru yang digunakan untuk pelatihan dan kemudian untuk prediksi, maka Anda perlu menentukan namanya di sinialgorithms
Daftar nama algoritma yang digunakan untuk pelatihantrain_features
Daftar semua nama kolom yang digunakan sebagai fitur masukan untuk pelatihan dan prediksi.buy_labels
dan sell_labels
Daftar kolom prediksi yang digunakan untuk sinyaltrade_model
Parameter pemberi sinyal (terutama beberapa ambang batas)trader
adalah bagian untuk parameter pedagang. Saat ini, belum diuji secara menyeluruh.collector
Bagian parameter ini ditujukan untuk layanan pengumpulan data. Ada dua jenis layanan pengumpulan data: sinkron dengan permintaan reguler ke penyedia data dan layanan streaming asinkron yang berlangganan penyedia data dan mendapat notifikasi segera setelah data baru tersedia. Mereka berfungsi tetapi belum diuji secara menyeluruh dan diintegrasikan ke dalam layanan utama. Pola penggunaan utama saat ini bergantung pada pembaruan data batch manual, pembuatan fitur, dan pelatihan model. Salah satu alasan memiliki layanan pengumpulan data ini adalah 1) memiliki pembaruan yang lebih cepat 2) memiliki data yang tidak tersedia di API normal seperti buku pesanan (ada beberapa fitur yang menggunakan data ini namun tidak terintegrasi ke dalam alur kerja utama).Lihat contoh file konfigurasi dan komentar di App.config untuk detail selengkapnya.
Setiap menit, pemberi sinyal melakukan langkah-langkah berikut untuk membuat prediksi apakah harga akan naik atau turun:
Catatan:
Memulai layanan: python3 -m service.server -c config.json
Trader berfungsi tetapi belum sepenuhnya di-debug, khususnya, belum diuji stabilitas dan keandalannya. Oleh karena itu, ini harus dianggap sebagai prototipe dengan fungsionalitas dasar. Saat ini terintegrasi dengan Signaler tetapi dalam desain yang lebih baik harus menjadi layanan terpisah.
pengujian ulang
Integrasi eksternal