【Python】テクニカル分析から仮想通貨注文まで全て自動化|暗号資産取引所APIでビットコイン自動売買実践

当ページには広告が含まれています。

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • 仮想通貨・ビットコインの自動取引に興味がある
  • テクニカル分析から仮想通貨注文に至るまでの全てのプロセスをPythonで自動化したい
目次

暗号資産(仮想通貨)の自動取引とは

仮想通貨の自動取引とは、通貨情報参照・決済・送金等の取引関連操作をプログラムで代替すること

自動取引の実装により、手動操作による手間削減はもちろんのこと、仮想通貨収益化プロセスの効率化も大幅に期待できます。

仮想通貨自動売買の実現には「取引所が提供するAPI」の利用が必須となります。APIと聞くと、難しく感じるかもしれませんが、利用方法さえ分かれば意外と簡単に概念も理解できるはずです。本記事でAPI概要説明は割愛していますが、以下の記事で自動売買の仕組みからAPIの概要に至るまで幅広く丁寧に解説しています。

【概要】仮想通貨チャート分析からビットコイン注文を全自動化する方法

本記事では上図に示すような「仮想通貨取引所からデータを取得し、テクニカル分析で買いサインを検知し、ビットコインを購入する」に至る全プロセスをPythonで自動化する方法について解説します。

今回例では、仮想通貨(暗号資産)取引所にを採用します。Coincheckが提供するAPI機能は使い勝手が良く、仮想通貨取引初心者にも優しい仕様であるため、こちらを採用しています。

なお、Coincheck以外の取引所APIを活用しても実装できるよう後述していますため、是非その点も踏まえて確認してみて下さい。

【参考】テクニカル分析採用の自動取引におすすめの暗号資産(仮想通貨)取引所

スクロールできます
取引所名最低取引量現物取引手数料*1入金手数料[円]入金手数料[BTC]出金手数料[円]送金手数料[BTC]信用取引API提供ccxt自動売買おすすめ
0.005 BTC無料無料無料407円0.0005 BTC×★★★★★
0.0001BTCMaker:-0.01%
Taker:0.05%
無料無料0円/
400円(大口出金)
無料×★★★★☆
0.0001BTCMaker:-0.02%
Taker:0.12%
無料無料550円/
770円(3万円以上)
0.0006 BTC×★★★★☆
0.0001 BTC無料無料無料330 円無料××★★★☆☆
表:暗号資産取引所の比較表(最低取引量の単位はBTCで記載)
補足
  1. 現物取引手数料の対象通貨はBTC/JPY。手数料は約定数量 × 上記記載の割合[%]として算出可能。

テクニカル分析を活用した自動取引を実践した場合、短期間での暗号資産の取引回数が増加する傾向にあります。さらに、自動取引の期間にデイトレードを採用した場合、なおさら増加すると言えます。

したがって、テクニカルトレードで取引利益を最大化したい場合は「取引手数料が安い取引所を選択する」ことを推奨します。

上記に示した暗号資産(仮想通貨)取引所は全てテクニカルトレードと相性が良いおすすめ取引所です。また、以下には仮想通貨の自動取引を実践する上で必須となるAPI利用方法についても言及しています。

APIの利用方法をマスターすると自動取引で実現できる幅も広がります。是非合わせてご参考下さい。

スクロールできます
API利用手順確認API利用手順確認API利用手順確認API利用手順確認

仮想通貨チャート分析〜ビットコイン注文自動化に向けた環境設定

Pythonでの仮想通貨取引自動化に際して、2点事前に対応すべき環境設定事項があります。

  • 暗号資産取引所のAPI情報を取得する
  • Pythonライブラリをインストールする

【準備事項】仮想通貨(暗号資産)取引所のAPI情報を取得

今回解説する仮想通貨自動取引機能を実現するには、暗号資産取引所のAPIの利用が必須になります。

APIを活用するには、事前に暗号資産取引所の口座開設を行なっておく必要があります口座開設はスマホと本人確認書類さえあれば10分で手続き完了でき、即日口座開設および暗号資産取引も瞬時に開始できます。

今回はCoinckeckのAPIを活用します。API情報の取得方法は以下をご参考ください。

【準備事項】Pythonライブラリをインストールする

次のようなPythonライブラリを活用して仮想通貨自動取引を実現します。

インストールが未済の方は、事前に対応しておきましょう。

ccxt

仮想通貨取引所のAPIを手軽に活用できるようになるPythonライブラリです。ターミナルやコマンドプロンプトから以下を実行するとインストールできます。

pip3 install ccxt

TA-Lib

Ta-Libはテクニカル分析に役立つライブラリです。以下の手順に従いインストールしましょう。

共通

最も簡単な方法はAnacondaをインストールしてTa-Libを使用する方法です。

Anacondaをインストール

② Anacondaプロンプトを開き、以下を実行

conda install -c conda-forge ta-lib
Mac OSの方はこちら

①Ta-Lib本体をインストール

brew install ta-lib

②Ta-Lib Pythonパッケージをインストール

pip install TA-Lib

【Python実践】テクニカル分析で買いサイン検知・ビットコイン注文自動化

それでは実際に暗号資産(仮想通貨)取引所から取得したデータをもとに、テクニカル分析を実践し、ビットコインを注文するためのプログラムを構築していきます。

【実践】暗号資産取引所のAPI情報を設定する

はじめに、APIを活用するためのコードを以下に示します。

Coincheck取引所で取得したAPIキーは以下の"コインチェックのAPIキー"部分に、シークレットキーは"コインチェックのシークレットキー"部分に書き換えた上でコードを実行しましょう。

import ccxt
import pandas as pd
from time import sleep
import talib

# 取引所APIキー
base = ccxt.coincheck({'apiKey':"コインチェックのAPIキー",
                       'secret':"コインチェックのシークレットキー",
                      })

CoincheckのAPI取得方法およびAPI機能概要について詳しく知りたい方はこちらの記事もご覧ください。

またCoincheck APIを呼び出すためのメソッドとしてccxtを活用しています。

ccxtで取引所指定方法を変更すると(例えば、bitFlyerやBitTradeに変更)、簡単にお好み取引所専用の自動売買ツールを作成することもできます。

ccxtについて詳しく知りたい方はこちらの記事をご覧ください。

【実践】仮想通貨の価格情報から移動平均線・ゴールデンクロスを検知する

テクニカル分析手法は「移動平均線を用いたゴールデンクロス」を採用しています。ゴールデンクロスをもとに買いサインを検知するイメージであり、Pythonコードで書くと以下のように記述できます。

# リアルタイムビットコイン価格
btc_price = []     

# ビットコイン購入サイン
buy_order = False

while buy_order==False:
    """
    ********************************************************************
    データ取得
    ********************************************************************
    """
    # ビットコイン価格
    ticker = base.fetch_ticker(symbol="BTC/JPY")

    # ビットコイン購入価格
    btc_price.append(ticker["ask"])

    # 短期移動平均線(5s)
    Ema_5s = talib.EMA(pd.Series(btc_price),   # データ
                       5)                      # 移動平均

    # 長期移動平均線(20s)
    Ema_20s = talib.EMA(pd.Series(btc_price),  # データ
                        20)                    # 移動平均
    
    # 進捗
    if len(Ema_20s)>21:
        print("最新価格: " + "5s移動平均("+str(Ema_5s[len(Ema_5s)-1])+")" + ", 20s移動平均("+str(Ema_20s[len(Ema_20s)-1])+")")
    
    """
    ********************************************************************
    テクニカル分析|リアルタイム移動平均線(ゴールデンクロス検知)
    ********************************************************************
    """
    # 上昇トレンド検知
    if len(btc_price)>30:
        if (Ema_5s[len(Ema_5s)-2] - Ema_20s[len(Ema_20s)-2] <0) & (Ema_5s[len(Ema_5s)-1] - Ema_20s[len(Ema_20s)-1] >0):
            
            # メッセージ
            print("ゴールデンクロス発生")
            
            # 購入サイン更新
            buy_order = True
        
    # 待機時間
    sleep(2)

上記の例では数秒間隔でCoincheckからビットコイン価格を取得しながら、短期移動平均線(Ema_5s)と長期移動平均線(Ema_20s)を計算し、ゴールデンクロスを導出しています。

また、ゴールデンクロスが検知できたタイミングで買いサインbuy_order = Trueというフラグが立つようにコーディングしています。

ゴールデンクロスを採用したテクニカル分析について詳しく知りたい方はこちらの記事をご覧下さい。

ゴールデンクロス以外のテクニカル手法を活用して仮想通貨の自動取引を実現したい方は、本記事最下部の「テクニカル分析を採用した仮想通貨取引の解説記事」をご覧下さい。

【実践】仮想通貨チャート分析結果をもとにビットコインを注文

前述のテクニカル分析でゴールデンクロスを検知するとbuy_order = Trueというフラグが立つよう設定されています。そのフラグが立ったことをトリガーとしてビットコインが自動購入されるコードを以下に示します。

コード

ビットコイン購入は、ccxtのcreate_order()メソッドに対して指値価格と取引量[BTC]を与えることで実現できます。このコードを実行すると、実際に注文が走ります。コード実行の際は注意が必要です。

"""
********************************************************************
ビットコイン購入注文
********************************************************************
"""

if buy_order == True:
    
    # 注文価格・数量設定
    price_value  = btc_price[-1] # 指値価格[円/BTC]
    amount_value = 0.005         # 取引数量[BTC]

    # 注文実行
    order = base.create_order(
                    symbol = 'BTC/JPY',     # 取引通貨
                    type   = 'limit',       # 注文種別(limit:指値注文, market:成行注文)
                    side   = 'buy',         # 買い注文
                    amount = amount_value,  # 取引数量
                    price  =price_value,    # 指値価格
                    )

    # 結果出力
    print(order)

出力イメージ

ビットコインの注文が正常に走ると、以下のような出力結果が得られます。

# 出力イメージ
# {'info': {'success': True, 
#           'id': 'xxxxxxxx', 
#           'amount': '0.005', 
#           'rate': '2000000.0', 
#           'order_type': 'buy', 
#           'pair': 'btc_jpy', 
#           'created_at': '2022-08-09T23:01:55.000Z', 
#           'market_buy_amount': None, 
#           'stop_loss_rate': None}, 
#           'id': 'xxxxxxx'}

【Python】ゴールデンクロス買いサイン検知・ビットコイン自動売買

本日ご紹介したコードを全て以下にまとめました。API情報の書き換え部分さえ修正いただければ、ほぼコピペで利用できるコードとなっています。すぐに自動取引したい・動作確認を優先したい方はこちらを活用ください。

import ccxt
import pandas as pd
from time import sleep
import talib

# 取引所APIキー
base = ccxt.coincheck({'apiKey':"コインチェックのAPIキー",
                       'secret':"コインチェックのシークレットキー",
                      })



# リアルタイムビットコイン価格
btc_price = []     

# ビットコイン購入サイン
buy_order = False

while buy_order==False:
    """
    ********************************************************************
    データ取得
    ********************************************************************
    """
    # ビットコイン価格
    ticker = base.fetch_ticker(symbol="BTC/JPY")

    # ビットコイン購入価格
    btc_price.append(ticker["ask"])

    # 短期移動平均線(5s)
    Ema_5s = talib.EMA(pd.Series(btc_price),   # データ
                       5)                      # 移動平均

    # 長期移動平均線(20s)
    Ema_20s = talib.EMA(pd.Series(btc_price),  # データ
                        20)                    # 移動平均
    
    # 進捗
    if len(Ema_20s)>21:
        print("最新価格: " + "5s移動平均("+str(Ema_5s[len(Ema_5s)-1])+")" + ", 20s移動平均("+str(Ema_20s[len(Ema_20s)-1])+")")
    
    """
    ********************************************************************
    テクニカル分析|リアルタイム移動平均線(ゴールデンクロス検知)
    ********************************************************************
    """
    # 上昇トレンド検知
    if len(btc_price)>30:
        if (Ema_5s[len(Ema_5s)-2] - Ema_20s[len(Ema_20s)-2] <0) & (Ema_5s[len(Ema_5s)-2] - Ema_20s[len(Ema_20s)-1] >0):
            
            # メッセージ
            print("ゴールデンクロス発生")
            
            # 購入サイン更新
            buy_order = True
        
    # 待機時間
    sleep(2)
    
    
    
"""
********************************************************************
ビットコイン購入注文
********************************************************************
"""

if buy_order == True:
    
    # 注文価格・数量設定
    price_value  = btc_price[-1] # 指値価格[円/BTC]
    amount_value = 0.005         # 取引数量[BTC]

    # 注文実行
    order = base.create_order(
                    symbol = 'BTC/JPY',     # 取引通貨
                    type   = 'limit',       # 注文種別(limit:指値注文, market:成行注文)
                    side   = 'buy',         # 買い注文
                    amount = amount_value,  # 取引数量
                    price  =price_value,    # 指値価格
                    )

    # 結果出力
    print(order)

【仮想通貨・ビットコイン】自動取引実践法・その他優良情報

最後までご覧いただきありがとうございました。当サイトでは仮想通貨・ビットコインにおける多様な自動取引手法の解説記事を多数取り扱っております。

取引所別:APIの取得手順と使い方の解説記事

スクロールできます
対応言語記事名
Python【GMOコイン】 APIで仮想通貨取引の自動化
Python【BitTrade】 APIで仮想通貨取引の自動化
Python【bitbank】 APIで仮想通貨取引の自動化
Python【Coincheck】APIで仮想通貨取引の自動化
Python【bitFlyer】APIで仮想通貨取引を自動化
Python【BITPOINT】APIで仮想通貨取引の自動化

機械学習やテクニカル分析を採用した仮想通貨取引の解説記事

スクロールできます
対応言語記事名指標
共通自動売買の種類・自作時のポイント全て
Pythonリアルタイムチャート分析基礎トレンド
Python移動平均線トレンド
Pythonゴールデンクロス・デッドクロストレンド
Pythonアービトラージ(裁定取引)時間・値幅
Pythonボリンジャーバンドオシレータ
PythonMACDオシレータ
PythonRSIオシレータ
Python時系列予測モデルの構築機械学習・AI
【トレンド】:値動きが上昇・下降どちらのトレンドなのか判断に有効
【オシレータ】:現在の相場に対する買われすぎ・売られすぎの判断に有効

その他仮想通貨自動トレード解説記事

スクロールできます
対応言語記事名
Python【データ収集】仮想通貨の過去データを大量取得する方法
Python【初心者向け】ccxtを活用した仮想通貨の自動取引
Node.js【初心者向け】ccxtを活用した仮想通貨の自動取引

最後に

この記事が気に入ったら
フォローしてね!

目次