市場 コート 収集器の実装を教えます

作者: リン・ハーン優しさ, 作成日: 2020-05-30 10:03:39, 更新日: 2023-11-02 19:52:02

img

市場コートデータのサポートは,取引戦略を研究,設計,バックテストする際に不可欠です.すべての市場からすべてのデータを収集することは現実的ではありません.結局のところ,データの量はあまりにも大きいです.デジタル通貨市場では,FMZプラットフォームは取引所や取引ペアのための制限されたバックテストデータをサポートします.FMZプラットフォームが一時的にサポートしていないいくつかの取引所や取引ペアをバックテストしたい場合は,バックテストのためにカスタムデータソースを使用できます.しかし,この前提はデータを持っていることを要求します.したがって,持続可能でリアルタイムで得られる市場コート収集プログラムへの緊急の必要性があります.

この方法により,以下のようないくつかのニーズを解決できます.

  • 複数のロボットにデータソースが提供され,各ロボットが交換インターフェースにアクセスする頻度を容易にすることができます.
  • ロボットが起動するときに十分な数の K線 BAR を使って K線データを取得できます ロボットが起動するときに K線 BAR の数が不十分であることに 心配する必要はありません
  • FMZプラットフォームのバックテストシステムにカスタムデータソースを提供できます.

そしてもっと...

Pythonを使うのはとても便利だから

準備はいい

  • Pythonのpymongoライブラリ データベースの選択はMongoDBこのデータベースのドライバライブラリが必要です. このデータベースのライブラリには, インストールするだけでpymongoPythonについてです

  • ホスティングデバイスにMongoDBをインストール 例えば:MacOSはMongoDBをインストールする.WindowsシステムもMongoDBをインストールする.オンラインには多くのチュートリアルがあります.MacOSシステムのインストールを例として:

  • ダウンロード ダウンロードリンク:https://www.mongodb.com/download-center?jmp=nav#community

  • 解凍する ダウンロード後,ディレクトリに解凍します:/usr/local

  • 環境変数を設定する 端末入力:open -e .bash_profileファイルを開けた後,exportPATH=${PATH}:/usr/local/MongoDB/bin貯蔵後,ターミナルで使用source .bash_profile変更が効力を生むために

  • データベースファイルディレクトリとログディレクトリを手動で設定する ディレクトリで対応するフォルダを作成/usr/local/data/db- わかった ディレクトリで対応するフォルダを作成/usr/local/data/logs.

設定ファイルを編集するmongo.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
  • MongoDB サービスを実行する

コマンド:

./mongod -f mongo.conf
  • MongoDB サービスを停止する
use admin;
db.shutdownServer();

コレクタープログラムを実行する

この記事のアイデアを示すために簡単な例を実装しました.

コレクタープログラムコード:

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)

戦略の完全な住所:https://www.fmz.com/strategy/199120

使用データ

データを利用する戦略ロボットを作ります 注意: python PlotLine テンプレートをチェックする必要があります. python PlotLine テンプレートがない場合は,戦略のスクエアから戦略ライブラリにコピーすることができます.

img

住所はこちら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)

データを使用する戦略ロボットコードは,いかなる交換インターフェースにもアクセスしないことが見られます.データはデータベースにアクセスすることによって得られます.市場収集プログラムでは現在のBARデータを記録しません.K線BARを完了状態で収集します.現在のBARリアルタイムデータが必要であれば,わずかに変更できます.

現在の例コードはデモ用のものです.データベース内の表内のデータレコードにアクセスすると,すべて取得されます.この方法で,データ収集時間が増加するにつれて,より多くのデータが収集されます.すべてのクエリは一定程度にパフォーマンスに影響を与え,設計することができます.現在のデータよりも新しいデータのみがクエリされ,現在のデータに追加されます.

走って

ドッカープログラムを実行する

img

ドッカーが位置しているデバイスで,MongoDBデータベースサービスを実行します

img

コレクターは FMZプラットフォームの BTC_USDT取引ペアを収集するために実行します WexAppシミュレーション取引所 marekt コート: WexApp アドレス: https://wex.app/trade?currency=BTC_USDT

img

ロボットAはデータベースデータを使います

img

ロボットBはデータベースデータを使います

img

WexAppのページ:

img

図に示されているように 異なるIDを持つロボットが 1つのデータソースを使って K線データを共有します

任意の期間のK線データを収集する

FMZプラットフォームの強力な機能に頼ることで どのサイクルでも K線データを簡単に収集できます 3分間のKラインを集めたいのですが,取引所が3分間のKラインを持っていない場合はどうでしょうか?

コレクターロボットの構成を修正して 3分に設定します FMZプラットフォームは自動的に コレクタープログラムに 3分間のK線を合成します

img

削除するパラメータを使用します.the name of the table, 設定: [記録] 以前収集された 1 分間のK 線データテーブルを削除します. 3 分間のK 線データを収集する準備をします.

スタートcollector program再び起動するstrategy robot using the data.

img

img

BARの間の間隔は3分です 各BARは3分間の周期を持つK線バーです

次の号では,カスタムデータソースの要件を実装しようとします.

読んでくれてありがとう!


関連性

もっと