ccxtの使い方をpython自動売買botで解説【初心者向け実践】

プログラミング 仮想通貨

#本記事はプロモーションを含みます。

あなた

あなた
「仮想通貨の自動売買botのことを調べてると、ccxtっていう言葉をよく見かけるな。自動売買botを作るために便利なのはなんとなく分かるんだけど、もっと初歩的な使い方を勉強したいな。」

そんなお悩みにお答えします。

仮想通貨の自動売買botに興味がわいていろいろと調べていたら、サンプルコードにccxtという文字をよく見かけますよね。

このccxt、仮想通貨取引所をプログラミングで操作するためのライブラリです。例えば、ビットコインの買い注文を出したり、価格情報を取得したりできます。

しかも、ccxtは大手の仮想通貨取引所ほぼ全てに対応。世の中にはたくさん仮想通貨取引所がありますけど、ccxt一つで色々な取引所に対応した自動売買botが作れるようになります。

実際にccxtを使って自動売買できるbotの具体例を見ながら、ccxtの使い方をマスターしちゃいましょう。これであなたも、仮想通貨botterへの最初の第一歩を踏み出せるかも。

ご注意
本記事は、自動売買botのプログラミング学習を目的としています。仮想通貨の取引をおすすめしているわけではありません。この記事や本サイトの情報を参考に仮想通貨のプログラムを動かす場合は、全て自己責任でお願いいたします。免責事項に記載の通り、本サイトの情報を参考にして発生したいかなる損害も責任を負いません。

この記事で分かること

  • ccxtの使い方
  • ccxtを活用した自動売買botの動かし方

ccxtの使い方が分かればpython自動売買botが作れる

ccxtでpython仮想通貨botを作る

仮想通貨の自動売買botは、取引所のAPIを使って作ります。

APIって何?
-> プログラミングで仮想通貨取引所を操作するための窓口。APIを通して、プログラミングで買い注文を出したり、価格情報を取得したりできる。

でも、例えばコインチェックとバイナンスの両方で自動売買botを試してみたい!なんて思ったら、どうやって作ればいいでしょうか?

コインチェックとバイナンスそれぞれの仮想通貨取引所のAPIを理解して、調整して、検証して…っていうのはかなり手間ですよね。

そこで、ccxtの出番。ccxtライブラリを使えば、ほぼ全ての仮想通貨取引所に対応した自動売買botを簡単に作ることができちゃうんです。

有名な取引所ならほぼ対応しているので、あなたの好きな仮想通貨取引所に対応した自動売買botをccxtで一緒に作ってみましょう。

ccxtの使い方を学ぶ前にどこか一つの取引所APIを学ぶのもあり

ccxtを使い始める前に、どこでもいいので仮想通貨取引所のAPIを一つ学んでおくのもアリです。

なぜなら、仮想通貨取引所のAPIの使い方や仕組みが分かっていると、ccxtを使って何をしているのかもすぐに理解できるから。

本ブログでは、過去にこの4つの仮想通貨取引所APIの使い方を解説してきました。

比較記事もありますので、もし興味が湧いたら目を通してみてくださいね。もちろん、後からでもOKです。

仮想通貨取引所のAPIの使い方を学ぶために、そして取引所ごとの違いを学ぶために、それぞれ実際にAPIを動かしながら解説しています。

ccxtを使ったpython自動売買botを動かしてみよう

ccxtで作ったpython仮想通貨botを動かす

それでは、ここからccxtを使って簡単な自動売買botプログラムを動かしていきます。

こちらの記事で紹介している自動売買botを活用してみましょう。

ccxtを使って自動売買botを作る流れは、こんな感じです。

  1. 仮想通貨取引所の口座を開設する
  2. Pythonを動かせる環境を作る
  3. 仮想通貨取引所のAPIキーを発行する
  4. ccxtを使った簡単な自動売買botを作る
  5. 自動売買botを動かしてみる

一つずつ、掘り下げていきます。

仮想通貨取引所の口座を開設する

自動売買botを動かすために、あらかじめ仮想通貨取引所の口座を開設しておきます。

本記事ではコインチェックのAPIを使った自動売買botを解説するので、コインチェックの口座を開設しておくと理解しやすいです。

口座の開設には時間がかかることもあるので、先に申し込んで開設しておけば自動売買botを理解して動かすところまでスムーズに進めることができます。

コインチェックで口座を開設する(公式サイト)

Pythonを動かせる環境を作る

続いて、あなたのパソコンにPythonというプログラミングを動かせる環境をセットアップします。

Pythonプログラミングにある程度慣れている人は、この項目は飛ばして次に進みましょう!

あなた

あなた
「自動売買botには興味あるけど、Pythonのプログラミングなんてやったことないよ!?」

そんなあなたへ、誰でも必ずPythonプログラミングができるように詳細な解説記事をまとめてあります。Macで入門!というタイトルですが、もちろんWindowsでも大丈夫なのでご安心ください。

この記事を参考に、まずはPythonを動かせる環境をパソコンにセットアップしてしまいましょう。

プログラミング怖い!って思っていませんか?Pythonを完璧に理解する必要はないので大丈夫。まずは動かして体験してみることが大事です。

仮想通貨取引所のAPIキーを発行する

続いて、APIキーを発行します。APIは、仮想通貨取引所をプログラミングで操作するための窓口。そのAPIを使うために必要な鍵が、APIキーです。

APIキーは、家の鍵みたいなものです。鍵を開けることができれば誰でもあなたの口座にアクセスできちゃうので、取り扱いには注意してくださいね。

コインチェックのAPIキーの発行方法は、以下のコインチェックAPIの解説記事で説明しています。

APIキーの発行にはもちろんあなたのコインチェック口座が必要になるので、あらかじめ口座を開設しておくのを忘れずに。

くどいですが、せっかく自動売買botを理解して動かす準備ができたのに、口座開設を待っているせいで動かせない!っていう思いをするのは時間がもったいないですからね。

コインチェックで口座を開設する(公式サイト)

ccxtを使った自動売買botを作る

さて、本番です。ccxtを使った自動売買botを作っていきます。

まずは自動売買botを動かしてみる体験が大事なので、以下の簡単な自動売買botをコピペで使っちゃいましょう。

何をしているのかなるべく分かりやすくなるように、とにかくシンプルにしてあります。

import time
import pandas as pd
import ccxt
import talib as ta

exchange = ccxt.coincheck()
exchange.apiKey = 'あなたのAPIキー'
exchange.secret = 'あなたのシークレットキー'

crypto = 'BTC'          # 取引する仮想通貨
currency = 'JPY'        # 日本円建て
interval = 60*5         # チャート足(60*5なら 5分足)
duration = 20           # 移動平均のサイズ
trading_amount = 30000  # 一度の売買で使う金額(単位=currency)

symbol = crypto + '/' + currency
position = 0            # 自動売買中に持っているポジション
last_rate = 0           # 最後に約定したレート(単位=currency)

df = pd.DataFrame()

while True:
  time.sleep(interval)

  ticker_info = exchange.fetch_ticker(symbol)
  df = pd.concat([df, pd.DataFrame({'price': [ticker_info['last']]})], ignore_index=True)

  if len(df) < duration:
    continue

  df['upper'], df['middle'], df['lower'] = ta.BBANDS(df['price'], timeperiod=duration, nbdevup=2, nbdevdn=2, matype=0)

  if position:
    if df['price'].iloc[-1] > df['upper'].iloc[-1] and last_rate < df['price'].iloc[-1]:
      exchange.create_order(symbol=symbol, type='market', side='sell', amount=position)
      print('sell ' + str(position) + crypto + ' @' + str(ticker_info['last']))
      position = 0

  else:
    ticker_balance = exchange.fetch_balance()
    if float(ticker_balance[currency]['free']) > trading_amount and df['price'].iloc[-1] < df['lower'].iloc[-1]:
      amount = round(trading_amount / float(ticker_info['last']), 5)
      exchange.create_order(symbol=symbol, type='market', side='buy', amount=amount)
      print('buy ' + str(amount) + crypto + ' @' + str(ticker_info['last']))
      position = amount
      last_rate = ticker_info['last']

  df = df.iloc[1:, :]

たったの50行。これを main.py といったファイルにコピペしてしまえば、ひとまず動く自動売買botの出来上がり。

この時点では、まだプログラムの仕組みがわからなくても大丈夫です。動かした後に、ひとつずつ解説します。

  1. まずは自動売買botを動かして体験する
  2. 動きが分かったらプログラムを理解してみる

プログラミングに限らず、新しいことを学び始めるにはまず体験が大事。

自動売買botを動かす体験をしてみて、その後にプログラムを理解する。最短ルートでいきましょう。

カスタマイズが必要なポイント

コピペしたプログラムの中で、以下の部分をあなたの発行したAPIキーに書き換えてください。

exchange.apiKey = 'あなたのAPIキー'
exchange.secret = 'あなたのシークレットキー'

例えば、あなたのAPIキーが ABC、シークレットキーが DEF なら、こんな感じに書きます。

exchange.apiKey = 'ABC'
exchange.secret = 'DEF'

これで、あなたの自動売買botを動かす準備ができました!

自動売買botを動かしてみる

それでは、自動売買botを動かします。動かす前に、必要なライブラリだけインストールしておきましょう。

ライブラリのインストール方法は簡単。Macならターミナル、Windowsならコマンドプロンプトを開いて、以下のコマンドを打ち込むだけです。

Pythonの解説記事で環境をセットアップした方は、Atomエディタの左下にある + ボタンを押せばターミナルが出てきますよ。

pip install ccxt
pip install ta-lib

本記事で紹介している自動売買botは、ccxt に加えて TA-lib というライブラリも使っているので、この2つのライブラリをインストールします。

ちなみに、ccxtとTA-libは、以下の略称です。

  • ccxt:Crypto Currency eXchange Trading
  • TA-lib:Technical Analysis Library

ccxtは、仮想通貨取引所のAPIを操作するためのライブラリ。TA-libは、テクニカル分析用のライブラリ。名前の通りですね。

ccxt と ta-lib をインストールできたら、あとはターミナルで以下のコマンドを打ち込んで動かしてみましょう。

Python3 main.py

これで、自動売買botが動き始めました!コピペしたコードを特に修正してなければ、売買されるとこんな表示が出力されるはずです。

buy 0.00237BTC @4226513.0
sell 0.00237BTC @4227698.0
buy 0.00237BTC @4226082.0
sell 0.00237BTC @4226370.0
...

この例は、わざと売買が発生しやすくなるように設定した別の取引所の結果なので、あくまで参考例として見てください。

本記事で紹介しているbotは、そのままの設定で使うと売買の発生がそんなに多くありません。

価格の推移によっては売買が1日以上発生しないこともあるので、気長に待ってみてくださいね。

ccxtの使い方をpython自動売買botから理解しよう

ccxtで作ったpython仮想通貨botを理解する

自動売買botを動かせるようになったところで、今度はプログラムそのものを理解していきます。

自分で何が起こっているのか分からないプログラムは、動かしていても不安ですからね。

セクションごとに分けて、ひとつずつ解説していきます。一緒に理解してみましょう!

必要なライブラリをインポートする

import time
import pandas as pd
import ccxt
import talib as ta

最初は、ライブラリをインポートするセクション。

timeは定期的な処理を実行するために、pandasはテクニカル分析のための価格情報を操作するために、それぞれ使います。

ccxt と talib は、もう説明不要ですね。talibは、プログラムの中では ta と書いて使えるようにしてあります。

仮想通貨取引所のAPIを操作するインスタンスを作る

exchange = ccxt.coincheck()
exchange.apiKey = 'あなたのAPIキー'
exchange.secret = 'あなたのシークレットキー'

ここでは、あなたの使う仮想通貨取引所のインスタンスを作っています。APIキーとシークレットキーは、すでに設定した文字列を貼り付ければOKです。

あなた

あなた
「coincheckって書いてあるけど、もしかしてbitbankって書きなおすと動くの?」

そう思ったあなた、鋭い!その通りです。ここがまさにccxtの強み。

自動売買したい仮想通貨の銘柄や金額を決める

crypto = 'BTC'          # 取引する仮想通貨
currency = 'JPY'        # 日本円建て
interval = 60*5         # チャート足(60*5なら 5分足)
duration = 20           # テクニカル分析に使う移動平均のサイズ
trading_amount = 30000  # 一度の売買で使う金額(単位=currency)

symbol = crypto + '/' + currency

このセクションでは、あなたが自動売買する条件を設定します。

全てコメントを入れてある通りですが、どんな銘柄をどれくらいの金額で売買する?といった設定情報ですね。最後のsymbolは、この例だと "BTC/JPY" という文字を作っています。

なお、trading_amountの金額を小さく設定しすぎると、売買ができなくなるので要注意。コインチェックの公式ページによると、最小の取引単位は0.005BTC以上かつ日本円で500円相当額以上と書かれています。

2024年3月現在のビットコインの価格は大体1,000万円なので、0.005BTC = 約50,000円(0.005BTC x 10,000,000円)以上に設定しておく必要があります。500円以上にもなっているので問題なしですね。

自動売買に必要なデータを格納する場所を作る

position = 0            # 自動売買中に持っているポジション
last_rate = 0           # 最後に約定したレート(単位=currency)

df = pd.DataFrame()

このセクションでは、自動売買中に必要なデータを格納する変数を作っています。

positionは、自動売買中にどれだけの仮想通貨を買ったのか。last_rateは、最後に買った時のレートです。

df は DataFrame(データフレーム)の略で、価格情報を貯めてテクニカル分析を計算するために後から使います。

定期的に処理を実行する

while True:
  time.sleep(interval)

ここは、定期的にプログラムを実行するための設定箇所。

interval という変数に設定した間隔で、この後に続くプログラムを定期的に動かします。

仮想通貨取引所から価格データを取得して更新する

ticker_info = exchange.fetch_ticker(symbol)
df = pd.concat([df, pd.DataFrame({'price': [ticker_info['last']]})], ignore_index=True)

ここでようやく、ccxtから作ったインスタンスのexchangeが出てきましたね。

fetch_ticker に symbol という変数を渡しています。この例では symbol = BYC/JPY なので、すなわちビットコインの情報を取得しています。

そして、取得した ticker_info(銘柄情報)の中にある 'last' という項目に最後の約定レートが入っているので、それをdf(データフレーム)へ連結(concat)。

この処理が繰り返されるたびに、df(データフレーム)の中にテクニカル分析に必要な価格情報がたまっていくわけですね。

価格データが必要な分だけ貯まるのを待つ

if len(df) < duration:
	continue

df(データフレーム)の中に、テクニカル分析に必要な価格情報がまだ貯まりきっていない場合、先には進まないようにしています。

df(データフレーム)のlen(length=長さ)がduration(必要な長さ)より小さい場合は頭に戻る、という意味です。

テクニカル分析の計算をする

df['upper'], df['middle'], df['lower'] = ta.BBANDS(df['price'], timeperiod=duration, nbdevup=2, nbdevdn=2, matype=0)

このセクションでは、ta(TA-lib)を使ってテクニカル分析の指標を計算しています。

使っているテクニカル指標はボリンジャーバンド。ものすごくシンプルな指標です。

ボリンジャーバンドって何?
-> 「将来の価格はだいたいこの価格帯の中に収まるだろう」という統計学を応用したテクニカル指標のひとつ。統計学上、ボリンジャーバンドの+/-2σ(標準偏差)の範囲内に収まる確率は約95.4%になる。
引用:マネックス証券

upper が +2σ、lower が -2σ を表しています。TA-libを使うことで、ボリンジャーバンドの計算もたった1行で終わり。便利ですね。

条件のあうタイミングで売る

if position:
		if df['price'].iloc[-1] > df['upper'].iloc[-1] and last_rate < df['price'].iloc[-1]:
				exchange.create_order(symbol=symbol, type='market', side='sell', amount=position)
				print('sell ' + str(position) + crypto + ' @' + str(ticker_info['last']))
				position = 0

ここから、自動売買をするセクションです。まずは売るところから。

すでにポジションを持っている場合に、価格情報を比較して売る条件を判断しています。具体的には以下の通り。

  • ボリンジャーバンドより価格が上回っているか?
  • 最後に買ったレートよりも価格が高くなっているか?

ボリンジャーバンドより価格が上回っている時 = 統計学上の見込みより大きな価格変動があった時。

かつ、最後に買ったレートよりも価格が高くなっている時 = 売買の差額で利益が出る時。

この2つの条件が揃ったタイミングで、ccxtで作ったexchangeインスタンスのcreate_orderで売り注文を出していきます。

銘柄(symbol)を、成行(market)で売る(sell)、今持っている量(position)を、ですね。読んだままで分かりやすいです。

最後に、売った時の情報をprintで出力しつつ、positionをゼロにリセットします。

条件のあうタイミングで買う

else:
		ticker_balance = exchange.fetch_balance()
		if float(ticker_balance[currency]['free']) > trading_amount and df['price'].iloc[-1] < df['lower'].iloc[-1]:
				amount = round(trading_amount / float(ticker_info['last']), 5)
				exchange.create_order(symbol=symbol, type='market', side='buy', amount=amount)
				print('buy ' + str(amount) + crypto + ' @' + str(ticker_info['last']))
				position = amount
				last_rate = ticker_info['last']

ここも自動売買をするセクションです。今度は買う方ですね。

ポジションを持っていない場合に、買う時の条件を判断しています。具体的には以下の通り。

  • 自動売買したい金額があなたの仮想通貨取引所の口座に入っているか?
  • ボリンジャーバンドよりも価格が下回っているか?

まず、買うために必要なお金があなたの口座に入っているかをチェック。

その上で、ボリンジャーバンドより価格が下回っている時 = 統計学上の見込みより大きな価格変動があった時を狙っています。

この2つの条件が揃っているタイミングで、ccxtで作ったexchangeインスタンスのcreate_orderで買い注文を出していきます。

銘柄(symbol)を、成行(market)で買う(buy)、購入したい量(amount)を、です。これも読んだままで分かりやすいですね。

実際に購入する量(amount)は、自動売買する金額(trading_amount)と最新のレート(ticker_info['last'])から計算します。

最後に、買った時の情報をprintで出力して、買った量(position)とそのレート(last_rate)を保存。この情報は、売る時に使っていましたよね。

価格データを更新する

df = df.iloc[1:, :]

このセクションは、df(データフレーム)の価格情報を更新しています。

パッと見で難しく見えるかもしれませんが、価格情報を貯めているメモリを一つずらしているイメージです。

そのまま価格情報を貯め続けるとdf(データフレーム)のサイズがどんどん大きくなるので、テクニカル分析の計算に必要な分(duration)のメモリ領域をぐるぐる使いまわしています。

ccxtの使い方が分かったら応用してみよう

ccxtの使い方を応用してみよう

本記事の自動売買botの例では、coincheckを使っていました。

でも、ccxtはたくさんの仮想通貨取引所に対応しているんでしたよね。

いくつか応用例を紹介しますので、あなたのオリジナルbotも作ってみましょう。

応用例その1:他の仮想通貨取引所に対応させる

まず最初にやってみるのは、他の仮想通貨取引所への対応。ccxtの1番の強みです。

例えば、現在coincheckに対応している自動売買botをbitbankに対応させるには、以下のように修正するだけです。

exchange = ccxt.bitbank()

あとはAPIキーとシークレットキーをbitbankのものに書き換えれば、すぐに動き出します。便利ですね!

同じ要領で、バイナンスに対応させるのも簡単です。そう、以下の通り書き換えるだけ。

exchange = ccxt.binance()

もちろんAPIキーとシークレットキーを書き換えるのも忘れずに。

応用例その2:指値注文に変更する

本記事で紹介している自動売買botは成行で注文していますが、例えば指値注文にすることもできます。

create_orderの部分を以下の通り書き換えてみましょう。

exchange.create_order(symbol=symbol, type='limit', side='buy', amount=amount, price=price)

変更した部分は2つ。type を limit にして、price を追加しました。

priceに入れる金額は、例えば最新の価格より少し低めの値段を設定しておくと、成行で買うより安く買えるかもしれません。売る時も同様で、少し高めに設定しておくとよいかもしれませんね。

ccxtなら、オーダーの種類を指定するのもこんなに簡単なんです。

ccxtの応用例は他にもたくさん

ccxtで使える機能は、他にもたくさんあります。以下のコードで、ccxtで使える機能を探すことができますよ。

print(exchange.has)

例えば、ccxt.coincheck() でインスタンスを作った後にこのコードを実行すると、コインチェックで使える機能一覧を見ることができます。

使える機能には True と書かれているので、対応機能を見ながらこんな感じでccxtを活用してくと便利です。

  • 対応しているところは、ccxtを使う
  • 対応していないところは、仮想通貨取引所ごとのAPIを使う

なるべくccxtを活用しておけば、簡単に修正するだけで色々な仮想通貨取引所の自動売買を試すことができますね。

ccxtの使い方をマスターすればpython自動売買botも楽勝で作れる

ccxtの使い方をマスターしてあなたオリジナルのpython仮想通貨botを作ろう

ccxtの使い方について、簡単な自動売買botプログラムを参考に解説してみました。

最初はccxtの使い方を網羅しようと思ったのですが、それだといかにも教科書で勉強しているみたいで面白くないですよね。

ccxtを実際にどう使っているのか、具体例を体験してみたことできっと理解が深まったはずです。

あなた

あなた
「ここをもう少しアレンジしたら、もっと売買が発生して利益を出せるかも?」

そんな考えが浮かんだら、ccxtの使い方がだんだん分かってきた証拠。ccxtをもっと使いこなして、あなただけのオリジナル自動売買botを作ってみてくださいね!

コインチェックで口座を開設する(公式サイト)