pythonで自動売買を作ってみたいんだけど、どうしたらいいの?
そんな悩みを解決する記事を書きました。
初心者が自動売買を作ろうとするとどうしたらいいか分からないですよね。
「初心者でも自動売買を開発できるようになりたい」
そんな方に向け、簡単なプログラムを組めるように手順に沿って解説します。
pythonのライブラリ「ccxt」を使うと簡単に売買できるようになります。
ccxtの説明は簡単に済ませて、実際に手を動かして感覚を掴めるような内容となっていますのでぜひ最後までご覧になってください。
- この記事で分かること
- ccxtとは
- ccxtのインストール方法
- ccxtの使い方
仮想通貨自動売買の前提条件 APIの取得
自動売買を行うためには仮想通貨取引ののAPIの取得が必要です。
まだの方は以下の記事を参考にAPIを取得してみてください。
国内暗号資産取引所
海外暗号資産取引所
pythonのライブラリccxtとは
一応ccxtについて簡単に説明しておきます。
手を動かして覚えればいいのでccxtについてはさらっと読み流すだけでOKです。
ccxtって何??
自動売買を効率よく開発するならpythonのccxtというライブラリを導入することをオススメします。
様々な仮想通貨取引所のAPIを統一的な形で利用できるようにするPythonライブラリです。
ccxtを使用することで、異なる取引所に対するトレードやデータ取得の処理を、ほぼ同じコードで実装することができます。
異なる取引所のAPIを学ぶ手間を省き、より効率的にトレードボットやデータ収集ツールを開発が可能となります。
簡単にうと
異なる取引所のAPIを効率よく使えるするようにするツール
です。
pythonライブラリccxtのインストール方法
こちらも簡単に説明します。
インストール方法は以下のようになります。
- pipを使用している場合
-
pip install ccxt
- pipenvを使用している場合
-
pipenv install ccxt
以下を参考にディレクトリの環境を整えてください。
国内仮想通貨取引所
海外仮想通貨取引所
ccxtの基本的なメソッドの使い方
各メソッドを簡単に解説します。
本来APIを使う場合はエラー処理が必要となりますが、コードが長くなってしまうのでここでは省きます。
エラー処理のコードについては次の章で簡単に説明します。
どの様にメソッドが動作しているかは一旦置いておいて、実際に動かしながら感覚を掴みましょう!
以下は変更された表形式です。各項目に番号が連番で振られています。
項目 | メソッド名 | 説明 |
---|---|---|
1 | fetch_trades(symbol) | 指定された通貨ペアの最新トレード履歴を取得します。取引の詳細な情報が含まれます。 |
2 | fetch_order_book(symbol) | 指定された通貨ペアのオーダーブック情報を取得します。売り注文と買い注文の一覧や価格が含まれます。 |
3 | fetch_ohlcv(symbol, timeframe) | 指定された通貨ペアおよび時間枠のローソク足データを取得します。ローソク足データには開始時刻、終了時刻、高値、安値、終値などが含まれます。 |
4 | fetch_ticker(symbol) | 指定された通貨ペアの最新のティッカー情報を取得します。最終取引価格や24時間の取引量などが含まれます。 |
5 | fetch_order(id, symbol) | 指定された注文 ID の注文情報を取得します。注文のステータスや細かい詳細が含まれます。 |
6 | fetch_my_trades(symbol) | ユーザーの取引履歴を取得します。自分のアカウントに関連する取引情報が含まれます。 |
7 | fetch_open_orders(symbol) | 指定された通貨ペアのオープンな注文一覧を取得します。未約定の注文が含まれます。 |
8 | create_order(symbol, side, type, amount) | 指定された通貨、数量、で注文方法(成行又は、指値)で注文を作成します。 |
9 | cancel_order(id, symbol) | 指定された注文 ID の注文をキャンセルします。未約定の注文を取り消す操作です。 |
- symbol
-
主に以下の様にsymbolを入れます。
'BTC/USDT' 'ETH/USDT' 'ADA/USDT' その他シンボル
- timeframe
-
'1m' # 1分ごとのデータ '5m' # 5分ごとのデータ '1h' # 1時間ごとのデータ '1d' # 1日ごとのデータ その他timeframe
- id
-
取引の際発行されるIDです。
取引所によってidが異なりますが、以下はMEXCのidの例となります。
'C01__370000000000000033'
- type
-
取引方法を指定します。
'limit' # 指値 'market' # 成行
- side
-
売りか買いかを指定します。
'buy' # 買い 'sell' # 売り
- プログラミングに興味のある方
- アプリケーション開発をやってみたい方
- 昔プログラミングに挫折した方
- プログラミング学校が高いと思っている方
脱初心者のためには独学だと限界があります。
「買い切り」でコンパクトで質の高い動画を100本以上揃え、受講期間なしで自由に学ぶことのできるオススメのオンラインスクールです!
- 10~20分の動画講義が100本以上
- 回数無制限の質問対応
- 買い切りで受講期間制限なし
\ 脱初心者 /
ここから簡単なコードを紹介します。
- 1.fetch_trades(symbol)
-
以下はbybit.pyの全体のコードとなります。
import ccxt import settings class MexcApiClient(object): def __init__(self, api_key=settings.mexc_api_key, secret_key=settings.mexc_secret_key): self.mexc_client = ccxt.mexc({'apiKey': api_key, 'secret': secret_key}) def get_market_currencies(self): currencies = self.mexc_client.load_markets() print(currencies) # 以下を追加 def get_balance(self): get_balance = self.mexc_client.fetch_balance() print(get_balance)
以下はmain.pyの全体のコードとなります。
イーサリアムの通貨ペアのトレード履歴が欲しい場合は’ETH/USDT’と引数に渡すことで得られることができます。
以下の場合、指定された通貨とはBTC/USDTとなります。
from crypt_api.mexc import MexcApiClient if __name__ == '__main__': mexc_api = MexcApiClient() # 以下呼び出し方 mexc_api.get_trades('BTC/USDT')
- 2.fetch_order_book(symbol)
-
def get_order_book(self, symbol): order_book = self.mexc_client.fetch_order_book(symbol) print(order_book)
mexc_api.get_order_book('BTC/USDT')
- 3.fetch_ohlcv(symbol, timeframe)
-
def get_ohlcv(self, symbol, timeframe): ohlcv = self.mexc_client.fetch_ohlcv(symbol, timeframe) print(ohlcv)
以下のコードはBTC/USDTの1時間のローソク足の情報を取得します。
mexc_api.get_ohlcv('BTC/USDT', '1h')
- 4.fetch_ticker(symbol)
-
def get_ticker(self, symbol): ticker = self.mexc_client.fetch_ticker(symbol) print(ticker)
mexc_api.get_ticker('BTC/USDT')
- 5.fetch_order(id, symbol)
-
def get_order(self, id, symbol): order = self.mexc_client.fetch_order(id=id, symbol=symbol) print(order)
mexc_api.get_order(id='C01__370000000000000033', symbol='ADA/USDC')
- 6.fetch_my_trades(symbol)
-
def get_my_trades(self, symbol): my_trades = self.mexc_client.fetch_my_trades(symbol) print(my_trades)
bybit_api.get_my_trades('BTC/USDT')
返り値は以下の様な感じになります。
[ { 'id': '26d907f.....d7e7c58', 'order': 'C01__377.....85', 'timestamp': 1705812316000, 'datetime': '2024-01-21T04:45:16.000Z', 'symbol': 'ADA/USDT', 'type': None, 'side': 'sell', 'takerOrMaker': 'taker', 'price': 0.5187, 'amount': 10.0, 'cost': 5.187, 'fee': { 'cost': 0.005187, 'currency': 'USDT' }, 'info': { 'symbol': 'ADAUSDT', 'id': '26d907f.....d7e7c58', 'orderId': 'C01__377.....85', 'orderListId': '-1', 'price': '0.5187', 'qty': '10', 'quoteQty': '5.187', 'commission': '0.005187', 'commissionAsset': 'USDT', 'time': '1705812316000', 'isBuyer': False, 'isMaker': False, 'isBestMatch': True, 'isSelfTrade': False, 'clientOrderId': None }, 'fees': [ { 'cost': 0.005187, 'currency': 'USDT' } ] }, { 'id': '26d907f.....d7e7b343', 'order': 'C01__377.....72', 'timestamp': 1705812382000, 'datetime': '2024-01-21T04:46:22.000Z', 'symbol': 'ADA/USDT', 'type': None, 'side': 'buy', 'takerOrMaker': 'taker', 'price': 0.519, 'amount': 9.63, 'cost': 4.99797, 'fee': { 'cost': 0.00499797, 'currency': 'USDT' }, 'info': { 'symbol': 'ADAUSDT', 'id': '26d907f.....d7e7b343', 'orderId': 'C01__377.....72', 'orderListId': '-1', 'price': '0.519', 'qty': '9.63', 'quoteQty': '4.99797', 'commission': '0.00499797', 'commissionAsset': 'USDT', 'time': '1705812382000', 'isBuyer': True, 'isMaker': False, 'isBestMatch': True, 'isSelfTrade': False, 'clientOrderId': None }, 'fees': [ { 'cost': 0.00499797, 'currency': 'USDT' } ] } ]
- 7.fetch_open_orders(symbol)
-
def get_open_orders(self, symbol): open_orders = self.mexc_client.fetch_open_orders(symbol) print(open_orders)
bybit_api.get_open_orders('BTC/USDT')
- 8.create_order(symbol, side, price, amount, type=’limit’))
-
typeの指定
- 指値→limit
- 成行→market
sideの指定- 売り→sell
- 買い→buy
"""" type: 指値⇒limit、成行⇒market side: 売り⇒sell, 買い⇒buy """ def create_order(self, symbol, side, price, amount, type='limit'): order = self.mexc_client.create_order(symbol=symbol, side=side, price=price, amount=amount, type=type) print(order)
mexc_api.create_order(symbol='ADA/USDC', price=0.6, side='sell', amount=10, type='limit')
以下はそのapiからの返答になります。
{ "id": "C01__370000000000000033", "clientOrderId": null, "timestamp": 1705382974755, "datetime": "2024-01-16T05:29:34.755Z", "lastTradeTimestamp": null, "status": null, "symbol": "ADA/USDC", "type": "limit", "timeInForce": null, "side": "sell", "price": 0.6, "stopPrice": null, "triggerPrice": null, "average": null, "amount": 10, "cost": null, "filled": null, "remaining": null, "fee": null, "trades": [], "info": { "symbol": "ADAUSDC", "orderId": "C01__370000000000000033", "orderListId": "-1", "price": "0.6", "origQty": "10", "type": "LIMIT", "side": "SELL", "transactTime": "1705382974755" }, "fees": [], "lastUpdateTimestamp": null, "postOnly": null, "reduceOnly": null, "takeProfitPrice": null, "stopLossPrice": null }
取引所は以下の様にオーダーが入っています。
エラーが出た場合create_orderを実行した際に以下の様なエラーが出る場合があります。
ccxt.base.errors.ExchangeError: mexc {"success":false,"code":704,"message":"Require trade operate permission!"}
取引所mexcのAPI設定がうまくいっていない可能性があるので以下を試してみてください。
STEP通貨ペアの選択- 通貨ペア入力
- 通貨ペア選択
- 「この辺りをクリック」し、セレクトボックスを閉じる
セレクトボックスを閉じて「ETH/USDC」が追加されたことを確認し右下の「確認」をクリックします。
STEPセキュリティ認証「コードを取得」をクリックしメールで認証コードを受け取り、入力します。
2段階認証のコード(Authenticatorコード)も忘れずに入力してください。
両方入力したら「確認」をクリックして完了です。
- 9.cancel_order(id, symbol)
-
def cancel_order(self, id, symbol): result = self.mexc_client.cancel_order(id=id, symbol=symbol) print(result)
mexc_api.cancel_order(id='C01__370000000000000033', symbol='ADA/USDC')
以下の様にキャンセルされていればOKです。
ccxtの簡単なエラー処理
apiを使用する際はエラー処理が重要です。
エラーが発生した時の処理を正しく行うことで予期せぬ
import ccxt
from ccxt.base.errors import InvalidOrder, InsufficientFunds, NetworkError
~~~~~~~~~~~~~~~~
~~ 一部省略 ~~
~~~~~~~~~~~~~~~~
""""type: 指値⇒limit、成行⇒market
side: 売り⇒sell, 買い⇒buy
"""
def create_order(self, symbol, side, price, amount, type='limit'):
try:
order = self.mexc_client.create_order(symbol=symbol, side=side, price=price, amount=amount, type=type)
print(order)
except InsufficientFunds as e:
print(f"Error: Insufficient funds - {e}")
except InvalidOrder as e:
print(f"Error: Invalid order - {e}")
except NetworkError as e:
print(f"Error: Network issue - {e}")
except Exception as e:
print(f"Error: {e}")
簡単にエラータイプを説明します。
ccxt – documentationを参考にしていますのでさらに詳しく知りたい方はご覧になってみてください。
- InsufficientFunds
-
注文を出すためにアカウントの残高に十分な通貨がない場合に発生します。
- InvalidOrder
-
注文APIに関連するすべての例外の基本クラスです。
例えば、注文に指定された価格や数量が無効な場合発生します。 - NetworkError
-
通信に関連する問題が発生した場合に発生するエラー。
ネットワークの切断、API サーバーへのアクセス不可などの場合に発生します。 - Exception
-
その他の一般的な例外に対するキャッチ。
他の特定のエラータイプ以外の予期せぬエラーが発生した場合に発生します。
Pythonを学ぶならやはりAIスキルにも興味があると思います。
そこでオススメのスクールがAidemy PREMIUMとなります。
未経験でもAIを使いたい人にオススメのスクールです。
無料で相談もできるので迷った方は個別相談をしてみてください。
\ 無料で個別相談 /
APIの取り扱い・注意事項
認証情報の厳重な管理
APIキーおよびシークレットキーは慎重に管理し、安全な場所に保存してください。これらの情報が漏洩すると、悪意あるアクセスや不正利用のリスクが生じます。
エラー処理の実装
API呼び出し時にはエラーが発生する可能性があります。
適切なエラーハンドリングを行い、エラーコードやメッセージを適切に処理してください。
自己責任
仮想通貨のAPIの使用は「自己責任」とし、自身でキーや資産を管理してください。
自動売買 pythonライブラリccxtの使い方 まとめ
本記事では「pythonライブラリccxtの使い方」ついて解説しました。
- ccxtとは
- ccxtのインストール方法
- ccxtの使い方
ccxtは暗号資産のAPIを使うのにとても便利なツールです。
「ライブラリ」と聞くと難しそうなイメージがありますが、意外と簡単に扱えたのではないですか?
ccxt以外と簡単だ
pythonとライブラリは切っても切り離せません。
プログラミング初心者にとって「ライブラリ」は強い味方です。
初心者こそ積極的にライブラリを使いましょう!
最後まで読んでくださいありがとうございました。
プログラミング初心者を抜け出したい方
未経験でもAIスキルを身につけたい方
\ 無料で個別相談 /
コインチェックのAPI取得がまだの方はこちらを参考にどうぞ。
海外の取引所のAPIを使ってみたい方はこちらを参考にどうぞ。
Cardanoについての記事を書いていますので興味のある方はぜひご覧ください。
まだブログで月1万円稼いでいない方はこちらからの記事を参考にしてみて下さい。
コメント