手をつなぐと 市場収集機を 実現する方法を教える

作者: リン・ハーン小さな夢, 作成日:2020-04-16 12:44:03, 更新日:2023-10-11 19:57:00

img

プログラム化取引,量化取引における研究戦略,設計戦略,回計分析において,市場データのサポートが不可欠である.市場上のすべてのデータが収集されても現実的ではない.データ量はあまりにも大きい.デジタル通貨市場では,発明者は量化取引プラットフォームで限られた取引所,取引対の回計データをサポートする.一時的にデータをサポートしない取引所,取引対を回計したい場合は,カスタムデータソースを使用して回計を行うことができます.しかし,この前提はデータを持っている必要があります.

この方法は,いくつかのニーズに対応します.

  • 複数のロボットにデータソースを提供することで,各ロボットが取引所のインターフェースにアクセスする頻度を緩和できます.
  • ロボットが起動するときに十分な数のK線BARを入手し,ロボットが起動するときに十分な数のK線BARがないことを心配する必要はありません.
  • 小型通貨の市場データを収集し,発明者に定量化取引プラットフォーム回測システムにカスタマイズされたデータ源を提供するために,回測システム回測戦略を使用することができる.
  • 待って...

Pythonで実行する計画です.なぜですか?便利だからです. 需要があるなら,行動!

準備する

  • PythonのPymongoライブラリ

    データベースを使用する場合は,保存を継続します.MongoDBPython で作成された収集プログラムなので,このデータベースのドライバが必要です. Pythonでインストールするpymongoほら ほら

  • 管理者のデバイスにMongoDBをインストールする

    例えば:MongoDBをMACにインストールする,もちろんWINシステムもMongoDBをインストールする.

  • ダウンロード ダウンロードリンク: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();
    

収集プログラムを実装する

コレクターは発明者の量化取引プラットフォーム上の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

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のデータを記録しない市場収集プログラムで,現在のBARのリアルタイムデータが必要な場合は,少し変更することもできます. 現在の例コードは,単にデータベース内のテーブル内のすべてのデータレコードがアクセス時に取得されていることを実証するためであり,データ収集時間が増加し,より多くのデータが収集されるにつれて,すべてのクエリがパフォーマンスに影響を及ぼし,現在のデータよりも新しいデータをクエリするだけで,現在のデータに追加するように設計することができます.

実行する

管理者プログラムを実行するimg

管理者のデバイスで実行されます.MongoDBデータベースサービス./mongod -f mongo.conf img

収集機が稼働し,発明者の定量化取引プラットフォームを収集するシミュレーションディスクwexAppありがとうございました.BTC_USDT取引対: アドレス:wexApp img

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

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

wexAppページ:img

この図では,異なるIDを持つロボットが,同じデータ源を使用したK線データを共有していることが示されています.

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

発明者による量化取引プラットフォームの強力な機能により,任意の周期のK線データを簡単に収集することができます. 例えば,私が3分K線を集めたい場合,取引所は3分K線がない場合はどうしますか?

収集ロボットの配置を変更し,K線周期を3分に設定し,発明者による量化取引プラットフォームは自動的に3分間のK線を収集プログラムに合成します.img

参数を使ってみましょう.删除表的名称設定は:["records"]1分K線データ表を削除します. 3分K線データを収集する準備をします.

スタート收集器程序再び起動使用数据的策略机器人

img

img

描かれたK線グラフは,BARの間隔が3分であり,各BARは3分周期のK線柱です.

このプロジェクトでは,自作データソースのニーズを実現する取り組みが進められています. ありがとうございました


関連性

もっと

クキティ素晴らしい

スルティムトップ

スルティムトップ

説教賞賛する

言ったトップ

小さな夢支援ありがとうございます. 私はPython小白です. 引数玉を投げて,より良い実装や提案があれば,完璧に期待します.