こんにちはICHIKENです。
Pythonで暗号資産の自動取引を開始して約2ヶ月半。(自動取引Pythonスクリプトは未公開)
簡易的なスクリプトのアクティビティ図を公開しますので、これから自動取引ソフトを組む人は参考にしてください。また、PlantUMLのコードをそのまま置いてますので、アクティビティ図のサンプルコードとしてもどうぞ。
ファンがうるさいからガレージで運用中です😎#ラズパイ pic.twitter.com/XUxZZni8UM
— ICHIKEN@🇺🇸エンジニアキャンパー🏕 (@IchikenUsa) July 31, 2021
この記事でわかること
BinanceAPIを使った自作の暗号資産自動取引ソフトのおおまかな流れがわかります。
- Binance暗号資産自動取引ソフトの流れ
- Binanceで自動取引する時のポイント
前提条件
まず前提条件となる私の環境です。
取引所 | Binance US |
---|---|
Raspberry Pi | 4 Model B 2GB |
OS | Raspbian GNU/Linux 10 (buster) |
VSCode | 1.55.2 |
Python | 3.7.3 |
python-binance | 1.0.10 |
もともとは8GBを使っていましたが、常時自動取引ソフトを走らせておく専用機として2GBに置き換えました。
うちの #Python ちゃん in #ラズパイ#仮想通貨 おつかい日記
— ICHIKEN@🇺🇸エンジニアキャンパー🏕 (@IchikenUsa) July 2, 2021
8GBで動いてたのを2GBへ載せ換え。
予定通りメモリも余っててバッチリ😆
でも相変わらず利益出ない😭がんばれPythonちゃん#暗号資産自動取引 #プログラミング pic.twitter.com/Pgoe4DLYl4
REST API
大前提としてBinanceのPythonライブラリを使用しています。これ使っちゃうと他の取引所でソフト組む気になれないですね〜
Welcome to python-binance v1.0.12 - python-binance 0.2.0 documentationインストール
python-binanceはpipでインストールできます。
pip3 install python-binance
ラズパイではすんなり入りましたが、WindowsはVisual C++ Build Toolsがないとビルドエラーになるかも、と書いてますね。
はじめに - python-binance 0.2.0 ドキュメント使い方の参考サイト
米国以外は本家Binanceですのでそのまま使用可能です。米国はBinanceUSですのでそのままだとダメですが、インスタンス生成時にUS指定すればいけます。お世話になっているたのじぃさんが紹介されてますね。
ラズパイで仮想通貨トレーダーをつくろう基本的にクライアントのインスタンス作って、メソッド叩くだけですので、めっちゃ簡単です。使っているメソッドはアクティビティ図に示してますので参考にしてください。
クライアントインスタンスの作り方や、主なメソッドのまとめはこちら。
Binance(バイナンス)の公式APIの始め方(Python用コード)|dot blog自動取引の流れ
では本題の暗号資産自動取引のアクティビティ図へ行きましょう。
アクティビティ図
図はPlantUMLで作成したものをpng出力したものです。Pythonコードはみなさんで考えて実装してくださいね。
サクサク解説
基本的な流れは
「未成立の注文確認と削除」→「現在の資産状態確認」→「条件に合えば売買注文」
これの繰り返しです。
まずは注文状況を確認して未成立の古い注文を削除
市場情報と現在の保有資産確認
市場分析に基づき判断し売買を実行
あとは定期的にデータ出力してます。そのままループさせるとウェイトリミットに到達してしまうため、毎サイクル数秒待機させています。
これに関連しますが、Binanceで自動取引するにあたり、いくつかポイントがあります。
ウェイトのリミットには気をつける必要があります。高速で問い合わせし続けると上限に到達して一定時間閉め出されます。したがって通常時はリミットに達しないようにする、誤って達してしまったらしばらく休ませる、というようなハンドリングが必要です。
また最低額を下回るとエラーになりますのでご注意ください。
PlantUMLコード
参考にPlantUMLのコードを置いておきます。設計図を作る参考にどうぞ。
@startuml
title Cryptocurrency trader
start
:初期化;
:取引通貨設定;
:市場分析初期化;
repeat
'注文確認
package 注文確認 {
:サーバー時間取得
get_server_time();
:注文状況取得
get_open_oders();
:各オーダー毎に保持期間計算;
if (保持期間 > 閾値) then (No)
:注文保持;
else (Yes)
:注文削除
cancel_order(symbol, orderId);
endif
}
:UI情報更新;
package 資産確認 {
:アカウント情報取得
get_account();
:各通貨毎に市場情報取得
get_orderbook_ticker(symbol);
:保有資産算出
保有通貨のfreeとlockedを基軸通貨換算;
}
package トレード {
:市場分析;
if (買い判定値 > 閾値) then (Yes)
:取引数量計算;
:order_limit_buy(symbol, quantity, price);
elseif (売り判定値 > 閾値) then (Yes)
:取引数量計算;
:order_limit_sell(symbol, quantity, price);
endif
}
:UI情報更新;
package データ出力 {
if (送信間隔 > 閾値) then (Yes)
:LINE送信;
else (No)
endif
if (出力間隔 > 閾値) then (Yes)
:CSV出力;
else (No)
endif
}
backward:待機;
repeatwhile (停止フラグ.is_set() ?)
stop
@enduml
最後に
いかがでしたか?
もし役に立ったよーって方でBinanceUSにこれから登録されるのでしたら、こちらのコードから登録していただけるとうれしいです。
BinanceUS登録: https://accounts.binance.us/en/register?ref=54270085
0 件のコメント:
コメントを投稿