この記事は、FXのEA売買(トラックA)やAI直接売買(トラックB)とは別の口座・別の仕組みで動かす「株自動売買」の記録です。ExcelのVBAから日本株を売買します。いまは仮想運用で、実弾は入れていません。記事の一覧はトラックCへ。
3本目のトラックを始めます。相手はFXではなく日本株、道具はMT5でもPythonでもなくExcelです。2026年10月5日の夕方から夜にかけて、Claudeと一緒に環境を作り、売買ルールを決め、架空取引のプログラムを動かすところまで来ました。10月6日の寄り付きから仮想運用を始めます。この記事は、何を作ったのか、どこでつまずいたのか、仮想の成績をどう読むつもりなのか、の3つです。
なぜ株で、なぜExcelなのか
楽天証券には「マーケットスピード II RSS」という公式の仕組みがあります。Excelのアドインとして動き、セルに関数を書くと株価が流れてきて、発注用の関数を使えば注文も出せる。VBAと組み合わせれば自動売買になります。ブラウザを自動操作するような裏道ではなく、証券会社が用意した正面玄関です。
トラックAは「人が決めたルールをEAが実行する」、トラックBは「AIが自分で判断する」。トラックCは考え方としてはAに近く、ルールは人が決めてVBAが機械的に実行します。違うのは市場と道具です。為替は24時間ですが、株は9時から15時半まで。銘柄は数千あって、その日に動く銘柄を探すところから始まります。
狙うのは、朝に急騰した株の「押し目」と「崩れ」
ルールは単純です。朝、出来高を伴って大きく上がった銘柄を見つける。その銘柄が少し下げてから反発したら買う。逆に、高値から大きく崩れたら空売りする。持ち越しはせず、その日のうちに全部決済します。
対象は東証スタンダード市場です。最初はプライム、次に日経225と考えましたが、大型株は朝の急騰そのものが少ない。値動きの大きいスタンダードにしました。資金は50万円、信用取引で枠の上限近くまで使い、同時に持つのは3銘柄まで。1銘柄あたりの建玉は約55万円です。リスクを取る設定だということは、自分で分かったうえで決めています。
いまの初期値は次のとおりです。9時5分から10時までに、前日終値から3%以上上がり、出来高が前営業日の1日分の30%に達した銘柄を候補にする(最大20銘柄)。高値から0.5%下げたあと、安値から0.3%戻したら買い。高値から3%下げたら空売り。利確は+2%、損切りは−1%、15時20分に全決済。この数字はどれも根拠のある値ではなく、仮想運用で調整するための出発点です。
つまずき1:入れたのは「II」ではなかった
環境づくりは、最初の30分で止まりました。Excelにアドインを登録しようとしたら、あるはずのフォルダがない。

原因は、私がインストールしたのが旧版の「マーケットスピード」だったことです。楽天証券には名前のよく似たツールが2つあって、Excelから発注できるのは「マーケットスピード II」の方だけ。スタートメニューに「MarketSpeed」としか出ていないのを見て、やっと気づきました。IIを入れ直してアドインを2つ登録し、セルに関数を1つ書いたら、トヨタの株価が表示されました。
つまずき2:全銘柄は同時に見られない
次の壁は仕様です。RSSで同時に監視できるのは合計500銘柄まで。スタンダード市場は約1,500銘柄あります。しかも、値上がり率や出来高のランキングを取る関数がない。「全銘柄から今朝の急騰株を探す」は、そのままではできません。
そこで2段階にしました。取引が終わった夜に、VBAが全銘柄を400ずつ順番に読み込んで、終値・出来高・売買代金を記録する。その中から、100株の代金が資金枠に収まり、売買代金が一定以上ある銘柄だけを、翌日の監視リストにする。売買代金で足切りするのは、買えても売れない銘柄を避けるためです。
つまずき3:監視リストが0銘柄になった
下調べを初めて走らせた結果がこれです。

株価は取れていました。おかしいのは絞り込みの方です。記録されたシートを見ると、原因はすぐ分かりました。

Claudeは売買代金を「円」だと想定して、足切りを5,000万円=50,000,000と置いていました。実際の単位は千円。つまり「売買代金500億円以上」という条件になっていて、スタンダード株が通るはずがありません。設定を50,000に直して作り直したところ、今度は私が1行ずれて「資金」の方を5万円に書き換えてしまい、もう一度0銘柄。2回目でやっと通りました。

バックテストの数字より先に、単位と入力ミスで2回転ぶ。トラックAやBで何度も書いてきたことですが、最初に壊れるのは戦略ではなく配管です。
仮想運用の成績を、どう読むか
このプログラムは、いまは発注をしません。条件が成立したら、その瞬間の株価で約定したことにして記録するだけです。だから、成績は実際より良く出ます。理由は3つあります。表示された株価で必ず約定する前提で、板の薄さや値の飛びを考えていない。手数料、金利、貸株料を引いていない。そして、空売りできない銘柄でも空売りしたことになる。スタンダードには制度信用で売れない銘柄が多いので、空売り側の数字はとくに割り引いて見ます。
押し目の幅を0.5%にしたのも、検証したいことの1つです。最初の案は1.5%でした。0.5%だと、急騰中の株のただの揺れで買ってしまう回数が増えるはずで、損切り−1%との釣り合いも悪い。一方で1.5%だと、強い銘柄は押さずに上がってしまって乗れない。どちらが良いかは、ログが教えてくれます。
実弾に切り替える条件は、まだ決めていません。トラックBでは「週+1%以上が2週連続」のような条件を先に宣言してから仮想に入りましたが、こちらは初日のログすらない状態です。数日分の記録を見てから、何件・何週間・どの数字で判断するかを決めて、ここに書きます。決める前に実弾を入れることはしません。
次回
最初の数日の結果を載せます。候補が何銘柄検出されたか、何回売買が起きたか、買いと空売りで成績がどう違うか。候補が0件だったら、それも書きます。
この記事は筆者個人の実験記録であり、投資助言ではありません。信用取引は、預けた保証金を上回る損失が生じる可能性があります。
コメントを残す