chatGPTで仮想通貨botを作る

仮想通貨bot

試してみたいロジックがあるけれども、どうやってコードを書いたら良いかわからない。
これは、私たちよわよわbotterの悩みではないでしょうか。

今回は巷で話題のchatGPTでサーキットブレーカーbot(CBbot)がどこまで作れるのお見せします(CBbotそのものについては以前の記事をご確認ください:【コード公開】絶対に勝てる仮想通貨botはCBbot)。

どのようにchatGPTと対話し、botを作っていくか全工程をお見せできればと思います。

またbot作りを通してGPT3.5とGPT4の差を確認します
よわよわbotterはchatGPTをお供にコードを書きましょう。

CBbotのおさらい

まず、簡単にCBbotのおさらいをします。

CBbotは10分前の価格から20%変動すると必ず取引が停止するため、ここに指値を出しておけばほぼ確実に勝てるというものでした。

chatGPT3.5によるbot作り

そこでまずchatGPTにプロンプトを入力します。

ヤメティ
ヤメティ

ccxtを使ってbitflyerで10分前の価格から上下20%に指値をするプログラムをpythonで書いて。

GPT3.5
GPT3.5

ccxtは仮想通貨取引所のデータにアクセスするためのライブラリです。指値注文を出すプログラムをPythonで書くには、ccxtを使用してbitFlyerの価格データを取得し、指定された条件に基づいて注文を出すロジックを組み込む必要があります。

以下は、ccxtを使用してbitFlyerで10分前の価格から上下20%に指値をするPythonプログラムの例です。

import ccxt
import time

# bitFlyerのAPIキーを設定してください
api_key = 'YOUR_API_KEY'
secret_key = 'YOUR_SECRET_KEY'

# bitFlyerの取引所を設定
exchange = ccxt.bitflyer({
'apiKey': api_key,
'secret': secret_key,
})

# 注文する通貨ペアを設定
symbol = 'BTC/JPY'

# 指値注文を出す関数
def place_limit_order(price, side):
try:
order = exchange.create_limit_order(symbol, 'limit', side, 0.001, price)
print(f"注文を出しました: {order}")
except Exception as e:
print(f"注文エラー: {e}")

# メインの処理
if __name__ == '__main__':
# 10分前の価格を取得
ohlcv = exchange.fetch_ohlcv(symbol, '1m')
current_price = ohlcv[-1][4] # 最新の終値を取得
ten_minutes_ago_price = ohlcv[-11][4] # 10分前の終値を取得

# 注文価格を計算
upper_limit = ten_minutes_ago_price * 1.2
lower_limit = ten_minutes_ago_price * 0.8

# 注文を出す
if current_price >= upper_limit:
place_limit_order(upper_limit, 'sell')
elif current_price <= lower_limit:
place_limit_order(lower_limit, 'buy')
else:
print("条件に合致する価格帯ではありません。")

# プログラムの実行を終了
time.sleep(5) # 注文が反映されるまで少し待つ
GPT3.5
GPT3.5

注意事項:
1. このプログラムは注文を出すだけで、約定を待たないため、約定した場合の取引の進捗状況を確認する必要があります。
2. APIキーとシークレットキーは慎重に取り扱ってください。誤って公開するとセキュリティ上の問題が生じる可能性があります。
3. このプログラムは単純な例であり、実際の取引に使用する際にはリスク管理やエラーハンドリングなどを考慮する必要があります。実際の取引に使用する前によくテストしてください。

一発目にして悪くない結果がでてきたんじゃないでしょうか?これを見たときは正直震えました。

しかしながら、よく見ると一部ロジックがおかしいところがありますね。
現在の価格と10分前の価格を比べる必要はありません。

そこで新しい指示を出します。

ヤメティ
ヤメティ

指値の価格が10分前のプラスマイナス20%であって、現在価格と比較する必要はありません。

GPT3.5
GPT3.5

申し訳ありません、理解を誤っていました。10分前の価格から上下20%の範囲で指値を出すプログラムを以下に示します。

import ccxt
import time

# bitFlyerのAPIキーを設定してください
api_key = 'YOUR_API_KEY'
secret_key = 'YOUR_SECRET_KEY'

# bitFlyerの取引所を設定
exchange = ccxt.bitflyer({
    'apiKey': api_key,
    'secret': secret_key,
})

# 注文する通貨ペアを設定
symbol = 'BTC/JPY'

# 指値注文を出す関数
def place_limit_order(price, side):
    try:
        order = exchange.create_limit_order(symbol, 'limit', side, 0.001, price)
        print(f"注文を出しました: {order}")
    except Exception as e:
        print(f"注文エラー: {e}")

# メインの処理
if __name__ == '__main__':
    # 10分前の価格を取得
    ohlcv = exchange.fetch_ohlcv(symbol, '1m', since=None, limit=11)
    ten_minutes_ago_price = ohlcv[-2][4]  # 直近のローソク足の前の終値を取得

    # 注文価格を計算
    upper_limit = ten_minutes_ago_price * 1.2
    lower_limit = ten_minutes_ago_price * 0.8

    # 注文を出す
    place_limit_order(upper_limit, 'sell')
    place_limit_order(lower_limit, 'buy')

    # プログラムの実行を終了
    time.sleep(5)  # 注文が反映されるまで少し待つ
GPT3.5
GPT3.5

このプログラムでは、10分前の価格を取得し、それを基準にして上下20%の価格を計算して指値注文を出します。

ただし、注文が実際に成立するかどうかは市場の状況に依存しますので、実際に取引する前によくテストしてください。

また、APIキーとシークレットキーの取り扱いにも注意してください。

これが圧倒的天才か!!!!!!!!!!!!!!!!
ほとんど問題ないコードが出力されていますね。

ただ、やはりそのまま使うことはできなさそうです。

chatGPT4によるbot作り

続いてGPT4に同じ内容を聞いてみましょう。

ヤメティ
ヤメティ

ccxtを使ってbitflyerで10分前の価格から上下20%に指値をするプログラムをpythonで書いて。

GPT4
GPT4

以下のプログラムは、CCXTを使用してbitFlyerの10分前の価格を取得し、その価格が現在価格の上下20%である場合に指値注文を出す例です。

import ccxt
import datetime
import time

bitflyer = ccxt.bitflyer({
    'apiKey': 'YOUR_API_KEY',
    'secret': 'YOUR_SECRET',
})

symbol = 'BTC/JPY' # 通貨ペアを設定します。この場合はビットコインを例にしています。

def get_price_from_10_minutes_ago():
    now = datetime.datetime.utcnow()
    since = int((now - datetime.timedelta(minutes=10)).timestamp() * 1000)
    ohlcv = bitflyer.fetch_ohlcv(symbol, '1m', since, limit=10) # 1分間隔のデータを取得します。
    return ohlcv[0][4] # Close priceを取得します。

def create_limit_order(price):
    amount = 0.001 # 注文する量を設定します。この場合は0.001BTCを例にしています。
    # limit buy order
    if bitflyer.fetch_balance()['free'][symbol.split('/')[0]] >= amount:
        bitflyer.create_limit_buy_order(symbol, amount, price)
    # limit sell order
    elif bitflyer.fetch_balance()['free'][symbol.split('/')[1]] >= price * amount:
        bitflyer.create_limit_sell_order(symbol, amount, price)

while True:
    price_from_10_minutes_ago = get_price_from_10_minutes_ago()
    current_price = bitflyer.fetch_ticker(symbol)['last']
    if current_price >= price_from_10_minutes_ago * 1.2 or current_price <= price_from_10_minutes_ago * 0.8:
        create_limit_order(current_price)
    time.sleep(60) # 1分ごとに価格を確認します。
GPT4
GPT4

注:このコードはサンプルです。実際に取引を行う際には、各種パラメータ(通貨ペア、注文数量など)を適切に設定し、エラーハンドリングを追加してください。また、取引は自己責任で行ってください。

また、各取引所のAPIは利用規約に従って使用してください。APIキーとシークレットは漏洩しないよう厳重に管理してください。

GPT4では現在値と過去値を比べるというロジックは3.5と同様に挿入されているものの、3.5には存在しなかった資産の取得を行ってくれています。

さらに、while Trueで繰り返しの処理を入れてくれています。

ただし、オーダーをキャンセルしていないので無限に発注してしまいます。

こちらも先程と同様の指示を出します。

ヤメティ
ヤメティ

指値の価格が10分前のプラスマイナス20%であって、現在価格と比較する必要はありません。

GPT4
GPT4

すみません、誤解が生じました。指定された条件に基づき、以下にコードを修正しました。

このコードは、bitFlyerの10分前の価格に基づいて、その上下20%の価格に指値を発行します。

import ccxt
import datetime
import time

bitflyer = ccxt.bitflyer({
    'apiKey': 'YOUR_API_KEY',
    'secret': 'YOUR_SECRET',
})

symbol = 'BTC/JPY' # 通貨ペアを設定します。この場合はビットコインを例にしています。

def get_price_from_10_minutes_ago():
    now = datetime.datetime.utcnow()
    since = int((now - datetime.timedelta(minutes=10)).timestamp() * 1000)
    ohlcv = bitflyer.fetch_ohlcv(symbol, '1m', since, limit=10) # 1分間隔のデータを取得します。
    return ohlcv[0][4] # Close priceを取得します。

def create_limit_order(price, order_type):
    amount = 0.001 # 注文する量を設定します。この場合は0.001BTCを例にしています。
    # limit buy order
    if order_type == 'buy' and bitflyer.fetch_balance()['free'][symbol.split('/')[1]] >= price * amount:
        bitflyer.create_limit_buy_order(symbol, amount, price)
    # limit sell order
    elif order_type == 'sell' and bitflyer.fetch_balance()['free'][symbol.split('/')[0]] >= amount:
        bitflyer.create_limit_sell_order(symbol, amount, price)

while True:
    price_from_10_minutes_ago = get_price_from_10_minutes_ago()
    create_limit_order(price_from_10_minutes_ago * 1.2, 'sell')  # 20%高い価格で売却注文を出します。
    create_limit_order(price_from_10_minutes_ago * 0.8, 'buy')  # 20%低い価格で購入注文を出します。
    time.sleep(60) # 1分ごとに価格を確認します。
GPT4
GPT4

注:このコードはサンプルです。実際に取引を行う際には、各種パラメータ(通貨ペア、注文数量など)を適切に設定し、エラーハンドリングを追加してください。また、取引は自己責任で行ってください。

また、各取引所のAPIは利用規約に従って使用してください。APIキーとシークレットは漏洩しないよう厳重に管理してください。

こちらも指示通り修正ができていそうですね。

GPT3.5 vs GPT4 どちらを選ぶべきか

残念なお知らせがあります。
bitflyerにはohlcvを取得するapiが存在せず、3.5、4ともに使用しているfetch_ohlcvがワークしません。

やはり、個別具体の取引所に適応していくにはGPT4といえども人力での対応が必要になってきそうです。
人力で作った動くコードbot改善のポイントは過去記事をご確認ください。

その一方で、構成やロジックの組み方に関してはある程度使えるものが出来上がってきています。

私達よわよわbotterにとっては、chatGPTの出力するコードを下敷きにすることで、イチから自分で書くより何十倍も速くコードを書くことができます。

chatGPTの4に課金するべきかどうかという問題ですが、私は課金をおすすめします。

コードを書くのが苦手な私達には、少しでも多くのヒントが必要です。

そこで、勝手に気を回してwhileをいれてくれたり、資産状況を取得してくれるのは、そのコードがそのまま動かなかったとしても、必要な機能の手がかりにできると考えるからです。

逆に、botに熟知しているがapiの使い方やパラメータの入れ方を調べるのが面倒だというような方は3.5でも十分かもしれません。

そもそも戦略をたてられるのか(おまけ)

ある程度のコードを書いてくれることは確認できました。
そこで、そもそも利益をあげられる戦略を考えることができるのか見ていきたいと思います。
今回使用するのはchatGPT4です。

ヤメティ
ヤメティ

bitflyerのサーキットブレーカーを知っていますか?

GPT4
GPT4

bitFlyerに関する具体的なサーキットブレーカーの情報は、私の知識が最後に更新された時点(2021年9月まで)ではありません。しかし、一般的な観点から、サーキットブレーカーについて説明します。

 

サーキットブレーカーは、株式市場や暗号通貨取引所などの金融市場における取引制御機能で、極端な市場のボラティリティ(価格変動)を防ぐために使用されます。一定の期間内に価格が大幅に上昇または下落した場合、サーキットブレーカーは自動的に発動し、取引を一時停止または制限します。これにより、市場参加者はパニック売りや買いからくる急激な価格変動を緩和し、理性的な判断を下す時間を得ることができます。

 

もしbitFlyerがサーキットブレーカー機能を導入しているとしたら、それは暗号通貨の取引を一時的に制限し、異常な市場波動からユーザーを守るためのものと考えられます。具体的な動作条件や詳細については、bitFlyerの公式ウェブサイトやサポートチームから得る情報を参照してください。

chatGPTはサーキットブレーカーを知らないようですが、一般的なサーキットブレーカーの仕組みから正しい仕組みを推測しています。

ヤメティ
ヤメティ

サーキットブレーカーが10分前価格から20%を超え変動で発動するとしたとき、どのような戦略が利益をあげられると考えられますか?

GPT4
GPT4

そのような状況では、以下のような戦略が考えられます。ただし、これらはあくまで一部の戦略例であり、市場の状況や個々の投資目標により、適切な戦略は異なります。

 

1. 逆張り戦略: サーキットブレーカーが発動すると、一時的に取引が停止されます。この間に、過剰な売り圧力や買い圧力が緩和される可能性があります。したがって、市場が再開したときには、価格が一定の範囲に収束する可能性があります。つまり、価格が大幅に上昇した場合は売り、大幅に下落した場合は買いを行うことで、利益を得る可能性があります。

 

2. ボラティリティ取引: サーキットブレーカーが発動するのは通常、市場のボラティリティが高いときです。ボラティリティが高いときは、価格の変動幅が大きくなるため、適切なタイミングで買いと売りを行えば大きな利益を得ることができます。しかし、リスクも高いため、慎重に取引を行う必要があります。

 

3. ヘッジ戦略: サーキットブレーカーが発動する前に、価格が急激に変動することを予測して適切なヘッジを行うことも一つの戦略です。例えば、オプション取引を使ってポートフォリオを保護するなどです。

 

以上のような戦略を実行するには、十分な市場分析と理解が必要です。また、リスク管理も重要です。市場は予測できない要素も多いため、必ずリスクを理解し、損失を超えるリスクを取らないように注意してください。また、具体的な投資戦略を検討する際には専門的な助言を求めることをお勧めします。

1番!!!もう答え言っとる!!!!!!!
戦略の策定にも十分に使用できそうですね。

タイトルとURLをコピーしました