Sokongan data sebut harga pasaran sangat diperlukan ketika meneliti, merancang dan menguji semula strategi perdagangan. Tidak realistik untuk mengumpul semua data dari setiap pasaran, bagaimanapun, jumlah data terlalu besar. Untuk pasaran mata wang digital, platform FMZ menyokong data backtest terhad untuk bursa dan pasangan perdagangan. Jika anda ingin menguji semula beberapa bursa dan pasangan perdagangan yang sementara tidak disokong oleh platform FMZ, anda boleh menggunakan sumber data tersuai untuk backtest, tetapi premis ini memerlukan anda mempunyai data. Oleh itu, terdapat keperluan mendesak untuk program pengumpulan sebut harga pasaran, yang dapat berterusan dan diperoleh dengan baik dalam masa nyata.
Dengan cara ini, kita boleh menyelesaikan beberapa keperluan, seperti:
dan banyak lagi...
Kami merancang untuk menggunakan Python untuk mencapai ini, mengapa?
Perpustakaan Python's Pymongo
Kerana anda perlu menggunakan pangkalan data untuk penyimpanan berterusan.MongoDB
dan bahasa Python digunakan untuk menulis program koleksi, jadi perpustakaan pemacu pangkalan data ini diperlukan.
Hanya memasangpymongo
pada Python.
Masang MongoDB pada peranti hosting Contohnya: MacOS memasang MongoDB, juga sama seperti sistem windows memasang MongoDB. Terdapat banyak tutorial dalam talian. Ambil pemasangan sistem MacOS sebagai contoh:
Muat turun Pautan muat turun:https://www.mongodb.com/download-center?jmp=nav#community
Unzip
Selepas memuat turun, buka zip ke direktori:/usr/local
Mengatur pembolehubah persekitaran
Masukan terminal:open -e .bash_profile
, selepas membuka fail, tulis:exportPATH=${PATH}:/usr/local/MongoDB/bin
Selepas menyimpan, di terminal, menggunakansource .bash_profile
untuk membuat perubahan itu berkuat kuasa.
Mengatur secara manual direktori fail pangkalan data dan direktori log
Buat folder yang sepadan dalam direktori/usr/local/data/db
.
Buat folder yang sepadan dalam direktori/usr/local/data/logs
.
Mengedit fail 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();
Pengumpul beroperasi sebagai strategi robot Python di platform FMZ. Saya hanya melaksanakan contoh mudah untuk menunjukkan idea artikel ini.
Kod program pengumpul:
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 strategi penuh:https://www.fmz.com/strategy/199120
Buat robot strategi yang menggunakan data.
Nota: Anda perlu menyemak
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)
Ia boleh dilihat bahawa kod robot strategi yang menggunakan data tidak mengakses sebarang antara muka pertukaran. Data diperoleh dengan mengakses pangkalan data. Program pengumpul pasaran tidak merakam data BAR semasa. Ia mengumpul BAR K-line dalam keadaan lengkap. Jika data BAR masa nyata semasa diperlukan, ia boleh diubah suai sedikit.
Kod contoh semasa hanya untuk demonstrasi. Apabila mengakses rekod data dalam jadual dalam pangkalan data, semua diperoleh. Dengan cara ini, apabila masa untuk mengumpul data meningkat, lebih banyak data dikumpulkan. Semua pertanyaan akan mempengaruhi prestasi ke tahap tertentu, dan boleh direka. Hanya data yang lebih baru daripada data semasa yang ditanyakan dan ditambahkan ke data semasa.
menjalankan program docker
Pada peranti di mana docker terletak, jalankan perkhidmatan pangkalan data MongoDB
Pengumpul berjalan untuk mengumpul pasangan dagangan BTC_USDT Platform FMZ WexApp pertukaran simulasi kutipan marekt: Alamat WexApp: https://wex.app/trade?currency=BTC_USDT
Robot A menggunakan data pangkalan data:
Robot B menggunakan data pangkalan data:
Halaman WexApp:
Seperti yang anda lihat dalam gambar, robot dengan ID yang berbeza berkongsi data K-line menggunakan satu sumber data.
Mengandalkan fungsi kuat platform FMZ, kita boleh dengan mudah mengumpul data K-line pada sebarang kitaran. Sebagai contoh, saya mahu mengumpul K-line 3 minit, bagaimana jika pertukaran tidak mempunyai K-line 3 minit?
Kami mengubahsuai konfigurasi robot pengumpul, tempoh garis K ditetapkan kepada 3 minit, dan platform FMZ akan secara automatik mensintesis garis K 3 minit ke program pengumpul.
Kami menggunakan parameter untuk memadamthe name of the table
, tetapan: [
Mulakancollector program
, dan kemudian mulakan semulastrategy robot using the data
.
Anda boleh lihat carta K-line digambar, selang antara BAR adalah 3 minit, dan setiap BAR adalah bar K-line dengan tempoh 3 minit.
Dalam isu seterusnya, kita akan cuba untuk melaksanakan keperluan sumber data tersuai.
Terima kasih kerana membaca!