Tangan-tangan mengajarkan Anda untuk membuat pengumpul data

Penulis:Mimpi kecil, Dibuat: 2020-04-16 12:44:03, Diperbarui: 2023-10-11 19:57:00

img

Untuk perdagangan terprogram, strategi penelitian, strategi desain, analisis retrospeksi dalam perdagangan kuantitatif sangat diperlukan dukungan data pasar. Semua data di pasar dikumpulkan dan tidak realistis, karena jumlah data terlalu besar. Untuk pasar mata uang digital, penemu mendukung pertukaran terbatas, data retrospeksi pasangan perdagangan di platform perdagangan kuantitatif. Jika Anda ingin retrospeksi beberapa pertukaran yang sementara tidak mendukung data, pasangan perdagangan.

Dengan demikian, beberapa kebutuhan dapat diselesaikan, seperti:

  • Sumber data dapat diberikan kepada beberapa robot, yang dapat mengurangi frekuensi setiap robot mengakses antarmuka pertukaran.
  • Anda dapat membuat robot memulai, mendapatkan data K-line dengan jumlah K-line BAR yang cukup, dan tidak perlu khawatir tentang jumlah K-line BAR yang tidak cukup saat robot dimulai.
  • Data pasar mata uang kecil dapat dikumpulkan dan digunakan untuk memberikan sumber data kustom kepada penemu untuk mengkuantifikasi sistem retesting platform perdagangan, sehingga menggunakan strategi retesting sistem retesting.
  • Tunggu...

Perencanaan implementasi menggunakan Python, mengapa? karena sangat mudah:) Jika ada permintaan, lakukan!

Siap

  • Perpustakaan PyMongo untuk Python

    Karena untuk menggunakan database, Anda harus menyimpan data secara permanen.MongoDB, yang ditulis dalam bahasa Python, sehingga membutuhkan driver untuk database ini. Instal di PythonpymongoTidak ada yang salah.

  • Menginstal MongoDB pada perangkat yang dimiliki oleh host

    Contoh: Menginstal MongoDB di Mac, tentu saja sistem WIN menginstal MongoDB juga hampir sama, ada banyak tutorial online untuk menginstal di sistem Mac Apple sebagai contoh:

  • Unduh Link untuk download:https://www.mongodb.com/download-center?jmp=nav#community

  • Pengurangan kompresi Setelah diunduh, dekompres ke direktori:/usr/local

  • Mengkonfigurasi variabel lingkungan Input terminal:open -e .bash_profileSetelah membuka file, tulis:export PATH=${PATH}:/usr/local/MongoDB/binSetelah disimpan, digunakan secara terminalsource .bash_profileUntuk membuat perubahan tersebut berlaku.

  • Mengkonfigurasi direktori file database dan direktori log secara manual Membuat direktori/usr/local/data/dbDi sini Anda akan menemukan beberapa hal yang menarik. Membuat direktori/usr/local/data/logsDi sini Anda akan menemukan beberapa hal yang menarik.

  • Mengedit profilmongo.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                               # 开启校验用户
    
  • Mengoperasikan layanan MongoDB

    Perintah:

    ./mongod -f mongo.conf
    
  • Penghentian layanan

    use admin;
    db.shutdownServer();
    

Mengimplementasikan proses pengumpul

Pengumpul berjalan dalam bentuk strategi robot Python pada platform perdagangan kuantitatif para penemu. Karena tingkat Python sendiri terbatas, hanya satu contoh sederhana yang diterapkan untuk menunjukkan gagasan dalam artikel ini.

Kode kebijakan 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)
        

Di sini, Anda dapat menemukan informasi lengkap tentang strategi ini:Tautan

Menggunakan data

Robot-robot yang menggunakan data untuk membuat strategi. Catatan: Harus di pilih"Layanan Kelas Gambar"Jika tidak, Anda dapat menyalin salah satu ke dalam toolbar Anda sendiri.img

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)

Anda dapat melihat bahwa strategi yang menggunakan data dalam kode robot tidak mengakses antarmuka bursa apa pun, mendapatkan data dengan mengakses database, program pengumpul pasar tidak mencatat data BAR saat ini, mengumpulkan data BAR K baris yang telah selesai, hanya sedikit dimodifikasi jika Anda membutuhkan data BAR saat ini secara real time. Contoh kode saat ini, hanya untuk menunjukkan bahwa semua catatan data dalam tabel yang diakses dalam database diambil, sehingga seiring waktu pengumpulan data meningkat, semakin banyak data yang dikumpulkan, semua kueri yang keluar akan mempengaruhi kinerja hingga batas tertentu, dapat dirancang untuk hanya menanyakan data baru dari data saat ini, yang ditambahkan ke data saat ini.

Mengoperasikan

Mengoperasikan program administratorimg

Perangkat yang berada di host akan berjalan.MongoDBLayanan Database./mongod -f mongo.conf img

Pemasok yang berjalan, simulasi dari inventor yang mengumpulkan platform perdagangan kuantitatifwexAppPerbedaanBTC_USDTPasangan transaksi: Alamat:wexApp img

Robot yang menggunakan data database A:img

Robot B menggunakan data database:img

wexAppHalaman:img

Seperti yang dapat dilihat pada gambar, robot dengan ID yang berbeda berbagi data K-line yang menggunakan satu sumber data.

Mengumpulkan data K-line dengan siklus acak

Dengan mengandalkan kemampuan kuat dari inventor untuk mengukur platform perdagangan, kita dapat dengan mudah melakukan pengumpulan data K-line dengan siklus yang tidak diinginkan. Misalnya, jika saya ingin mengumpulkan 3 menit K line, bagaimana jika bursa tidak memiliki 3 menit K line? Tidak apa-apa, itu mudah dilakukan.

Kami mengubah konfigurasi robot pengumpul, mengatur siklus K-line menjadi 3 menit, dan penemu platform perdagangan kuantitatif secara otomatis akan menyintesis 3 menit K-line ke program pengumpul.img

Kita menggunakan parameter.删除表的名称Peraturan:["records"]Menghapus tabel data K-line 1 menit yang dikumpulkan sebelumnya. Bersiap untuk mengumpulkan data K-line 3 menit.

Memulai收集器程序Mulai lagi.使用数据的策略机器人

img

img

Anda dapat melihat grafik garis K yang digambar, interval antara BAR adalah 3 menit, dan setiap BAR adalah kolom garis K dengan siklus 3 menit.

Pada tahap berikutnya, kami mencoba untuk mewujudkan kebutuhan untuk sumber data yang disesuaikan. Terima kasih sudah membaca.


Berkaitan

Lebih banyak

xukittyLuar biasa.

ZltimPuncak

ZltimPuncak

khotbahTerima kasih.

DsaidasiPuncak

Mimpi kecilTerima kasih atas dukungannya, saya adalah python kecil putih, berputar-putar, memiliki implementasi atau saran yang lebih baik, berharap untuk disempurnakan.