Tangan akan mengajar anda untuk mewujudkan pengumpul perdagangan.

Penulis:Mimpi kecil, Dicipta: 2020-04-16 12:44:03, Dikemas kini: 2023-10-11 19:57:00

img

Dalam perdagangan terprogram, strategi penyelidikan, strategi reka bentuk, analisis retrospektif dalam perdagangan kuantitatif, sokongan data pasaran tidak dapat dipisahkan. Semua data di pasaran dikumpulkan dan tidak realistik, kerana jumlah data terlalu besar. Untuk pasaran mata wang digital, pencipta menyokong pertukaran terhad, data retrospektif pasangan dagangan pada platform dagangan kuantitatif.

Ini boleh membantu menyelesaikan beberapa keperluan, seperti:

  • Sumber data boleh diberikan kepada beberapa bot, yang boleh mengurangkan kekerapan setiap bot mengakses antara muka pertukaran.
  • Apabila robot dimulakan, anda boleh mendapatkan data K-bar yang mencukupi pada satu K-bar, dan tidak perlu bimbang bahawa jumlah K-bar tidak mencukupi pada permulaan bot.
  • Data pasaran mata wang kecil boleh dikumpulkan dan digunakan untuk menyediakan sumber data tersuai kepada pencipta untuk mengukur sistem pengukuran platform dagangan untuk menggunakan strategi pengukuran sistem pengukuran.
  • Tunggu...

Perancangan untuk menggunakan Python, kenapa? kerana ia mudah:) Jika ada permintaan, mulakan!

Bersedia

  • Perpustakaan Python untuk Python

    Untuk menyimpan data secara kekal, anda perlu menggunakan pangkalan data.MongoDB, yang menggunakan bahasa Python untuk menulis program pengumpul, memerlukan pemacu untuk pangkalan data ini. Pemasangan pada PythonpymongoTidak, tidak, tidak.

  • Menginstal MongoDB pada peranti hos

    Contoh: Mac memasang MongoDB, sudah tentu sistem WIN juga memasang MongoDB, terdapat banyak tutorial dalam talian untuk contoh pemasangan pada sistem Mac Apple:

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

  • Pengecutan Selepas memuat turun, lepaskan mampatan ke direktori:/usr/local

  • Variabel persekitaran Penghantaran terminal:open -e .bash_profileSelepas membuka fail, tulis:export PATH=${PATH}:/usr/local/MongoDB/binSimpan dan gunakansource .bash_profileMengubahnya menjadi sah.

  • Mengkonfigurasi direktori fail dan direktori log secara manual Membuat direktori/usr/local/data/dbDi sini, anda akan melihat beberapa gambar yang berbeza. Membuat direktori/usr/local/data/logsDi sini, anda akan melihat beberapa gambar yang berbeza.

  • 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                               # 开启校验用户
    
  • Memandu perkhidmatan MongoDB

    Perintah:

    ./mongod -f mongo.conf
    
  • Penghentian perkhidmatan

    use admin;
    db.shutdownServer();
    

Melaksanakan prosedur pengumpul

Pengumpul beroperasi dalam bentuk strategi robot Python pada platform dagangan kuantiti pencipta. Oleh kerana tahap Python sendiri terhad, hanya satu contoh sederhana yang dilaksanakan untuk menunjukkan idea dalam artikel ini.

Kod dasar 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 lengkap:Pautan

Menggunakan data

Robot yang menggunakan data untuk membuat strategi. Perhatian: Perlu dicentang"Layanan Kelas Gambar".Jika tidak, anda boleh menyalin satu ke perpustakaan dasar 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)

Seperti yang dapat dilihat dalam kod bot strategi yang menggunakan data tidak mengakses mana-mana antara muka pertukaran, mendapatkan data dengan mengakses pangkalan data, program pengumpul pasaran tidak mencatat data BAR semasa, mengumpul data BAR K baris yang telah selesai, jika anda memerlukan data BAR semasa dalam masa nyata, anda boleh mengubahnya sedikit. Kod contoh semasa, hanya untuk menunjukkan, semua rekod data dalam jadual dalam pangkalan data yang diakses adalah diambil, sehingga apabila masa pengumpulan data meningkat, semakin banyak data yang dikumpulkan, semua pertanyaan yang keluar akan memberi kesan kepada prestasi, boleh direka untuk hanya menanyakan data baru daripada data semasa, ditambah kepada data semasa.

Berjalan

Jalankan prosedur pentadbirimg

Peranti di mana hos berada, berjalan.MongoDBPerkhidmatan pangkalan data./mongod -f mongo.conf img

Pengumpul berjalan, rak simulasi untuk mengumpul platform pertukaran kuantitatif penciptawexAppPerbezaanBTC_USDTPasangan transaksi: Alamat:wexApp img

Robot menggunakan data pangkalan data A:img

Robot B menggunakan data pangkalan data:img

wexAppHalaman:img

Seperti yang dapat dilihat dalam gambar, bot dengan ID yang berbeza berkongsi data K-line menggunakan satu sumber data.

Mengumpul data K-line dengan tempoh yang tidak diingini

Dengan menggunakan keupayaan kuat platform dagangan kuantifikasi pencipta, kita dapat dengan mudah mencapai pengumpulan data K-line dengan tempoh apa sahaja. Sebagai contoh, jika saya ingin mengumpul 3 minit K line, bagaimana jika bursa tidak mempunyai 3 minit K line?

Kami mengubah konfigurasi robot pengumpul, menetapkan kitaran K-line menjadi 3 minit, dan pencipta platform perdagangan kuantitatif secara automatik menyusun 3 minit K-line untuk program pengumpul.img

Kita gunakan parameter.删除表的名称, seting:["records"]Menghapuskan Jadual Data Jadual K 1 minit yang telah dikumpulkan sebelumnya. Bersedia untuk mengumpul data Jadual K 3 minit.

Permulaan收集器程序Mulakan semula.使用数据的策略机器人

img

img

Anda boleh melihat carta garis K yang digambar, dengan selang waktu antara BAR adalah 3 minit, dan setiap BAR adalah tiang garis K dengan kitaran 3 minit.

Pada masa akan datang, kami akan cuba mewujudkan keperluan untuk sumber data tersuai. Terima kasih kerana membaca.


Berkaitan

Lebih lanjut

xukittyCantik.

ZltimPuncak

ZltimPuncak

KhotbahPujian

DsaidasiPuncak

Mimpi kecilTerima kasih atas sokongan anda, saya adalah Python, saya tidak mempunyai masalah, jika ada penyelesaian atau cadangan yang lebih baik, saya berharap ia akan disempurnakan.