
Dalam perdagangan terprogram dan perdagangan kuantitatif, meneliti strategi, merancang strategi, dan analisis pengujian ulang tidak dapat dipisahkan dari dukungan data pasar. Tidak realistis untuk mengumpulkan semua data pasar, lagipula, jumlah datanya terlalu besar. Untuk pasar mata uang digital, Platform Perdagangan Kuantitatif Inventor mendukung data pengujian ulang untuk bursa dan pasangan perdagangan terbatas. Jika Anda ingin menguji ulang beberapa bursa dan pasangan perdagangan yang saat ini tidak mendukung data. Anda dapat menggunakan sumber data khusus untuk pengujian ulang, tetapi ini mengharuskan Anda memiliki data Anda sendiri. Oleh karena itu, ada kebutuhan mendesak untuk program pengumpulan informasi pasar yang dapat disimpan secara persisten dan sebaiknya diperoleh secara real-time.
Ini menyelesaikan beberapa persyaratan, seperti:
Berencana menggunakan Python untuk mengimplementasikannya, mengapa? Karena nyaman :) Jika Anda punya kebutuhan, ambil tindakan!
Karena basis data dibutuhkan untuk penyimpanan persisten. Penggunaan pemilihan dataMongoDB, menggunakan bahasa Python untuk menulis program koleksi, sehingga pustaka driver basis data ini diperlukan.
Instalasi pada PythonpymongoItu saja.
Misalnya: Instal MongoDB di MAC. Tentu saja, menginstal MongoDB di WIN sama saja. Ada banyak tutorial daring. Ambil contoh instalasi di Apple MAC:
Unduh Tautan unduhan: https://www.mongodb.com/download-center?jmp=nav#community
Buka ritsleting
Setelah mengunduh, ekstrak ke direktori:/usr/local。
Mengonfigurasi variabel lingkungan
Masukan terminal:open -e .bash_profile, setelah membuka file tersebut, tulis:export PATH=${PATH}:/usr/local/MongoDB/bin
Setelah menyimpan, gunakan terminalsource .bash_profileBuat perubahan tersebut berlaku.
Konfigurasikan direktori file database dan direktori log secara manual
Buat Direktori/usr/local/data/dbFolder yang sesuai di .
Buat Direktori/usr/local/data/logsFolder yang sesuai di .
Mengedit File 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 # 开启校验用户
Memesan:
./mongod -f mongo.conf
use admin;
db.shutdownServer();
Kolektor berjalan sebagai strategi robot Python pada Platform Perdagangan Kuantitatif Inventor. Karena keterbatasan kemampuan saya dalam Python, saya hanya menerapkan contoh sederhana untuk menunjukkan gagasan artikel ini.
Kode strategi kolektor:
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 kebijakan lengkap:Link
Buat bot strategis yang menggunakan data.
Catatan: Anda perlu memeriksaPerpustakaan gambar garisJika Anda tidak memilikinya, Anda dapat menyalinnya ke perpustakaan 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)
Dapat dilihat bahwa kode robot strategi yang menggunakan data tidak mengakses antarmuka pertukaran apa pun. Ia memperoleh data dengan mengakses basis data. Program pengumpul pasar tidak mencatat data BAR saat ini. Ia mengumpulkan BAR K-line di status selesai. Jika BAR saat ini perlu diperbarui secara real time, data dapat dimodifikasi sedikit. Contoh kode saat ini hanya untuk demonstrasi. Saat mengakses catatan data dalam tabel di database, semua catatan data diperoleh. Seiring bertambahnya waktu pengumpulan data, semakin banyak data yang dikumpulkan. Menanyakan semua data akan memengaruhi kinerja sampai batas tertentu. Anda dapat mendesain Hanya kueri data yang lebih baru daripada data saat ini dan menambahkannya ke data saat ini.
Jalankan program host

Di perangkat host, jalankanMongoDBLayanan Basis Data
./mongod -f mongo.conf

Kolektor berjalan untuk mengumpulkan disk simulasi platform perdagangan kuantitatif penemuwexAppdariBTC_USDTPasangan Perdagangan:
alamat:wexApp

Robot A menggunakan data database:

Robot B menggunakan data database:

wexApphalaman:

Seperti yang dapat dilihat pada gambar, robot dengan ID berbeda berbagi data K-line dari sumber data yang sama.
Mengandalkan fungsi canggih dari Platform Perdagangan Kuantitatif Inventor, kami dapat dengan mudah mengumpulkan data K-line pada periode apa pun. Misalnya, saya ingin mengumpulkan K-line 3 menit, apa yang harus saya lakukan jika bursa tidak memiliki K-line 3 menit? Tidak apa-apa, itu dapat dicapai dengan mudah.
Kami memodifikasi konfigurasi robot pengumpul dan menetapkan periode K-line menjadi 3 menit. Platform Perdagangan Kuantitatif Inventor akan secara otomatis mensintesis K-line 3 menit untuk program pengumpul.

Kami menggunakan parameter删除表的名称,mendirikan:["records"]Hapus tabel data K-line 1 menit yang dikumpulkan sebelumnya. Bersiap untuk mengumpulkan data garis K 3 menit.
rintisan收集器程序, mulai ulang使用数据的策略机器人。


Dari diagram garis K yang digambar, Anda dapat melihat bahwa interval antar BAR adalah 3 menit, dan setiap BAR adalah kolom garis K dengan periode 3 menit.
Pada edisi berikutnya, kami akan mencoba menerapkan persyaratan sumber data khusus. Terima kasih sudah membaca