2023年5月14日日曜日

ChatGPT に日経平均VI先物の自動売買プログラムを書いてもらった[kabuステーションAPI]

ChatGPT にkabuステーションAPIで日経平均VI先物を売買するコードを書いて貰い、そのコードでGW中に稼働を始め、先週初めて利確しました。
日経平均VI先物の売買が活発になってほしいので、残しておきます。

2月からauカブコム証券の kabuステーションAPI を使って、日経平均VI先物のシステムトレードをしようと思い、Python のサンプルコードをいじったりしていましたが、次の点が難しくてだんだん飽きてきました。

 kabuステーションAPIの先物の発注では、指値と逆指値の2つの指値を同時に発注するOCO注文が出せない仕様なので、逆指値でリスクを限定しつつ、利確したい価格に近づいたら逆指値注文をキャンセルして利確注文に変更したい場合は、常に価格を追って価格によって条件分岐が必要。

 日経平均VI先物の板があまりにもスカスカで、成行で20枚の注文が出来ないため、アイスバーグ注文(小分けに発注して前の注文が約定してから次を発注する機能)のような工夫が必要。

そんな中、流行りの ChatGPT が無料で精度の高いプログラムを書いてくれると知って、頼んでみたら見事なコードを書いてくれました。私の勉強時間は何だったんだ。


●ChatGPT のアカウント作成

まず、ChatGPT は公式サイトからでもアカウントを作れば使えますが、SMS認証が必須だったため、SMSなしで簡単にアカウントを作れるマイクロソフトからBingのチャットAIを使いました。アカウントを作るところからでも5分もあれば使い始められます。
なお、BingのチャットAIはMicrosoft Edgeでしか使えません。1日の使用回数制限はないです。ユーモアはいらないので、会話のスタイルは「その他 厳密」にしました。


●頼み方


kabuステーションAPIで●●するためのコードを提案して下さい。言語はPythonです。pipでインストールが必要なライブラリは使わないでください。」と頼むだけです。一度にたくさん頼むと、どこでエラーが出たのかわかりにくいので、一つずつ頼んで最後に繋げます。

1 トークンを発行する
 ここは普通に頼むだけ。トークンとは、認証に必要なパスワードのようなものです。APIでやり取りする時に毎回トークンを送る必要があるので、 token という変数にトークンを入れておきます。


2 日経平均VI先物の直近限月の先物銘柄コードを取得して変数にする
 ここは書いてもらったコードだとエラーが出ます。自分が書いたものと見比べたら、
 'FutureCode': 'NKVI'
 となっていました。本当は日経平均VI先物の FutureCode は 'NKVI' ではなく 'VI' です。
 そのため、「日経平均VI先物の FutureCode は VI です。」という一文も加えるか、自分で修正します。



3 ●●(任意の銘柄)と日経平均VI先物を銘柄登録する
 銘柄登録すると、リアルタイム価格の配信を受けられます。ちなみに、登録する銘柄の証券コードと市場コードをよく見ないと全然別のコードを登録しようとしてきます。そのため、銘柄を指定する際は、「●●のSymbolは●●で、Exchangeは●●です。」と追記します。

4 先物の新規建玉可能額を取得する

==============
ここまでで力尽きました。気が向いたら書きます。(たぶん書かない。)普通に頼むだけでなので、やってみてください。
==============
注文キャンセルや発注のコードを書いてもらって、それらを全部つなげて、価格で条件分岐→発注の流れをWhile文で繰り返しにすれば、出来上がります。繰り返しにする部分も頼めば書いてくれます。


●注意点

頼まれたことしかやらないし、結構な頻度で虚言癖がでる部下みたいなところがあるので、頼み方に工夫が必要です。

頼み方によってはコードを書いてくれない
コードを書けるのに書けないと言ってくる時があります。「コードを書いて」ではなく「コードを提案して」と頼むのがよさそうです。



たまに書いていることを無視してくる
長々とこうして欲しいと書いていると、回答のコードが40行を超えたあたりで止まります。「続きを書いて」と頼むと続きから書いてくれます。

丁寧に指定しないと拒否してくる
抽象的なお願いではなく、具体的に丁寧に指定する必要があります。

たまに嘘を教えてくる
行間を読めないようで、詳細に指定しないと嘘をつきます。
例えば、「日経平均VI先物の発注枚数を計算するために新規建玉可能額を取得して」とお願いしたところ、現物株の余力(URL が cash)を取ってきました。


「先物の新規建玉可能額」と指定することで先物の余力を取ってくるようになりました。1つ1つに修飾語が必要です。

こちらの例では、仲値を取得してと頼んだら、表示外の板の枚数を2で割った数値を取ってきました。仲値を知らないらしい。



頼まないとエラー処理を書いてくれない
実行してみてエラーが出た場合は、エラーの情報を教えて「修正したコードを提案して」と頼みますが、エラーが起こらない前提なのか、基本的にエラー処理のコードは頼まないと書いてくれません。そのため、エラーが出ても何故止まったのかよく分からないことが多いです。



エラーが具体的でない場合は、「try-except文のコードに修正して」と頼んで、エラーが具体的に出るようにしてから、それを実行して出てきたエラーを伝えて、修正案を送ってもらいます。適切にエラーを教えれば、適切な修正案が送られてきます。



ネット上にある情報を全て探してくれるわけではない
ネット上には、kabuステーションに自動ログインするコードが転がっていますが、それを探し出せないのか、書いてくれませんでした。




●最後に

頼み方にクセはありますが、ChatGPT に書いてもらうと素人には絶対に書けなかった高度な取引用コードを書いてもらえます。



このブログにPythonコードをキレイに貼り付けられるようにテンプレートを修正したら、ChatGPT に書いてもらったコードの大部分を公開したいと思っています。

ちなみに、auカブコム証券で日経平均VI先物を売建するには、年収500万円以上で登録する必要があります。(源泉徴収票の確認なし)