binance.comからBTC/USDT価格をリアルタイムで取得 ➡FFT解析しようとしてみる

記事
コラム
Pythonエンジニアの根深です。
Python遊んでみたので ご報告をば。
まだ完成はしていませんが、技術的に面白そうなので。

websocketを使用すると、binance.comからストリームデータを受信できるようです。
なので、以下のコードを書いてみました。

(1) pythonコードを作成して、windows上にサービスとして常駐させる。(OK)
(2) stream.binance.comの受信メッセージをリアルタイム監視する。(OK)
(3) サービス上で、1秒間隔の定周期スレッドを走らせ、127.0.0.1:{任意ポート}へudpパケットを送信する。(OK)
(4) UI用クライアントソフト(こちらもpythonで作成)で、udpパケットを受信して、FFT解析を行い、画面上にスペクトラムアナライザのような背景を表示する。(まだできてない)


私が関心を寄せているのは、「ストリームデータのリアルタイム監視」と「ローカルパケット通信」の組合せです。

WEB通信の部分は 手っ取り早くpythonで組んでしまって、そのデータをどのように活用するかは、「udpデータを送るから自由に使ってね!」みたいな感じが、すごくシンプルで気に入ってます。

もう少し詳しい内容に興味がある方は、下へどうぞ。

……………………………………………………………………………

pythonでは、win32serviceutilを使用すると、windows上に常駐するサービスが書けます。
具体的には、win32serviceutil.ServiceFrameworkを継承したクラスを作成して、お作法に従ってメソッドを実装していくだけ。
バックグラウンドで、WEBデータをリアルタイム監視する仕組みが、割と簡単に書けます。
サービスなので、コードの挙動を把握するのが、ログデータなどに制限されてしまいますが、これは仕方ありません。

次に、BTC/USDTのデータを 受信する方法です。
下のコードのように、websocket.WebSocketApp()にて、on_messageイベントにメソッドをエントリしてあげればOK。
websocket.enableTrace(False)
self.ws = websocket.WebSocketApp(
    "wss://stream.binance.com:9443/ws",
    on_open=self.on_open,
    on_message=self.on_message,
    on_error=self.on_error,
    on_close=self.on_close,
)
self.ws.run_forever()

メッセージ受信のイベントハンドラは、こんな感じです。
def on_message(self, ws, message):
    data = json.loads(message)
    for key in data.keys():
        print(f'{buff}, {key}: {data[key]}')


あとは、サービス内で定周期処理を作ってUDPパケットを送るだけですが、ここの説明は割愛します。

おしまい。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す ココナラコンテンツマーケット ノウハウ記事・テンプレート・デザイン素材はこちら