
Dalam perdagangan program dan perdagangan kuantitatif, menyelidik strategi, mereka bentuk strategi, dan analisis ujian belakang tidak dapat dipisahkan daripada sokongan data pasaran. Adalah tidak realistik untuk mengumpul semua data di pasaran, lagipun, jumlah data terlalu besar. Untuk pasaran mata wang digital, Platform Dagangan Kuantitatif Pencipta menyokong data ujian belakang untuk pertukaran terhad dan pasangan dagangan. Jika anda ingin menguji belakang beberapa bursa dan pasangan dagangan yang tidak menyokong data pada masa ini. Anda boleh menggunakan sumber data tersuai untuk ujian balik, tetapi ini memerlukan anda mempunyai data anda sendiri. Oleh itu, terdapat keperluan mendesak untuk program pengumpulan maklumat pasaran yang boleh disimpan secara berterusan dan sebaik-baiknya diperoleh dalam masa nyata.
Ini menyelesaikan beberapa keperluan, seperti:
Merancang untuk menggunakan Python untuk melaksanakannya, mengapa? Sebab senang :) Jika anda mempunyai keperluan, ambil tindakan!
Kerana pangkalan data diperlukan untuk penyimpanan berterusan. Penggunaan pemilihan dataMongoDB, gunakan bahasa Python untuk menulis program pengumpulan, jadi perpustakaan pemacu pangkalan data ini diperlukan.
Pemasangan pada PythonpymongoItu sahaja.
Sebagai contoh: Pasang MongoDB pada MAC Sudah tentu, memasang MongoDB pada WIN adalah serupa. Terdapat banyak tutorial dalam talian Ambil pemasangan pada Apple MAC sebagai contoh.
muat turun Muat turun pautan: https://www.mongodb.com/download-center?jmp=nav#community
Buka zip
Selepas memuat turun, unzip ke direktori:/usr/local。
Mengkonfigurasi pembolehubah persekitaran
Input terminal:open -e .bash_profile, selepas membuka fail, tulis:export PATH=${PATH}:/usr/local/MongoDB/bin
Selepas menyimpan, gunakan terminalsource .bash_profileJadikan perubahan itu berkesan.
Konfigurasikan direktori fail pangkalan data dan direktori log secara manual
Buat Direktori/usr/local/data/dbFolder yang sepadan dalam .
Buat Direktori/usr/local/data/logsFolder yang sepadan dalam .
Mengedit Fail Konfigurasimongo.conf:
#bind_ip_all = true # 任何机器可以连接
bind_ip = 127.0.0.1 # 本机可以访问
port = 27017 # 实例运行在27017端口(默认)
dbpath = /usr/local/data/db # 数据文件夹存放地址(db要预先创建)
logpath = /usr/local/data/logs/mongodb.log # 日志文件地址
logappend = false # 启动时 添加还是重写日志文件
fork = false # 是否后台运行
auth = false # 开启校验用户
Pesanan:
./mongod -f mongo.conf
use admin;
db.shutdownServer();
Pengumpul berjalan sebagai strategi robot Python pada Platform Dagangan Kuantitatif Pencipta. Oleh kerana penguasaan Python saya yang terhad, saya hanya melaksanakan contoh mudah untuk menunjukkan idea artikel ini.
Kod strategi pengumpul:
import pymongo
import json
def main():
Log("测试数据收集")
# 连接数据库服务
myDBClient = pymongo.MongoClient("mongodb://localhost:27017") # mongodb://127.0.0.1:27017
# 创建数据库
huobi_DB = myDBClient["huobi"]
# 打印目前数据库表
collist = huobi_DB.list_collection_names()
Log("collist:", collist)
# 检测是否删除表
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, "删除:", dropName)
ret = tab.drop()
collist = huobi_DB.list_collection_names()
if dropName in collist:
Log(dropName, "删除失败")
else :
Log(dropName, "删除成功")
# 创建records表
huobi_DB_Records = huobi_DB["records"]
# 请求数据
preBarTime = 0
index = 1
while True:
r = _C(exchange.GetRecords)
if len(r) < 2:
Sleep(1000)
continue
if preBarTime == 0:
# 首次写入所有BAR数据
for i in range(len(r) - 1):
# 逐根写入
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 polisi penuh:Pautan
Buat bot strategik yang menggunakan data.
Nota: Anda perlu menyemakPerpustakaan lukisan garisanJika anda tidak memilikinya, anda boleh menyalinnya ke pustaka strategi anda sendiri.

import pymongo
import json
def main():
Log("测试使用数据库数据")
# 连接数据库服务
myDBClient = pymongo.MongoClient("mongodb://localhost:27017") # mongodb://127.0.0.1:27017
# 创建数据库
huobi_DB = myDBClient["huobi"]
# 打印目前数据库表
collist = huobi_DB.list_collection_names()
Log("collist:", collist)
# 查询数据打印
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)
# 使用画线类库,把取到的K线数据画出来
ext.PlotRecords(arrRecords, "K")
LogStatus(_D(), "records length:", len(arrRecords))
Sleep(10000)
Ia boleh dilihat bahawa kod robot strategi yang menggunakan data tidak mengakses mana-mana antara muka pertukaran Ia memperoleh data dengan mengakses pangkalan data Program pengumpul pasaran tidak merekodkan data BAR semasa keadaan siap. Jika BAR semasa perlu dikemas kini dalam masa nyata, Data boleh diubah suai sedikit. Kod contoh semasa hanya untuk demonstrasi Apabila mengakses rekod data dalam jadual dalam pangkalan data, semua rekod data diperolehi Apabila masa pengumpulan data meningkat, semakin banyak data dikumpul pada tahap tertentu Anda boleh mereka bentuk Hanya data pertanyaan yang lebih baharu daripada data semasa dan menambahnya pada data semasa.
Jalankan program hos

Pada peranti hos, jalankanMongoDBPerkhidmatan Pangkalan Data
./mongod -f mongo.conf

Pengumpul berlari untuk mengumpul cakera simulasi platform dagangan kuantitatif penciptawexAppdaripadaBTC_USDTPasangan Dagangan:
alamat:wexApp

Robot A menggunakan data pangkalan data:

Robot B menggunakan data pangkalan data:

wexApphalaman:

Seperti yang dapat dilihat dalam rajah, robot dengan ID berbeza berkongsi data K-line daripada sumber data yang sama.
Bergantung pada fungsi berkuasa Platform Dagangan Kuantitatif Pencipta, kami boleh mengumpul data K-line dengan mudah untuk sebarang tempoh. Sebagai contoh, saya ingin mengumpul 3 minit K-line, apakah yang perlu saya lakukan jika pertukaran tidak mempunyai 3 minit K-line? Tidak mengapa, ia boleh dicapai dengan mudah.
Kami mengubah suai konfigurasi robot pengumpul dan menetapkan tempoh K-line kepada 3 minit Platform Dagangan Kuantitatif Inventor akan secara automatik mensintesis garis K 3 minit untuk program pengumpul.

Kami menggunakan parameter删除表的名称, sediakan:["records"]Padamkan jadual data K-line 1 minit yang dikumpul sebelum ini. Bersedia untuk mengumpul data K-line selama 3 minit.
mulakan收集器程序, mulakan semula使用数据的策略机器人。


Daripada carta garis K yang dilukis, anda boleh melihat bahawa selang antara BAR ialah 3 minit dan setiap BAR ialah lajur garis K dengan tempoh 3 minit.
Dalam isu seterusnya, kami akan cuba melaksanakan keperluan sumber data tersuai. Terima kasih kerana membaca