こんばんわ、ときか姉です♪
エンジニアのみなさまにとって、株式やFX, Bitcoinの自動売買は憧れですよね♪
特にAI関連技術・機械学習がここまで発展していると、独自に設計したアルゴリズムによるシステムトレードで資産形成も狙ってみたいところです。
そんなアルゴリズムトレードを行う際に想定される過程をざっくり分けると、主に以下のようなステップになるかと思います。
1. 取引対象銘柄の現在および過去の価格情報取得
2. 取引対象の価格情報や自身の資産情報に基づいたトレーディングルールの作成
3. トレーディングルールの条件を満たした場合の実際の売り買い発注(指値)
*今回は(おそらくみなさんが最も興味をお持ちであろう)2に関しては触れませんので申し訳ございません。。
今回は、BitFlyerにて自動売買を行うPythonスクリプトを紹介したいと思います。BitFlyerのアカウントが必要ですので、登録しておいてください。(ApiKeyとApiSecretが必要となります。)
注:Bitcoinその他の自動売買に関しては、必ず個人の自己責任の下行ってください。取引や投資によって負ったあらゆる損益などは、当ブログでは一切の責任を負えません。この注意事項に了承できる方のみ、以下の記事閲覧と試行を行ってください。
[トレード口座開設はコチラ↓]
request
Bitcoinの現在価格取得などのように、サーバ側に何かを要求する際には一般に、requestsライブラリを用います。requests は Pythonのhttpライブラリで、requests.get(‘指定したURL’)とするとGETリクエスト(値が欲しい!などのサーバ側に対するリクエスト)を行えます。
例えば、このGETリクエストを送り、そのレスポンスに対して以下のように .textあるいは.jsonとすることで、レスポンスボディ(返ってきた値)をテキスト形式やJSON形式で取得できたりします。
JSONとは「JavaScript Object Notation」の略で、「JavaScriptのオブジェクトの書き方を元にしたデータ定義方法」のことです。JavaScript未経験だという方は、とにかく「中括弧{}でくくられたひじょ〜に一般的なデータ羅列・記述方式」ぐらいに思っておいてください。
import requests
response = requests.get("https://api.bitflyer.jp/v1/ticker/")
print(response.json()) # 現在の値の表示
例えば上記のように、request.get(‘指定URL’)を行うと以下のような値が返ってきます。
{'product_code': 'BTC_JPY', 'state': 'RUNNING', 'timestamp': '2021-07-14T10:52:51.83', 'tick_id': 67085407, 'best_bid': 3586932.0, 'best_ask': 3588699.0, 'best_bid_size': 0.24658383, 'best_ask_size': 0.05, 'total_bid_depth': 816.77236846, 'total_ask_depth': 1560.92999811, 'market_bid_size': 0.0, 'market_ask_size': 0.0, 'ltp': 3589078.0, 'volume': 13074.65434312, 'volume_by_product': 3739.93579965}
中括弧でくくられていますね。
「:」(コロン)で区切られているのは辞書形式といいます。
「項目」と「値」の組み合わせだと思ってください。
返ってきた値は以下のようになっています。
‘product_code’: ‘BTC_JPY’, # 取得した通貨ペアがBTC_JPYという意味です。
‘timestamp’: ‘2021-07-14T10:52:51.83’, # 取得した時刻を意味します。
・・・
以下、取得時刻や取得対象の詳細が続きます。
そのうちに、例えば買い気配だけを取り出したい場合には、
data=response.json()
print(data["best_bid"]) # 買い気配値の表示
とすると、
35????
のように返ってきます。
このようにして得られた現在の値動きなどを見て、かつ現在の資産状況に基づいて、自動発注を行うというのがアルゴリズムトレードの流れになります。
ccxtライブラリ
以前だと、このような自動売買アルゴリズムを運用する場合には、APIシークレット(売買に必要な秘密鍵など)を暗号化するために、hashlib/hmacなどのライブラリが必要だったのですが、そういった煩雑な手順を簡略化するために、ccxtという仮想通貨のラッパーが開発されています。ありがたや♡
今回は簡略化のため、このccxtを用います。
ccxtのインストールは例によってpipで行います。↓
pip install ccxt # ccxtのインストール
例えば、このccxtを用いて現在の価格(終値)を取得したい場合は、以下のように記述するだけです。fetch_ticker()という関数を用います。
import ccxt
from pprint import pprint
bitflyer = ccxt.bitflyer()
ticker = bitflyer.fetch_ticker('BTC/JPY', params = { "product_code" : "FX_BTC_JPY" })
pprint(f'終値={ticker["last"]}') # 終値のみ表示
そうすると
'終値=373*****'
のように終値が返ってきます。
次に、トレードにおいて重要な現在の資産状況(証拠金残高など)を確認します。
以下のように、private_get_getcollateral()関数を用います。
import ccxt
from pprint import pprint
bitflyer = ccxt.bitflyer()
bitflyer.apiKey = '********' # bitflyerのAPIkeyを入力
bitflyer.secret = '********' # bitflyerのAPIsecretを入力
collateral = bitflyer.private_get_getcollateral()
pprint(collateral)
これを実行すると、以下のようなJSONデータが返ってきます。
{‘collateral’: ‘0.0’, # 預入証拠金の評価額
‘keep_rate’: ‘0.0’, # 現在の証拠金維持率
‘open_position_pnl’: ‘0.0’, # ポジションの評価損益
‘require_collateral’: ‘0.0’} # 現在の必要証拠金
*資産入れてないのでゼロ円です。
また、実際に注文を出すには、以下のように、create_order()関数を用います。
注:以下は実行すると実際に発注されるので注意してください!指値を現在価格よりも極端に下げるなどして注文が刺さってしまわないようにしてから実行してください。BitFlyerにログインし、実際に画面を見て確認しながら行ってください!
import ccxt
from pprint import pprint
bitflyer = ccxt.bitflyer()
bitflyer.apiKey = '******' # APIkeyの値を入力
bitflyer.secret = '******' # APIsecretの値を入力
order = bitflyer.create_order(
symbol = 'BTC/JPY', # 銘柄(通貨ペアとなります)
type='limit', # 指値を意味する。成行なら'market'
side='buy', # 買いor売り
price='5000000', # 指値
amount='0.001', # 数量
params = { "product_code" : "BTC_JPY" }) # 取引所に渡すパラメータ:例えば、LightningFX使用可能なら'FX_BTC_JPY'
pprint(order)
[トレード口座開設はコチラ↓]
注文が成立すると、以下のように返ってきます。
{‘id’: ‘JRF2021MMDD-??????-??????,
‘info’: {‘child_order_acceptance_id’: ‘JRF2021MMDD-??????-??????’}}
それと同時に、Bitflyerにログインしていると、以下の画面に、上記で指定した注文が最下段に現れます。
これで発注がpythonコードから投げれることが確認できました。
以上BitFlyerにおけるPython自動売買の基本的な手順に関する紹介でした。
いかがでしたか?かなり簡単ですよね♪
私も初めて知ったときは驚きました。
時系列解析や時系列予測に対して腕に覚えがあるという方は、ぜひ自動売買を実装して試してみてくださいね。
機会があれば、トレードアルゴリズムの部分も記事にしてみたいと思います。
もしよろしければフォローやスキお願いしますね♪
本記事がみなさまの資産形成の一助になれば幸いです🌷
♪♪♪ Have a nice coding day ♪♪♪
[コーディングやトレードに集中するときは↓のゲーミングチェア使ってます♪]
[トレード口座開設はコチラ↓]
コメント