Mengajarkan Anda untuk menerapkan pasar kutipan kolektor

Penulis:Kebaikan, Dibuat: 2020-05-30 10:03:39, Diperbarui: 2023-11-02 19:52:02

img

Dukungan data kutipan pasar sangat diperlukan ketika meneliti, merancang dan melakukan backtest strategi perdagangan. Tidak realistis untuk mengumpulkan semua data dari setiap pasar, bagaimanapun, jumlah data terlalu besar. Untuk pasar mata uang digital, platform FMZ mendukung data backtest terbatas untuk bursa dan pasangan perdagangan. Jika Anda ingin melakukan backtest beberapa bursa dan pasangan perdagangan yang sementara tidak didukung oleh platform FMZ, Anda dapat menggunakan sumber data kustom untuk backtest, tetapi premis ini mengharuskan Anda memiliki data. Oleh karena itu, ada kebutuhan mendesak untuk program pengumpulan kutipan pasar, yang dapat bertahan dan diperoleh dengan baik secara real time.

Dengan cara ini, kita dapat menyelesaikan beberapa kebutuhan, seperti:

  • Beberapa robot dapat dilengkapi dengan sumber data, yang dapat memudahkan frekuensi akses masing-masing robot ke antarmuka pertukaran.
  • Anda bisa mendapatkan data K-line dengan jumlah BAR K-line yang cukup saat robot memulai, dan Anda tidak perlu lagi khawatir tentang jumlah BAR K-line yang tidak cukup saat robot memulai.
  • Ini dapat mengumpulkan data pasar mata uang langka dan menyediakan sumber data khusus untuk sistem backtest platform FMZ.

dan banyak lagi...

kami berencana untuk menggunakan Python untuk mencapai ini, mengapa? Karena sangat nyaman

Siap.

  • Perpustakaan Python's Pymongo Karena Anda perlu menggunakan database untuk penyimpanan permanen.MongoDBdan bahasa Python digunakan untuk menulis program koleksi, jadi perpustakaan driver database ini diperlukan. Instal sajapymongopada Python.

  • Menginstal MongoDB pada perangkat hosting Contoh: MacOS menginstal MongoDB, juga sama seperti sistem windows menginstal MongoDB. Ada banyak tutorial online. Ambil instalasi sistem MacOS sebagai contoh:

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

  • Unzip Setelah mengunduh, buka folder:/usr/local

  • Mengkonfigurasi variabel lingkungan Masukan terminal:open -e .bash_profile, setelah membuka file, tulis:exportPATH=${PATH}:/usr/local/MongoDB/binSetelah menyimpan, di terminal, menggunakansource .bash_profileuntuk membuat perubahan berlaku.

  • Mengkonfigurasi secara manual direktori file database dan direktori log Buat folder yang sesuai di direktori/usr/local/data/dbAku tidak tahu. Buat folder yang sesuai di direktori/usr/local/data/logs.

Mengedit file 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 layanan MongoDB

Perintah:

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

Melakukan program kolektor

Kolektor beroperasi sebagai strategi robot Python pada platform FMZ. Saya hanya menerapkan contoh sederhana untuk menunjukkan ide-ide dari artikel ini.

Kode program kolektor:

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 lengkap strategi:https://www.fmz.com/strategy/199120

Data penggunaan

Buat robot strategi yang menggunakan data. Catatan: Anda perlu memeriksa python PlotLine Template, jika Anda tidak memilikinya, Anda dapat menyalin satu dari strategi kotak 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)

Program ini tidak mencatat data BAR saat ini. Program ini mengumpulkan K-line BAR dalam keadaan selesai. Jika data BAR real-time saat ini diperlukan, data tersebut dapat dimodifikasi sedikit.

Kode contoh saat ini hanya untuk demonstrasi. Saat mengakses catatan data dalam tabel di database, semua diperoleh. Dengan cara ini, seiring waktu untuk mengumpulkan data meningkat, semakin banyak data yang dikumpulkan. Semua kueri akan mempengaruhi kinerja sampai batas tertentu, dan dapat dirancang. Hanya data yang lebih baru dari data saat ini yang ditanyakan dan ditambahkan ke data saat ini.

Larilah.

menjalankan program docker

img

Pada perangkat di mana docker berada, jalankan layanan database MongoDB

img

Kolektor berjalan untuk mengumpulkan pasangan perdagangan BTC_USDT dari FMZ Platform Simulasi pertukaran WexApp marekt kutipan: WexApp Alamat: https://wex.app/trade?currency=BTC_USDT

img

Robot A menggunakan data database:

img

Robot B menggunakan data database:

img

Halaman WexApp:

img

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

Mengumpulkan data K-line dari setiap periode

Mengandalkan fungsi kuat dari platform FMZ, kita dapat dengan mudah mengumpulkan data K-line pada setiap siklus. Sebagai contoh, saya ingin mengumpulkan K-line 3 menit, bagaimana jika pertukaran tidak memiliki K-line 3 menit?

Kami memodifikasi konfigurasi robot kolektor, periode garis K diatur menjadi 3 menit, dan platform FMZ akan secara otomatis mensintesis garis K 3 menit ke program kolektor.

img

Kami menggunakan parameter untuk menghapusthe name of the table, setting: [records] menghapus tabel data K-line 1 menit yang dikumpulkan sebelumnya. Bersiap untuk mengumpulkan data K-line 3 menit.

Memulaicollector program, dan kemudian mulai kembalistrategy robot using the data.

img

img

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

Dalam edisi berikutnya, kita akan mencoba untuk menerapkan persyaratan sumber data kustom.

Terima kasih sudah membaca!


Berkaitan

Lebih banyak