Bot プログラミングスキル 書籍・論文・web記事

仮想通貨botの開発記録#54(2024/2/11)「C級Botterへのステップ④ccxtライブラリを使ってKucoinでのETH-USDT先物のポジションと証拠金残高を獲得するwithChatGPT4」

2024年2月11日

前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。

参考にしたのは【Botter Advent Calendar2023】仮想通貨で月に1万円を稼ぐC級Botterになろうです。

Yodaka

今回は例題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先物のポジションと証拠金残高を獲得するコード

Yodaka

実行したのは、以下のコードです。

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)
Yodaka

実行結果は以下の通り。証拠金残高とポジションの情報を獲得することができています。

Yodaka

以前に記事を公開した際、参考記事の執筆者である@qash_NFTさんからリプライを頂いていました。

それをきっかけに自分で調べていたのですが、私個人の力では実質的な進展が見られなかったため、ChatGPT4を使うことにしました。(月額20ドルのプランなので、現在だと3000円くらいですね)

Yodaka

その結果、あっさりと問題が解決しました。

コードが期待通りに動作しなかった原因

Yodaka

過去の記事で動作しなかった方のコードをGPT4に読み込ませて、エラーの原因を検証させました。

コードが期待通りに動作しなかった原因は、ccxt.kucoinオブジェクトの代わりにccxt.kucoinfuturesオブジェクトを使用していなかったことにありました。

ccxt.kucoinはKuCoinのスポット市場用のAPIを扱い、ccxt.kucoinfuturesはKuCoinの先物市場用のAPIを扱います。

そのため、ETH-USDTの先物ポジション情報を取得するためには、先物市場用のAPIを使用する必要があります。

以下の変更を行うことで、期待通りに動作するようになります。

  1. 取引所オブジェクトの生成ccxt.kucoin()の代わりにccxt.kucoinfutures()を使用してください。これにより、KuCoinの先物市場用のAPIにアクセスできます。
  2. シンボル指定の確認fetch_positionsメソッドを使用する際に、特定のシンボルに対するポジション情報を取得したい場合は、そのシンボルを正確に指定する必要があります。KuCoinのAPIドキュメントまたはCCXTのドキュメントで、使用可能なシンボルの形式を確認してください。
  3. エラーハンドリング:提供されたコードには適切なエラーハンドリングが含まれていますが、fetch_positionsメソッドがエラーを返す可能性がある理由の一つとして、APIキーに必要な権限がない、または誤ったAPIエンドポイント(この場合はスポットではなく先物を意図している)へのアクセスが考えられます。
Yodaka

今後は、公式Docsの読み方も改める必要がありますね。

まとめ

今回は、ChatGPT4の威力を体感しました。

2週間近く悩んでいたことが一瞬で解決したため、もっと早くから有料プランにしておけばよかったな、というのが素直な感想です。

特に、ソースコードを参照するというアプローチは今後必ずできるようになっておきたいことの一つです。

Yodaka

例えば、今回の場合だと,以下の手順でソースコードを参照することできるようです。ソースコードを読む力は今の私に不足している部分なので、「コードを読む」時間を増やしていきます。

CCXT GitHubリポジトリを見る: https://github.com/ccxt/ccxt
このリポジトリ内で、KuCoin先物を扱うための具体的な実装は、js/kucoinfutures.jsに関連するファイルで見つけることができる。ただし、実際にはJavaScriptで書かれている。CCXTライブラリはPythonを含む複数の言語で使用できるように設計されている点に注意する。Pythonでの使用法も、基本的なAPIの呼び出し方は同様に行われる。

ソースコードを直接参照するには

  1. GitHubリポジトリのトップページにアクセスする。
  2. 「js」フォルダを開く。
  3. kucoinfutures.jsを探す。これにはKuCoin先物APIに対する具体的なメソッド呼び出しやパラメータが含まれている。

また、Pythonや他の言語での実装を見たい場合は、同じリポジトリ内の言語別のフォルダ(例えば、python)を参照する。各言語用のAPI実装が、その言語の標準に従って記述されています。

Yodaka

今後もこの調子で開発と学習を進めていきます。

【宿題】

  • GPT4を補助ツールとして使い倒す
  • 自分でコードを書くという拘りを捨てる
  • エラーの原因が分かったら、公式Docsやソースコードを読んできちんと理解する
  • VSCodeでのステップ実行などを通してソースコードを読む力を磨く

-Bot, プログラミングスキル, 書籍・論文・web記事