Dukungan data kutipan pasar sangat diperlukan ketika meneliti, merancang dan melakukan backtest strategi perdagangan. Tidak realistis untuk mengumpulkan semua data dari setiap pasar, bagaimanapun, jumlah data terlalu besar. Untuk pasar mata uang digital, platform FMZ mendukung data backtest terbatas untuk bursa dan pasangan perdagangan. Jika Anda ingin melakukan backtest beberapa bursa dan pasangan perdagangan yang sementara tidak didukung oleh platform FMZ, Anda dapat menggunakan sumber data kustom untuk backtest, tetapi premis ini mengharuskan Anda memiliki data. Oleh karena itu, ada kebutuhan mendesak untuk program pengumpulan kutipan pasar, yang dapat bertahan dan diperoleh dengan baik secara real time.
Dengan cara ini, kita dapat menyelesaikan beberapa kebutuhan, seperti:
dan banyak lagi...
kami berencana untuk menggunakan Python untuk mencapai ini, mengapa? Karena sangat nyaman
Perpustakaan Python's Pymongo
Karena Anda perlu menggunakan database untuk penyimpanan permanen.MongoDB
dan bahasa Python digunakan untuk menulis program koleksi, jadi perpustakaan driver database ini diperlukan.
Instal sajapymongo
pada Python.
Menginstal MongoDB pada perangkat hosting Contoh: MacOS menginstal MongoDB, juga sama seperti sistem windows menginstal MongoDB. Ada banyak tutorial online. Ambil instalasi sistem MacOS sebagai contoh:
Unduh Tautan unduhan:https://www.mongodb.com/download-center?jmp=nav#community
Unzip
Setelah mengunduh, buka folder:/usr/local
Mengkonfigurasi variabel lingkungan
Masukan terminal:open -e .bash_profile
, setelah membuka file, tulis:exportPATH=${PATH}:/usr/local/MongoDB/bin
Setelah menyimpan, di terminal, menggunakansource .bash_profile
untuk membuat perubahan berlaku.
Mengkonfigurasi secara manual direktori file database dan direktori log
Buat folder yang sesuai di direktori/usr/local/data/db
Aku tidak tahu.
Buat folder yang sesuai di direktori/usr/local/data/logs
.
Mengedit file konfigurasimongo.conf
:
#bind_ip_all = true # Any computer can connect
bind_ip = 127.0.0.1 # Local computer can access
port = 27017 # The instance runs on port 27017 (default)
dbpath = /usr/local/data/db # data folder storage address (db need to be created in advance)
logpath = /usr/local/data/logs/mongodb.log # log file address
logappend = false # whether to add or rewrite the log file at startup
fork = false # Whether to run in the background
auth = false # Enable user verification
Perintah:
./mongod -f mongo.conf
use admin;
db.shutdownServer();
Kolektor beroperasi sebagai strategi robot Python pada platform FMZ. Saya hanya menerapkan contoh sederhana untuk menunjukkan ide-ide dari artikel ini.
Kode program kolektor:
import pymongo
import json
def main():
Log("Test data collection")
# Connect to the database service
myDBClient = pymongo.MongoClient("mongodb://localhost:27017") # mongodb://127.0.0.1:27017
# Create a database
huobi_DB = myDBClient["huobi"]
# Print the current database table
collist = huobi_DB.list_collection_names()
Log("collist:", collist)
# Check if the table is deleted
arrDropNames = json.loads(dropNames)
if isinstance(arrDropNames, list):
for i in range(len(arrDropNames)):
dropName = arrDropNames[i]
if isinstance(dropName, str):
if not dropName in collist:
continue
tab = huobi_DB[dropName]
Log("dropName:", dropName, "delete:", dropName)
ret = tab.drop()
collist = huobi_DB.list_collection_names()
if dropName in collist:
Log(dropName, "failed to delete")
else :
Log(dropName, "successfully deleted")
# Create the records table
huobi_DB_Records = huobi_DB["records"]
# Request data
preBarTime = 0
index = 1
while True:
r = _C(exchange.GetRecords)
if len(r) < 2:
Sleep(1000)
continue
if preBarTime == 0:
# Write all BAR data for the first time
for i in range(len(r) - 1):
# Write one by one
bar = r[i]
huobi_DB_Records.insert_one({"index": index, "High": bar["High"], "Low": bar["Low"], "Open": bar["Open"], "Close": bar["Close"], "Time": bar["Time"], "Volume": bar["Volume"]})
index += 1
preBarTime = r[-1]["Time"]
elif preBarTime != r[-1]["Time"]:
bar = r[-2]
huobi_DB_Records.insert_one({"index": index, "High": bar["High"], "Low": bar["Low"], "Open": bar["Open"], "Close": bar["Close"], "Time": bar["Time"], "Volume": bar["Volume"]})
index += 1
preBarTime = r[-1]["Time"]
LogStatus(_D(), "preBarTime:", preBarTime, "_D(preBarTime):", _D(preBarTime/1000), "index:", index)
Sleep(10000)
Alamat lengkap strategi:https://www.fmz.com/strategy/199120
Buat robot strategi yang menggunakan data.
Catatan: Anda perlu memeriksa
Ini alamatnya:https://www.fmz.com/strategy/39066
import pymongo
import json
def main():
Log("Test using database data")
# Connect to the database service
myDBClient = pymongo.MongoClient("mongodb://localhost:27017") # mongodb://127.0.0.1:27017
# Create a database
huobi_DB = myDBClient["huobi"]
# Print the current database table
collist = huobi_DB.list_collection_names()
Log("collist:", collist)
# Query data printing
huobi_DB_Records = huobi_DB["records"]
while True:
arrRecords = []
for x in huobi_DB_Records.find():
bar = {
"High": x["High"],
"Low": x["Low"],
"Close": x["Close"],
"Open": x["Open"],
"Time": x["Time"],
"Volume": x["Volume"]
}
arrRecords.append(bar)
# Use the line drawing library to draw the obtained K-line data
ext.PlotRecords(arrRecords, "K")
LogStatus(_D(), "records length:", len(arrRecords))
Sleep(10000)
Program ini tidak mencatat data BAR saat ini. Program ini mengumpulkan K-line BAR dalam keadaan selesai. Jika data BAR real-time saat ini diperlukan, data tersebut dapat dimodifikasi sedikit.
Kode contoh saat ini hanya untuk demonstrasi. Saat mengakses catatan data dalam tabel di database, semua diperoleh. Dengan cara ini, seiring waktu untuk mengumpulkan data meningkat, semakin banyak data yang dikumpulkan. Semua kueri akan mempengaruhi kinerja sampai batas tertentu, dan dapat dirancang. Hanya data yang lebih baru dari data saat ini yang ditanyakan dan ditambahkan ke data saat ini.
menjalankan program docker
Pada perangkat di mana docker berada, jalankan layanan database MongoDB
Kolektor berjalan untuk mengumpulkan pasangan perdagangan BTC_USDT dari FMZ Platform Simulasi pertukaran WexApp marekt kutipan: WexApp Alamat: https://wex.app/trade?currency=BTC_USDT
Robot A menggunakan data database:
Robot B menggunakan data database:
Halaman WexApp:
Seperti yang Anda lihat pada gambar, robot dengan ID yang berbeda berbagi data K-line menggunakan satu sumber data.
Mengandalkan fungsi kuat dari platform FMZ, kita dapat dengan mudah mengumpulkan data K-line pada setiap siklus. Sebagai contoh, saya ingin mengumpulkan K-line 3 menit, bagaimana jika pertukaran tidak memiliki K-line 3 menit?
Kami memodifikasi konfigurasi robot kolektor, periode garis K diatur menjadi 3 menit, dan platform FMZ akan secara otomatis mensintesis garis K 3 menit ke program kolektor.
Kami menggunakan parameter untuk menghapusthe name of the table
, setting: [
Memulaicollector program
, dan kemudian mulai kembalistrategy robot using the data
.
Anda dapat melihat grafik garis K yang digambar, interval antara BAR adalah 3 menit, dan setiap BAR adalah garis K dengan periode 3 menit.
Dalam edisi berikutnya, kita akan mencoba untuk menerapkan persyaratan sumber data kustom.
Terima kasih sudah membaca!