市場コートデータのサポートは,取引戦略を研究,設計,バックテストする際に不可欠です.すべての市場からすべてのデータを収集することは現実的ではありません.結局のところ,データの量はあまりにも大きいです.デジタル通貨市場では,FMZプラットフォームは取引所や取引ペアのための制限されたバックテストデータをサポートします.FMZプラットフォームが一時的にサポートしていないいくつかの取引所や取引ペアをバックテストしたい場合は,バックテストのためにカスタムデータソースを使用できます.しかし,この前提はデータを持っていることを要求します.したがって,持続可能でリアルタイムで得られる市場コート収集プログラムへの緊急の必要性があります.
この方法により,以下のようないくつかのニーズを解決できます.
そしてもっと...
Pythonを使うのはとても便利だから
Pythonのpymongoライブラリ
データベースの選択はMongoDB
このデータベースのドライバライブラリが必要です. このデータベースのライブラリには,
インストールするだけでpymongo
Pythonについてです
ホスティングデバイスに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
コマンド:
./mongod -f mongo.conf
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
データを利用する戦略ロボットを作ります
注意:
住所はこちら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リアルタイムデータが必要であれば,わずかに変更できます.
現在の例コードはデモ用のものです.データベース内の表内のデータレコードにアクセスすると,すべて取得されます.この方法で,データ収集時間が増加するにつれて,より多くのデータが収集されます.すべてのクエリは一定程度にパフォーマンスに影響を与え,設計することができます.現在のデータよりも新しいデータのみがクエリされ,現在のデータに追加されます.
ドッカープログラムを実行する
ドッカーが位置しているデバイスで,MongoDBデータベースサービスを実行します
コレクターは FMZプラットフォームの BTC_USDT取引ペアを収集するために実行します WexAppシミュレーション取引所 marekt コート: WexApp アドレス: https://wex.app/trade?currency=BTC_USDT
ロボットAはデータベースデータを使います
ロボットBはデータベースデータを使います
WexAppのページ:
図に示されているように 異なるIDを持つロボットが 1つのデータソースを使って K線データを共有します
FMZプラットフォームの強力な機能に頼ることで どのサイクルでも K線データを簡単に収集できます 3分間のKラインを集めたいのですが,取引所が3分間のKラインを持っていない場合はどうでしょうか?
コレクターロボットの構成を修正して 3分に設定します FMZプラットフォームは自動的に コレクタープログラムに 3分間のK線を合成します
削除するパラメータを使用します.the name of the table
, 設定: [
スタートcollector program
再び起動するstrategy robot using the data
.
BARの間の間隔は3分です 各BARは3分間の周期を持つK線バーです
次の号では,カスタムデータソースの要件を実装しようとします.
読んでくれてありがとう!