前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。
参考にしたのは【Botter Advent Calendar2023】仮想通貨で月に1万円を稼ぐC級Botterになろうです。
今回は例題2のリベンジです。
例題1:fetchOrderBookを使って任意の取引所(現物)のETH-USDT価格を取得しましょう
例題2: 今、0.01ethを任意のperpがある取引所でロングしているとします。例えば、Kucoin futuresのETH-USDTMにポジションがあるとします。
fetchPositions fetch_balance を用いて、ロング/ショートをどの程度持っているか表示し、フリーなUSDTバランスをprintで表示させましょう。
例題 3: createOrderを用いて0.01 ethを購入し、10秒後に売却しましょう。レバは3倍とし、market orderを使用しましょう。
KucoinでのETH-USDT先物のポジションと証拠金残高を獲得するコード
実行したのは、以下のコードです。
import ccxt import pprint # 綺麗に出力するため # Kucoin API情報を設定 api_key = 'your_api_key' secret = 'your_secret' password = 'your_password' # Kucoinのクライアントを作成 exchange = ccxt.kucoinfutures({ 'apiKey': api_key, 'secret': secret, 'password': password, }) # 証拠金残高を取得 balance = exchange.fetch_balance() print("証拠金残高:") pprint.pprint(balance['info']['data']) # ETH-USDTの先物ポジションを取得 symbol = 'ETH/USDT:USDT' # Kucoinの先物市場でのETH-USDTシンボル positions = exchange.fetch_positions([symbol]) print(f"{symbol} のポジション:") pprint.pprint(positions)
実行結果は以下の通り。証拠金残高とポジションの情報を獲得することができています。
以前に記事を公開した際、参考記事の執筆者である@qash_NFTさんからリプライを頂いていました。
Kucoinではccxtのfetch_positionsメソッドは利用できない
->0.01ethとかショートした状態でやりなおしてみそ
(positionがないと使えない関数のはず)— QASH_NFT (@qash_NFT) January 28, 2024
それをきっかけに自分で調べていたのですが、私個人の力では実質的な進展が見られなかったため、ChatGPT4を使うことにしました。(月額20ドルのプランなので、現在だと3000円くらいですね)
その結果、あっさりと問題が解決しました。
GPT-4を使ったらあっさり解決。
コードが期待通りに動作しなかった原因は、ccxt.kucoinオブジェクトの代わりにccxt.kucoinfuturesオブジェクトを使用していなかったこと。
これ、今後も同じことが起こらないように公式Docsの読み方を改めないといけないな。これに並行してコードを書く時間も増やそう。 https://t.co/fc9NOcjaP2— よだか(夜鷹/yodaka) (@yodakablog) February 11, 2024
コードが期待通りに動作しなかった原因
過去の記事で動作しなかった方のコードをGPT4に読み込ませて、エラーの原因を検証させました。
コードが期待通りに動作しなかった原因は、ccxt.kucoin
オブジェクトの代わりにccxt.kucoinfutures
オブジェクトを使用していなかったことにありました。
ccxt.kucoin
はKuCoinのスポット市場用のAPIを扱い、ccxt.kucoinfutures
はKuCoinの先物市場用のAPIを扱います。
そのため、ETH-USDTの先物ポジション情報を取得するためには、先物市場用のAPIを使用する必要があります。
以下の変更を行うことで、期待通りに動作するようになります。
- 取引所オブジェクトの生成:
ccxt.kucoin()
の代わりにccxt.kucoinfutures()
を使用してください。これにより、KuCoinの先物市場用のAPIにアクセスできます。 - シンボル指定の確認:
fetch_positions
メソッドを使用する際に、特定のシンボルに対するポジション情報を取得したい場合は、そのシンボルを正確に指定する必要があります。KuCoinのAPIドキュメントまたはCCXTのドキュメントで、使用可能なシンボルの形式を確認してください。 - エラーハンドリング:提供されたコードには適切なエラーハンドリングが含まれていますが、
fetch_positions
メソッドがエラーを返す可能性がある理由の一つとして、APIキーに必要な権限がない、または誤ったAPIエンドポイント(この場合はスポットではなく先物を意図している)へのアクセスが考えられます。
今後は、公式Docsの読み方も改める必要がありますね。
まとめ
今回は、ChatGPT4の威力を体感しました。
2週間近く悩んでいたことが一瞬で解決したため、もっと早くから有料プランにしておけばよかったな、というのが素直な感想です。
特に、ソースコードを参照するというアプローチは今後必ずできるようになっておきたいことの一つです。
例えば、今回の場合だと,以下の手順でソースコードを参照することできるようです。ソースコードを読む力は今の私に不足している部分なので、「コードを読む」時間を増やしていきます。
CCXT GitHubリポジトリを見る: https://github.com/ccxt/ccxt
このリポジトリ内で、KuCoin先物を扱うための具体的な実装は、js/kucoinfutures.js
に関連するファイルで見つけることができる。ただし、実際にはJavaScriptで書かれている。CCXTライブラリはPythonを含む複数の言語で使用できるように設計されている点に注意する。Pythonでの使用法も、基本的なAPIの呼び出し方は同様に行われる。
ソースコードを直接参照するには
- GitHubリポジトリのトップページにアクセスする。
- 「js」フォルダを開く。
kucoinfutures.js
を探す。これにはKuCoin先物APIに対する具体的なメソッド呼び出しやパラメータが含まれている。
また、Pythonや他の言語での実装を見たい場合は、同じリポジトリ内の言語別のフォルダ(例えば、python
)を参照する。各言語用のAPI実装が、その言語の標準に従って記述されています。
今後もこの調子で開発と学習を進めていきます。
【宿題】
- GPT4を補助ツールとして使い倒す
- 自分でコードを書くという拘りを捨てる
- エラーの原因が分かったら、公式Docsやソースコードを読んできちんと理解する
- VSCodeでのステップ実行などを通してソースコードを読む力を磨く