chatBTC:GPT3でつくるビットコイン自動売買ボット
はじめに
仮想通貨botterの裏カレンダーの21日目の記事として投稿します。
oppai botterの ADAMです。AdventCalenderは初めてになりますがよろしくお願いします。
ChatGPT
2022年、仮想通貨の相場はSTEPN,FTXとともに崩壊してしまいました。ボラティリティも低下し収益が減ってしまった、喪失を被ったボッター、トレーダーも多いかと思います。
一方、AI界隈はStableDiffusion,ChatGPTと新しいツールが次々とリリースされて話題に事欠きません。特にChatGPTについては人が回答するような内容をチャットボットとして実現されており、話題になったのが記憶に新しいでしょう。
ChatGPTはインプットが文字列なので、数値情報もいれることができます。これを利用してドル円の価格予想をしている方もいました。
同じようにビットコインで価格予想、自動売買することを考えていきます。
ビットコインの価格予測
まずChatGPTにビットコインの価格予想をさせてみます。ChatGPTの回答としては残念ながらビットコインの価格予測はできないという回答になりました。(ぴえん)
ChatGPTはGPT3をベースにしているようですが、おそらく市場予測などセンシティブな内容を含む回答についてはフィルタリングがかかっているように思います。
代わりにOpenAIに公開されているGPT3のplaygroundを使ってみます。
少し文言を工夫してみましたが「上がる」という回答が返ってきました。
実際の2022/12/11の終値は2,349,397円だったので上がっておりいい感じに見えます。
自動売買ボットにする
OpenAIのGPT3はAPIとして公開されており、OpenAIのアカウントからAPI-KEYを取得すれば誰でも呼び出すことができます。
先ほどのplaygroundの内容をPythonのコードにすると以下のようになります。大分、シンプルに書くことができますね。
import openai
openai.api_key="<API-KEY>"
gpt_prompt = "次の日のビットコインの価格について「上がる」もしくは「下がる」で答えてください。"\
"直近10日間のビットコインの価格は以下の通りです。\n"\
"2022/12/01 2,337,495円\n"\
"2022/12/02 2,295,124円\n"\
"2022/12/03 2,286,986円\n"\
"2022/12/04 2,287,584円\n"\
"2022/12/05 2,333,287円\n"\
"2022/12/06 2,336,728円\n"\
"2022/12/07 2,337,143円\n"\
"2022/12/08 2,301,888円\n"\
"2022/12/09 2,343,951円\n"\
"2022/12/10 2,345,364円\n"\
"2022/12/11 2,349,397円\n"\
"2022/12/12 2,349,397円\n"\
response = openai.Completion.create(
engine="text-davinci-003",
prompt=gpt_prompt,
temperature=0.5,
max_tokens=256,
top_p=1.0,
frequency_penalty=0.0,
presence_penalty=0.0
)
print(response['choices'][0]['text'])
もう少しボットに組み込めそうな関数の形にしてみるとこんな感じになりました。
AIが答えやすい形で問題を作ってうまく回答させる、回答された内容は形式が異なる場合があるので気をつける必要があるなど、普通のプログラムとは違う処理が必要になりました。
import ccxt
from datetime import datetime
import calendar
import openai
openai.api_key="<API-KEY>"
def predict():
base = ccxt.binance()
gpt_prompt="You are playing a game where you have to predict whether bitcoin will go up or down.\n"\
"You will given a sequence of bitcoin price, and you must choose between 'up' and 'down'.\n"
candles = base.fetch_ohlcv('BTC/USDT','1d',limit=10)
for candle in candles:
gpt_prompt += datetime.fromtimestamp(candle[0]/1000).strftime('%Y/%m/%d') + ' $' + str(candle[4]) + '\n'
gpt_prompt+="AI:"
print(gpt_prompt)
response = openai.Completion.create(
engine="text-davinci-003",
prompt=gpt_prompt,
temperature=0.5,
max_tokens=256,
top_p=1.0,
frequency_penalty=0.0,
presence_penalty=0.0
)
answer = response['choices'][0]['text']
if ('up' in answer or 'Up' in answer):
return 'buy'
elif ('down' in answer or 'Down' in answer):
return 'sell'
else:
return 'unknown'
if __name__ == '__main__':
print(predict())
結果は以下のようになりGPT3はビットコインを買えとおっしゃっているようです。(NFA)
You are playing a game where you have to predict whether bitcoin will go up or down.
You will given a sequence of bitcoin price, and you must choose between 'up' and 'down'.
2022/12/11 $17085.05
2022/12/12 $17209.83
2022/12/13 $17774.7
2022/12/14 $17803.15
2022/12/15 $17356.34
2022/12/16 $16632.12
2022/12/17 $16776.52
2022/12/18 $16738.21
2022/12/19 $16438.88
2022/12/20 $16760.32
AI:
buy
あとがき
本noteではビットコインの価格予測をGPT3を使って行い、ボットにするためのプログラムについて書いてみました。いままでの数値計算や機械学習とは違った考えで作らないといけないので面白いと思います。数値情報だけでなく文字列ならなんでも入れられるので可能性は広がると思います。ただそもそも根拠がよくわからない、結果が毎回変わることがあるなど色々課題はありそうですね。
では次のバブルまで生き残りましょう!