Bitcoinの自動売買のやり方!PythonでbitFlyer用の無料ツールを作る

bitFlyerアカウントを利用してビットコインの自動売買を行う方法を解説します。
今回作成するのは、Pythonを使った無料スキャルピングbotです。

bitFlyerを使うメリットはコードが滅茶苦茶書きやすいことです。
これまでも色々な取引所を使って自動売買 bot を作成してきましたが、個人的にPython初心者が一番取り組みやすいと思ったのがbitFlyer です。

今回はサンプルとして、スキャルピング bot を作成します。
スキャルピングとは1分などのごく短期間に細かくビットコインの売買を行い、利益を積み上げていくトレード手法です。
(あまりにも頻繁に売買しすぎると、サーバーからアクセスを拒否される可能性があるので注意してください)

スキャルピングは裁量でやるには手間がかかりすぎて厳しいですが、自動でやる分にはそこは全く問題になりません。
※なお、bitcoinの自動売買ツールと言っていますが、コード中のパラメーターを変更すればイーサリアムなどのアルトコインにも使えます。

Pythonで作った自動売買ツールの例

さて、もったいつけても仕方がないので、早速コードの動きとコード例の本体を公開します。
(プログラムを動かすために必要な下準備は後で一から説明していきます。)

プログラムの動きを説明

今回作成したコードは以下のように動作します。
①まず初めの時点でビットコインの価格を取得する

②その後、5秒ごとにビットコインの価格を観察し続ける

③①の取得価格を基準とし、5%以上値下がりしていたら買い付ける。(値上がりしていたら売り注文を入れる)

④基準価格を③の売買価格に変更し、これ以降、再び基準価格から5%上がったら売却、下がったら購入する注文を入れる

⑤この流れを永遠に繰り返す

お気づきと思いますが、このプログラムが正常に回り続けるには、あらかじめ口座に十分な量のビットコインと日本円が入金されていなければなりません。

このアルゴリズムを使う場合、レンジ相場の時は買いと売りを繰り返して利益を狙えるかもしれませんが、一方向に動く相場には注意が必要です。

無限にナンピンを繰り返してしまうことになるかもしれません。
あくまでも、Pythonコードの書き方の参考としてご活用ください。
(加えて言うと、実運用する時はエラーに備える必要もあるでしょう)

なお、当然のことながら、こういったプログラムは無料で作成することが可能です。

プログラムの本体

コード本体はこんな感じです。
行数がすごく少ないのがお分かりいただけるでしょう。
import pybitflyer
import time

api_key = input("api_keyを入力し、Enterを押してください")
api_secret =input("api_secretを入力し、Enterを押してください")

api = pybitflyer.API(api_key=api_key, api_secret=api_secret)

#直近のBTC取引価格
base_price = api.ticker(product_code="BTC_JPY")["ltp"]
print("bot開始時の価格は"+str(base_price)+"です。")


while True:
    time.sleep(5)
    price_now = api.ticker(product_code="BTC_JPY")["ltp"]
    print("現在のBTCJPYは "+str(price_now)+" です。")
    if base_price*0.95 >= price_now:
        print("bitcoin価格が下落しています。成行きで買い注文を入れます。")
        print("bitFlyerのサーバーからの応答は以下です。")
        print(api.sendchildorder(product_code="BTC_JPY",child_order_type="MARKET",side="BUY",size=0.005,minute_to_expire=10000,time_in_force="GTC"))
        base_price = price_now

    elif base_price*1.05 <= price_now:
        print("bitcoin価格が上昇しています。成行きで売り注文を入れます。")
        print("bitFlyerのサーバーからの応答は以下です。")
        print(api.sendchildorder(product_code="BTC_JPY",child_order_type="MARKET",side="SELL",size=0.005,minute_to_expire=10000,time_in_force="GTC"))
        base_price = price_now

    else:
        print("bitcoin価格に大きな変動はありません。")
bitFlyer を使うと、この通り非常に簡単にコードを書くことができます。
API仕様が分かりやすいのと、有志の方がPython用のラッパーを開発してくれているのが理由です。

基本的な注文の出し方や、残高の確認方法は記事の最後でも紹介します。

自動売買ツールを動作させるために必要なもの

さて上のコードを動作させるために必要な準備をしていきましょう。
結論から言うと必要なのは
・Pythonのインストール
・bitFlyerのアカウント
・bitFlyerのAPIキー
・Pythonライブラリ
の4つです。
順番に解説していきますね。

Pythonのインストール

まずは当然のことながらPython3が入っていないとコードを動かすことが出来ません。
まだ入っていない人は、入れておいてください。
以下のサイトを参考にするとスムーズに導入することができるでしょう。

Pythonのインストール方法

bitFlyerのアカウント

次に bitFlyer のアカウントを入手しておきます。
まず、下のリンクから口座開設を行ってください。

無料でbitFlyer口座を開設する

遷移先でメールアドレスを登録し、その後個人情報の入力や本人確認書類の提出を行います。
一般的な口座の開設と手順は全く同じです。
これが済むと、APIキーを発行できるようになります。

bitFlyerのAPIキー

口座開設が完了したら、自分のAPIキーを作成します。
APIキーとは、アカウントを自分のプログラムから操作する時に必要になるパスワードのようなものです。
必要な API キーは
・api_key
・api_secret
の2種類あります。

これから説明する手順を実行することで、同時にこの2つのキーが発行されます。

①bitFlyer lightningの画面に行く

口座開設完了後、 bitFlyer にログインします。
そしてホーム画面からbitFlyer lightningの画面に行きます。
下の画像のところからlightningに行けます
(これはPCの画面のスクショです。)
bitFlyer lightningとは、bitFlyer が提供する中上級者向けのサービスです(仮想通貨FXなんかも出来ます)。
目的のAPIキーの発行も、このbitFlyer lightningから行います。

bitFlyer lightningの画面に行けたら、メニューから「API」を選択します。
ページ下部の「新しい API キーを追加」というところからAPIキーが作成できます。
プログラムから入出金する予定がなければ、この時入出金のチェックボックスは外しておいてもいいかもしれません。
万が一APIキーが盗まれると、いろいろ悪用されてしまう恐れがありますからね。

さて、こうして発行された2種類の API キーをコードを実行した時に入力することになります。

コードの最初の方のinput()のところですね。
※コードの中にAPIキーを直接書くのはセキュリティの観点から好ましくありません。

Pythonライブラリ

さて最後に、今回のスキャルピング bot を作動させるために必要なライブラリをインストールしておきます。
例によってpipでインストールできるので難しいことは何もありません。
ターミナルに以下のように入力してください。
pip3 install pybitflyer
これで準備は完了です。
紹介したコードを動かすのに必要なものは全て揃いました!

Bitcoin売買によく使いそうなコード集

最後に自動売買ツールの開発によく使いそうな bitFlyer用の コードを解説しておきます。
ここに掲載していることよりも細かいことが知りたければ bitFlyer公式APIドキュメントラッパーライブラリのリポジトリ などを参照するとよいでしょう。

・Bitcoin価格(板の中間値)を取得する
print(board["mid_price"])
・直近のBTC取引価格を取得する
ticker = api.ticker(product_code="BTC_JPY") print(ticker["ltp"])
・自分の残高情報を取得する(辞書のリストとして色々な情報が返ってきます)
my_balance = api.getbalance()

#使用可能な自分のbitcoin残高を取得
#わざわざbitcoin_available_listを用意する必要は無いかもしれないが、書き方を思いつかなかった
#JPYを取得したい場合は、x['currency_code'] == 'JPY'とする

bitcoin_available_list = [x['available'] for x in my_balance if x['currency_code'] == 'BTC']
bitcoin_available = float(bitcoin_available_list[0]) if len(bitcoin_available_list) else None
print(bitcoin_available)
・注文を出す
まずは、成行き買い注文を出す方法です。
 market_buy_btc = api.sendchildorder(product_code="BTC_JPY", 
                              child_order_type="MARKET",
                               side="BUY", 
                              size=0.005, 
                              minute_to_expire=10000, 
                              time_in_force="GTC" 
                              ) 
成行き売り注文を出す方法です。
 market_sell_btc = api.sendchildorder(product_code="BTC_JPY",
                              child_order_type="MARKET", 
                              side="SELL", 
                              size=0.005, 
                              minute_to_expire=10000, 
                              time_in_force="GTC" 
                              )
・指値で買い注文を出す
limit_buy_btc = api.sendchildorder(product_code="BTC_JPY", 
                         child_order_type="LIMIT", 
                         side="BUY", 
                         price=5500000, 
                         size=0.005,  
                        minute_to_expire=10000, 
                         time_in_force="GTC" 
                         )

#指値売りは引数をBUYからSELLにすればOK
limit_sell_btc = api.sendchildorder(product_code="BTC_JPY", 
                        child_order_type="LIMIT", 
                        side="SELL", 
                        price=6800000, 
                        size=0.005, 
                        minute_to_expire=10000, 
                        time_in_force="GTC" 
                        ) 
・子注文を全てキャンセルする
print(api.cancelallchildorders(product_code="BTC_JPY"))
先ほどから使用しているchildorder(子注文)とは、基本的に親注文が約定した時に有効になる注文といったものです。
こう書くと基本的には親注文を使った方がいいような気もしますが、bitFlyerでは何か特別なことをしない限り注文は子注文で問題ないようです(というか僕はそうやって運用していました)。

・child注文の履歴を取得
print(api.getchildorders(product_code="BTC_JPY"))
・約定一覧を取得する 31日前までのものしか取得できないっぽい(?)
print(api.getexecutions(product_code="BTC_JPY"))
以上です。
bitFlyer はプログラミング初心者にも非常に優しい取引所だと思います。
コーディング初心者はbitFlyerがベストかもですね。
(裁量でもlightningのbitcoinFX楽しいです笑)

>>無料でbitFlyer口座を開設する
プログラム作成依頼について
「こういうプログラム作って欲しいよ!」という要望がある場合は下記ページより依頼してくださいm(_ _)m

自動売買Pythonプログラムの開発依頼の受け付けを始めました

1週間程度でコードを書いてnoteで公開しようと思います。

スポンサーリンク

SNSシェアお願いします!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA