avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada mesej peribadi
4
fokus pada
1271
Pengikut

Ajar anda langkah demi langkah untuk melaksanakan pengumpul pasaran

Dicipta dalam: 2020-04-16 12:44:03, dikemas kini pada: 2024-12-12 20:55:38
comments   7
hits   3870

Ajar anda langkah demi langkah untuk melaksanakan pengumpul pasaran

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:

  • Sumber data boleh diberikan kepada berbilang robot, yang boleh mengurangkan kekerapan setiap robot mengakses antara muka pertukaran.
  • Apabila robot bermula, ia boleh mendapatkan data K-line dengan bilangan BAR K-line yang mencukupi, jadi anda tidak perlu lagi bimbang tentang bilangan BAR K-line yang tidak mencukupi apabila robot bermula.
  • Ia boleh mengumpul data pasaran mata wang kecil untuk menyediakan sumber data tersuai untuk sistem ujian belakang Platform Dagangan Kuantitatif Pencipta, supaya dapat menggunakan sistem ujian belakang untuk strategi ujian belakang.
  • dll..

Merancang untuk menggunakan Python untuk melaksanakannya, mengapa? Sebab senang :) Jika anda mempunyai keperluan, ambil tindakan!

Sediakan

  • Perpustakaan pymongo Python

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.

  • Pasang MongoDB pada mesin hos

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

Pesanan:

  ./mongod -f mongo.conf
  • Hentikan perkhidmatan
  use admin;
  db.shutdownServer();

Melaksanakan Program Pemungut

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

Data Penggunaan

Buat bot strategik yang menggunakan data. Nota: Anda perlu menyemakPerpustakaan lukisan garisanJika anda tidak memilikinya, anda boleh menyalinnya ke pustaka strategi anda sendiri. Ajar anda langkah demi langkah untuk melaksanakan pengumpul pasaran

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.

lari

Jalankan program hos Ajar anda langkah demi langkah untuk melaksanakan pengumpul pasaran

Pada peranti hos, jalankanMongoDBPerkhidmatan Pangkalan Data ./mongod -f mongo.conf Ajar anda langkah demi langkah untuk melaksanakan pengumpul pasaran

Pengumpul berlari untuk mengumpul cakera simulasi platform dagangan kuantitatif penciptawexAppdaripadaBTC_USDTPasangan Dagangan: alamat:wexApp Ajar anda langkah demi langkah untuk melaksanakan pengumpul pasaran

Robot A menggunakan data pangkalan data: Ajar anda langkah demi langkah untuk melaksanakan pengumpul pasaran

Robot B menggunakan data pangkalan data: Ajar anda langkah demi langkah untuk melaksanakan pengumpul pasaran

wexApphalaman: Ajar anda langkah demi langkah untuk melaksanakan pengumpul pasaran

Seperti yang dapat dilihat dalam rajah, robot dengan ID berbeza berkongsi data K-line daripada sumber data yang sama.

Kumpul data K-line bagi sebarang tempoh

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. Ajar anda langkah demi langkah untuk melaksanakan pengumpul pasaran

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使用数据的策略机器人

Ajar anda langkah demi langkah untuk melaksanakan pengumpul pasaran

Ajar anda langkah demi langkah untuk melaksanakan pengumpul pasaran

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