Type/to search
8
Follow
1363
Followers
マーケットコレクターを実装するためのステップバイステップの指導
Discussions
Created 2020-04-16 12:44:03  Updated 2024-12-12 20:55:38
 7
 4144

img

プログラムによる取引や定量的な取引では、戦略の調査、戦略の設計、バックテスト分析は市場データのサポートと切り離せません。市場にあるすべてのデータを収集するのは現実的ではありません。結局のところ、データ量が多すぎるからです。デジタル通貨市場では、Inventor Quantitative Trading Platform は、限られた取引所と取引ペアのバックテスト データをサポートしています。現在データをサポートしていない一部の取引所や取引ペアをバックテストしたい場合。バックテストにはカスタム データ ソースを使用できますが、独自のデータが必要になります。したがって、永続的に保存でき、できればリアルタイムで取得できる市場情報収集プログラムが緊急に必要とされています。

これにより、次のようないくつかの要件が解決されます。

  • データ ソースを複数のロボットに提供できるため、各ロボットが交換インターフェイスにアクセスする頻度を減らすことができます。
  • ロボットが起動すると、十分な数の K ライン BAR で K ライン データを取得できるため、ロボットの起動時に K ライン BAR の数が不足することを心配する必要がなくなります。
  • 小規模通貨の市場データを収集して、Inventor Quantitative Trading Platform のバックテスト システムにカスタム データ ソースを提供し、バックテスト システムを使用して戦略をバックテストできるようにします。
  • 等..

Python を使用して実装する予定ですが、その理由は何ですか?便利だからね:)
必要があれば、行動を起こしましょう!

準備する

  • Pythonのpymongoライブラリ

    永続的なストレージにはデータベースが必要だからです。データ選択の使用MongoDB、コレクションプログラムを書くにはPython言語を使用するため、このデータベースのドライバーライブラリが必要です。
    Pythonへのインストールpymongoそれでおしまい。

  • ホストマシンにMongoDBをインストールする

    たとえば、MongoDB を MAC にインストールします。もちろん、Windows に MongoDB をインストールする場合も同様です。オンラインには多くのチュートリアルがあります。Apple MAC へのインストールを例に挙げます。

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

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

  • 環境変数の設定
    端末入力:open -e .bash_profileファイルを開いた後、次のように記述します。export PATH=${PATH}:/usr/local/MongoDB/bin
    保存後、ターミナルを使用してくださいsource .bash_profile変更を有効にします。

  • データベースファイルディレクトリとログディレクトリを手動で構成する
    ディレクトリを作成する/usr/local/data/db内の対応するフォルダ。
    ディレクトリを作成する/usr/local/data/logs内の対応するフォルダ。

  • 設定ファイルの編集mongo.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 # 开启校验用户
  • MongoDBサービスを実行する

    注文:

    ./mongod -f mongo.conf
  • サービスを停止

    use admin; db.shutdownServer();

コレクタープログラムの実装

コレクターは、Inventor Quantitative Trading Platform 上で Python ロボット戦略として実行されます。私の Python の習熟度が限られているため、この記事のアイデアを示すために簡単な例のみを実装しました。

コレクター戦略コード:

python
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)

完全なポリシーアドレス:リンク

使用データ

データを活用する戦略的なボットを作成します。
注: 確認が必要です線画ライブラリお持ちでない場合は、独自の戦略ライブラリにコピーできます。
img

python
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)

データを使用する戦略ロボットコードは、取引所のインターフェースにアクセスしないことがわかります。データベースにアクセスしてデータを取得します。マーケットコレクタープログラムは、現在のBARのデータを記録しません。KラインBARを収集します。完了した状態。現在の BAR をリアルタイムで更新する必要がある場合は、データを少し変更することができます。
現在のサンプルコードはデモンストレーション用です。データベースのテーブル内のデータレコードにアクセスすると、すべてのデータレコードが取得されます。データ収集時間が長くなると、収集されるデータも増えます。すべてのデータをクエリすると、パフォーマンスに影響します。ある程度、現在のデータよりも新しいデータのみをクエリし、現在のデータに追加する設計が可能です。

走る

ホストプログラムを実行する
img

ホストのデバイスで、MongoDBデータベースサービス
./mongod -f mongo.conf
img

コレクターは発明者の定量取引プラットフォームのシミュレートされたディスクを収集するために走りますwexAppBTC_USDT取引ペア:
住所:wexApp
img

データベースデータを使用するロボットA:
img

データベースデータを使用するロボット B:
img

wexAppページ:
img

図からわかるように、異なる ID を持つロボットは同じデータ ソースからの K ライン データを共有します。

任意の期間のKラインデータを収集する

Inventor の定量取引プラットフォームの強力な機能を利用することで、任意の期間の K ライン データを簡単に収集できます。
たとえば、3分間のKラインを収集したいのですが、取引所に3分間のKラインがない場合はどうすればいいですか?大丈夫です、簡単に達成できます。

コレクター ロボットの設定を変更し、K ラインの期間を 3 分に設定します。Inventor Quantitative Trading Platform は、コレクター プログラム用に 3 分間の K ラインを自動的に合成します。
img

パラメータ删除表的名称、設定:["records"]以前に収集した 1 分間の K ライン データ テーブルを削除します。 3 分間の K ライン データを収集する準備をします。

起動する收集器程序、 再起動使用数据的策略机器人

img

img

K ライン チャートを見ると、BAR 間の間隔は 3 分であり、各 BAR は 3 分周期の K ライン列であることがわかります。

次回は、カスタム データ ソースの要件を実装してみます。
読んでくれてありがとう

Related Recommendations
Comment
All comments (6)

    Wonderful

    6 years ago

    6 years ago

    6 years ago

    6 years ago

    感谢支持,我是python小白,抛砖引玉,有更好的实现或者建议的话,期待完善。

    6 years ago

    6 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)