Mengajar anda untuk melaksanakan pengumpul sebut harga pasaran

Penulis:Kebaikan, Dicipta: 2020-05-30 10:03:39, Dikemas kini: 2023-11-02 19:52:02

img

Sokongan data sebut harga pasaran sangat diperlukan ketika meneliti, merancang dan menguji semula strategi perdagangan. Tidak realistik untuk mengumpul semua data dari setiap pasaran, bagaimanapun, jumlah data terlalu besar. Untuk pasaran mata wang digital, platform FMZ menyokong data backtest terhad untuk bursa dan pasangan perdagangan. Jika anda ingin menguji semula beberapa bursa dan pasangan perdagangan yang sementara tidak disokong oleh platform FMZ, anda boleh menggunakan sumber data tersuai untuk backtest, tetapi premis ini memerlukan anda mempunyai data. Oleh itu, terdapat keperluan mendesak untuk program pengumpulan sebut harga pasaran, yang dapat berterusan dan diperoleh dengan baik dalam masa nyata.

Dengan cara ini, kita boleh menyelesaikan beberapa keperluan, seperti:

  • Beberapa robot boleh disediakan dengan sumber data, yang boleh memudahkan frekuensi akses setiap robot ke antara muka pertukaran.
  • Anda boleh mendapatkan data K-line dengan jumlah BAR K-line yang mencukupi apabila robot bermula, dan anda tidak perlu lagi bimbang tentang jumlah BAR K-line yang tidak mencukupi apabila robot bermula.
  • Ia boleh mengumpul data pasaran mata wang langka dan menyediakan sumber data tersuai untuk sistem backtest platform FMZ.

dan banyak lagi...

Kami merancang untuk menggunakan Python untuk mencapai ini, mengapa?

Bersedia.

  • Perpustakaan Python's Pymongo Kerana anda perlu menggunakan pangkalan data untuk penyimpanan berterusan.MongoDBdan bahasa Python digunakan untuk menulis program koleksi, jadi perpustakaan pemacu pangkalan data ini diperlukan. Hanya memasangpymongopada Python.

  • Masang MongoDB pada peranti hosting Contohnya: MacOS memasang MongoDB, juga sama seperti sistem windows memasang MongoDB. Terdapat banyak tutorial dalam talian. Ambil pemasangan sistem MacOS sebagai contoh:

  • Muat turun Pautan muat turun:https://www.mongodb.com/download-center?jmp=nav#community

  • Unzip Selepas memuat turun, buka zip ke direktori:/usr/local

  • Mengatur pembolehubah persekitaran Masukan terminal:open -e .bash_profile, selepas membuka fail, tulis:exportPATH=${PATH}:/usr/local/MongoDB/binSelepas menyimpan, di terminal, menggunakansource .bash_profileuntuk membuat perubahan itu berkuat kuasa.

  • Mengatur secara manual direktori fail pangkalan data dan direktori log Buat folder yang sepadan dalam direktori/usr/local/data/db. Buat folder yang sepadan dalam direktori/usr/local/data/logs.

Mengedit fail konfigurasimongo.conf:

#bind_ip_all = true # Any computer can connect
bind_ip = 127.0.0.1 # Local computer can access
port = 27017 # The instance runs on port 27017 (default)
dbpath = /usr/local/data/db # data folder storage address (db need to be created in advance)
logpath = /usr/local/data/logs/mongodb.log # log file address
logappend = false # whether to add or rewrite the log file at startup
fork = false # Whether to run in the background
auth = false # Enable user verification
  • Jalankan perkhidmatan MongoDB

Perintah:

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

Melaksanakan program pengumpul

Pengumpul beroperasi sebagai strategi robot Python di platform FMZ. Saya hanya melaksanakan contoh mudah untuk menunjukkan idea artikel ini.

Kod program pengumpul:

import pymongo
import json

def main():
    Log("Test data collection")
    
    # Connect to the database service
    myDBClient = pymongo.MongoClient("mongodb://localhost:27017")   # mongodb://127.0.0.1:27017
    # Create a database
    huobi_DB = myDBClient["huobi"]
    
    # Print the current database table
    collist = huobi_DB.list_collection_names()
    Log("collist:", collist)
    
    # Check if the table is deleted
    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, "delete:", dropName)
                ret = tab.drop()
                collist = huobi_DB.list_collection_names()
                if dropName in collist:
                    Log(dropName, "failed to delete")
                else :
                    Log(dropName, "successfully deleted")
    
    # Create the records table
    huobi_DB_Records = huobi_DB["records"]
    
    # Request data
    preBarTime = 0
    index = 1
    while True:
        r = _C(exchange.GetRecords)
        if len(r) < 2:
            Sleep(1000)
            continue
        if preBarTime == 0:
            # Write all BAR data for the first time
            for i in range(len(r) - 1):
                # Write one by one
                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 strategi penuh:https://www.fmz.com/strategy/199120

Data penggunaan

Buat robot strategi yang menggunakan data. Nota: Anda perlu menyemak python PlotLine Template, jika anda tidak mempunyai, anda boleh menyalin satu dari kotak strategi ke perpustakaan strategi anda.

img

Ini alamatnya:https://www.fmz.com/strategy/39066

import pymongo
import json

def main():
    Log("Test using database data")
    
    # Connect to the database service
    myDBClient = pymongo.MongoClient("mongodb://localhost:27017")   # mongodb://127.0.0.1:27017
    # Create a database
    huobi_DB = myDBClient["huobi"]
    
    # Print the current database table
    collist = huobi_DB.list_collection_names()
    Log("collist:", collist)
    
    # Query data printing
    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)
        
        # Use the line drawing library to draw the obtained K-line data
        ext.PlotRecords(arrRecords, "K")
        LogStatus(_D(), "records length:", len(arrRecords))
        Sleep(10000)

Ia boleh dilihat bahawa kod robot strategi yang menggunakan data tidak mengakses sebarang antara muka pertukaran. Data diperoleh dengan mengakses pangkalan data. Program pengumpul pasaran tidak merakam data BAR semasa. Ia mengumpul BAR K-line dalam keadaan lengkap. Jika data BAR masa nyata semasa diperlukan, ia boleh diubah suai sedikit.

Kod contoh semasa hanya untuk demonstrasi. Apabila mengakses rekod data dalam jadual dalam pangkalan data, semua diperoleh. Dengan cara ini, apabila masa untuk mengumpul data meningkat, lebih banyak data dikumpulkan. Semua pertanyaan akan mempengaruhi prestasi ke tahap tertentu, dan boleh direka. Hanya data yang lebih baru daripada data semasa yang ditanyakan dan ditambahkan ke data semasa.

Larilah.

menjalankan program docker

img

Pada peranti di mana docker terletak, jalankan perkhidmatan pangkalan data MongoDB

img

Pengumpul berjalan untuk mengumpul pasangan dagangan BTC_USDT Platform FMZ WexApp pertukaran simulasi kutipan marekt: Alamat WexApp: https://wex.app/trade?currency=BTC_USDT

img

Robot A menggunakan data pangkalan data:

img

Robot B menggunakan data pangkalan data:

img

Halaman WexApp:

img

Seperti yang anda lihat dalam gambar, robot dengan ID yang berbeza berkongsi data K-line menggunakan satu sumber data.

Mengumpul data K-line dari mana-mana tempoh

Mengandalkan fungsi kuat platform FMZ, kita boleh dengan mudah mengumpul data K-line pada sebarang kitaran. Sebagai contoh, saya mahu mengumpul K-line 3 minit, bagaimana jika pertukaran tidak mempunyai K-line 3 minit?

Kami mengubahsuai konfigurasi robot pengumpul, tempoh garis K ditetapkan kepada 3 minit, dan platform FMZ akan secara automatik mensintesis garis K 3 minit ke program pengumpul.

img

Kami menggunakan parameter untuk memadamthe name of the table, tetapan: [rekod] menghapuskan jadual data K-line 1 minit yang dikumpulkan sebelum ini. Bersedia untuk mengumpul data K-line 3 minit.

Mulakancollector program, dan kemudian mulakan semulastrategy robot using the data.

img

img

Anda boleh lihat carta K-line digambar, selang antara BAR adalah 3 minit, dan setiap BAR adalah bar K-line dengan tempoh 3 minit.

Dalam isu seterusnya, kita akan cuba untuk melaksanakan keperluan sumber data tersuai.

Terima kasih kerana membaca!


Berkaitan

Lebih lanjut