Bitcoinの自動売買ツールをPythonを使って作る
自動売買って聞いたことありますか?
一番メジャーなのはFXですかね。FXのトレードをプログラムを使って一定のアルゴリズムにしたがってトレードをするというのを自動売買、システムトレード、アルゴリズムトレードなんていったりします。
システムトレードって怖いっていうイメージがありますよね?自分もそんな気持ちがありました。でも今回は好奇心が勝ちましたw
「自動売買で○○万円溶かしました」とか聞きますよね?まぁ1万円しか入れてなければ最悪の場合でマイナス1万円ですから。勉強料としては高くないです。ちなみに、レバレッジとかきかせるのはおすすめしません。それは絶対大丈夫だという確信を持ってからにしましょう。
それでも、筆者は誰がどういうアルゴリズムで作ってるかわからないものに何万円も預ける気にはなれないのです・・・
っというわけで、自分で作ればいいじゃないか!っとなるわけです。
というわけで、このシステムトレードを自分で作ってみようと思います!
今回は、仮想通貨Bitcoinでやってみようと思います!
なぜBitcoinでやるのかというと、以下の理由のために、システムトレードに向いていると思ったからです。
・24時間トレードができる
・少ない取引額でトレードができる
・値動きが激しい
・大きな業者が少ない
さて、やっていきましょう!
bitbankのapiを取得しよう
さて、BitcoinのTradeをプログラムからするためには、プログラムとシステムを繋いでくれるものが必要になってきます。それがAPI(Application Programming Interface)です。
このAPIをBitbankという企業が提供してくれています。すばらしいですね!これを使いましょう!
Bitbankの登録の仕方とかは煩わしいので、スキップします。以下を参照してください。
さて、APIの取得方法は公式が記事を出していいるので、こちらの記事を参照。ちなみにAPIはテストの段階では、参照のみにしておくことをおすすめします。参照にしておけば、失敗してもお金を失うという事は100%ありません。何かあったら嫌ですよね。
pythonでAPIを使ってみる
pythonからAPIを使ってみましょう。もしpythonの使い方がわからないという方がいたら、私の過去記事をみてインストールしてくださいね!
→ 暇なので勉強しよう!Pythonインストール編(Mac)
まずは、bitbank-apiのライブラリをインストールしましょう。ターミナルで以下を実行してください。
pip install git+https://github.com/bitbankinc/python-bitbankcc.git
これで準備オッケーです!さてそれでは使ってみましょう。
まずはパブリックAPIから使ってみましょう。こっからはpythonのファイル(.py)で実行するか、jupyter上でこちらは、特にkeyは必要ありません。
# python_bitbankccのパッケージをインポート
import python_bitbankcc
# public API classのオブジェクトを取得
pub = python_bitbankcc.public()
# ティッカー情報を取得
value = pub.get_ticker( 'btc_jpy' )
# 最近の約定価格
print('last:' + value['last'])
# 現在の売り注文の最安値
print('sell:' + value['sell'])
# 現在の買い注文の最安値
print('buy:' + value['buy'])
こんな感じで実行してみましょう!こちらでBitcoinの最新の板情報を取得することができます。
ぜひとも、自分で実行してみてください。
次にプライベートの方も使ってみましょう。さて、こちらを実行してみてください。こちらは、自分のアセット(資産)を出力するプログラムです。
BITBANK_API_KEYとBITBANK_API_SECRETにはそれぞれ、上で手に入れた自分のAPI_keyとSECRET_keyを入れてください!
# python_bitbankccのパッケージをインポート
import python_bitbankcc
# APIキー,シークレットの設定
API_KEY = 'BITBANK_API_KEY'
API_SECRET = 'BITBANK_API_SECRET'
# privte API classのオブジェクトを取得
prv = python_bitbankcc.private(API_KEY, API_SECRET)
# アセット一覧の取得
value = prv.get_asset()
# アセット情報の一例
asset_ex = value['assets'][5]
print('通貨名:' + asset_ex['asset'])
print('保有量:' + asset_ex['onhand_amount'])
print('ロックされている量:' + asset_ex['locked_amount'])
print('利用可能な量:' + asset_ex['free_amount'])
print('引き出し手数料:' + asset_ex['withdrawal_fee'])
さて、こちらの実行結果は個人情報になるので、出しませんが、是非自分で実行してみてくださいね!
重要なメソッドの紹介
よく使いそうなメソッドを紹介します。ここで紹介していないものもあります。必要に応じて調べてみてくださいね!公式のドキュメントを貼っておきます。
まずは、パブリックAPIから紹介していきます。
import json
# public API classのオブジェクトを取得
pub = python_bitbankcc.public()
# 現在の価格情報を取得
value = pub.get_ticker(
'btc_jpy' # ペア
)
print(json.dumps(value))
# 直近の板情報を取得
value = pub.get_depth(
'btc_jpy' # ペア
)
print(json.dumps(value))
# 指定した日にちの約定情報を取得
value = pub.get_transactions(
'btc_jpy', # ペア
'20170313' # YYYYMMDD 型の日付
)
print(json.dumps(value))
# 蝋燭足チャートを取得
value = pub.get_candlestick(
'btc_jpy', # ペア
'1hour', # タイプ
'20170313' # YYYYMMDD 型の日付
)
print(json.dumps(value))
是非自分で実行してみてくださいね。
続いて、プライベートAPIの方も紹介します。こちらは、BITBANK_API_KEYとBITBANK_API_SECRETに自分のAPI_KEYを入れてください。
import os, json
API_KEY = os.environ['BITBANK_API_KEY']
API_SECRET = os.environ['BITBANK_API_SECRET']
# private API classのオブジェクトを取得
prv = python_bitbankcc.private(API_KEY, API_SECRET)
# ユーザーのアセット(資産)情報を取得
value = prv.get_asset()
print(json.dumps(value))
# 指定した注文IDの情報を取得
value = prv.get_order(
'btc_jpy', # ペア
'71084903' # 注文ID
)
print(json.dumps(value))
# ユーザーのアクティブな注文を全て取得
value = prv.get_active_orders(
'btc_jpy' # ペア
)
print(json.dumps(value))
# 注文する
value = prv.order(
'btc_jpy', # ペア
'131594', # 価格
'0.0001', # 注文枚数
'buy', # 注文サイド
'market' # 注文タイプ
)
print(json.dumps(value))
# 注文をキャンセルする
value = prv.cancel_order(
'btc_jpy', # ペア
'133493980' # 注文ID
)
print(json.dumps(value))
実績編
ここから実際に自動取引を検討していきたいです。自動取引を行うためには、まずアルゴリズムが必要になります。
そしてアルゴリズムを考えたら、運用を開始しましょう!っとはならないですよね?だって、アルゴリズムがうまくいくかわからないし、失敗したらお金を失います。
そこで、バックテストをします。過去のデータを使ったシミュレーションをして、ちゃんとお金が増えることがわかったら、ようやくお金を使って運用ですよね!
自分で自由にできる人は自由にやってみましょう!
どうしていいかわからないっていう方は、すごく単純なアルゴリズムを使ったシミュレーションを解説します。ちょっと際どい内容(笑)も含んでいますので、ここから先は有料としています。気になったら読んでいってください。
目次
・アルゴリズム
・データ収集
・シミュレーション
・パラメータの最適化
ちなみに私は、現在某ベンチャー企業でデータサイエンティストとして働いており、一応プロとしてデータサイエンスをやっています。データ収集やシミュレーション、最適化等は仕事としてやっております。
ここから先は
¥ 500
この記事が参加している募集
サポートしていただいたお金は、新しいボードゲームやカードゲームをプレイするためのたしにします! プレイした感想は順次紹介していきます!