【Python】GMOコインで仮想通貨注文を全自動化する方法|暗号資産取引所API活用によるビットコイン自動売買実践

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

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

こんな方におすすめ!
  • 仮想通貨・ビットコインの自動取引に興味がある
  • GMOコインの情報を活用してテクニカル分析を実践しビットコインを自動注文できるようになりたい
目次

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

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

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

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

【GMOコイン】仮想通貨チャート分析〜ビットコイン注文自動化に至るまで

本記事では「暗号資産取引所からデータを取得し、チャート分析で買いサインを検知し、ビットコインを購入する」に至る全プロセスをPythonで全て自動化する方法を解説します。

今回例では、仮想通貨(暗号資産)取引所にを採用します。GMOコインが提供するAPI機能は非常に豊富であり、使い勝手が良いのが特徴的です。

【事前準備】チャート分析・仮想通貨自動取引に伴う環境構築

GMOコインのAPIを活用してチャート分析を行い、ビットコイン注文を行うための環境構築が必要となります。

Pythonプログラミング前に以下2点を対応しましょう。

  • GMOコインのAPI情報を取得する
  • Pythonライブラリをインストールする

GMOコイン API情報を取得

今回解説する範囲の機能を実現するには、GMOコインのAPI利用が必須です。

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

GMOコインのAPI情報を取得する方法は、以下の記事で丁寧に解説しています。併せてご覧ください。

Pythonライブラリをインストール|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】GMOコイン APIでチャート分析とビットコイン注文を自動化

実際にPythonプログラムを構築し、GMOコイン APIによる仮想通貨自動売買ツールを作成していきます。

【実践】GMOコインのAPI情報を設定する

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

GMOコインのマイページで取得したAPIキーをもとに"GMOコイン APIキー"部分を書き換え、シークレットキーをもとに"GMOコイン シークレットキー"部分を書き換えた上でコードを実行しましょう。

from time import sleep
from datetime import datetime
import hmac
import hashlib
import requests
import json
import talib
import pandas as pd

API_Key    = "GMOコイン APIキー"         # APIキーを設定
Secret_Key = "GMOコイン シークレットキー"  # シークレットキーを設定

本記事で紹介するGMOコインのAPI機能は「ビットコイン価格取得機能」と「ビットコイン注文機能」がメインになります。

その他にも多数のAPI機能が提供してあり、全て使いこなせると精度高い自動売買ツールが作成できるようになります。GMOコイン APIの使い方は以下の記事で丁寧に解説していますため、併せてご覧下さい。

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

今回プログラムに取り入れるチャート分析手法は「移動平均線によるゴールデンクロス」になります。

ビットコイン価格をもとに短期移動平均と長期移動平均を算出し、ゴールデンクロスとなったタイミングで「買いサイン」と認識するよう設計しており、Pythonコードで書くと以下のように記述できます。

# ビットコイン価格
btc    = []

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


# ビットコイン価格取得
def get_ticker():
    EP   = 'https://api.coin.z.com/public/v1/ticker?symbol=' + "BTC"
    res  = requests.get(EP)
    return res.json()

# 購入サイン検知
while buy_order==False:
    """
    ********************************************************************
    データ取得
    ********************************************************************
    """
    # ビットコイン購入価格
    btc.append(get_ticker()["data"][0]["ask"])

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

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

ゴールデンクロスを検知すると買いサインのbuy_order=Trueのフラグが立つよう設計しています。

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

買いサインフラグ直前のコードをカスタマイズすることで、お好みのテクニカル手法で仮想通貨の自動取引が実現できるようになるはずです。

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

前述で検知したゴールデンクロスの買いサインをトリガーとして、ビットコインを購入するPythonコードを以下に示します。以下のコードを実行すると実際に注文が走るため、利用の際は注意が必要です。

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

# GMO注文コード
def gmo_buy_order(price_value,amount_value):
    # 注文価格・数量設定
    price_value  = 2000000 # 指値価格[円/BTC]
    amount_value = 0.001          # 取引数量[BTC]

    # 注文コード
    timestamp = '{0}000'.format(int(time.mktime(datetime.now().timetuple())))
    method    = 'POST'
    endPoint  = 'https://api.coin.z.com/private'
    path = '/v1/order'
    reqBody = {
        "symbol": "BTC",
        "side": "BUY",
        "executionType": "LIMIT",
        "price": price_value,
        "size": amount_value,
    }

    text = timestamp + method + path + json.dumps(reqBody)
    sign = hmac.new(bytes(Secret_Key.encode('ascii')), bytes(text.encode('ascii')), hashlib.sha256).hexdigest()

    headers = {
        "API-KEY": API_Key,
        "API-TIMESTAMP": timestamp,
        "API-SIGN": sign
    }

    res = requests.post(endPoint + path, headers=headers, data=json.dumps(reqBody))
    print (res.json())

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

    # 注文実行
    gmo_buy_order(price_value,amount_value)

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

本記事でご紹介したプログラミングコードを全量以下に示します。

APIキーとシークレットキー部分を書き換えると、簡単に動作するような仕様となっております。お試しで動かしたい、自動売買の世界を体験してみたい方は、以下のコードをそのまま利用すると良いでしょう。

from time import sleep
from datetime import datetime
import hmac
import hashlib
import requests
import json
import talib
import pandas as pd

API_Key    = "GMOコイン APIキー"         # APIキーを設定
Secret_Key = "GMOコイン シークレットキー"  # シークレットキーを設定


# ビットコイン価格
btc    = []

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


# ビットコイン価格取得
def get_ticker():
    EP   = 'https://api.coin.z.com/public/v1/ticker?symbol=' + "BTC"
    res  = requests.get(EP)
    return res.json()

# 購入サイン検知
while buy_order==False:
    """
    ********************************************************************
    データ取得
    ********************************************************************
    """
    # ビットコイン購入価格
    btc.append(get_ticker()["data"][0]["ask"])

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

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

# GMO注文コード
def gmo_buy_order(price_value,amount_value):
    # 注文価格・数量設定
    price_value  = 2000000 # 指値価格[円/BTC]
    amount_value = 0.001          # 取引数量[BTC]

    # 注文コード
    timestamp = '{0}000'.format(int(time.mktime(datetime.now().timetuple())))
    method    = 'POST'
    endPoint  = 'https://api.coin.z.com/private'
    path = '/v1/order'
    reqBody = {
        "symbol": "BTC",
        "side": "BUY",
        "executionType": "LIMIT",
        "price": price_value,
        "size": amount_value,
    }

    text = timestamp + method + path + json.dumps(reqBody)
    sign = hmac.new(bytes(Secret_Key.encode('ascii')), bytes(text.encode('ascii')), hashlib.sha256).hexdigest()

    headers = {
        "API-KEY": API_Key,
        "API-TIMESTAMP": timestamp,
        "API-SIGN": sign
    }

    res = requests.post(endPoint + path, headers=headers, data=json.dumps(reqBody))
    print (res.json())

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

    # 注文実行
    gmo_buy_order(price_value,amount_value)

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

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

取引所別: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を活用した仮想通貨の自動取引

最後に

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

目次