株の自動売買を作ろうと思ったとき、最初に想像したのは「条件に合った銘柄を、自動で買ってくれる仕組み」でした。
でも実際に手をつけてみて、その部分を一番最後に回すことにしました。
理由は単純で、僕が1日で22万円を失った原因が、エントリーではなかったからです。
この記事では、個人が自動売買を作るときの順番について書きます。「何から作るか」で悩んでいる方の参考になればと思います。
最初に立場をはっきりさせておきます。 僕はまだ自動売買を完成させていません。証券会社のAPI利用を申請したところで、これから段階1に着手する段階です。なので以下は「完成した仕組みの解説」ではなく、なぜこの順番にしたのかという設計の話です。実装が進んだら、この記事に結果を追記していきます。
エントリーの自動化から始めてはいけない理由
自動化と聞いて真っ先に思い浮かぶのは、銘柄選定と発注です。ここを機械に任せれば、チャンスを逃さないし、感情も入らない。魅力的に見えます。
ただ、ここには前提があります。自動化するルールが正しいことです。
僕の場合、その前提が満たされていませんでした。
自分の売買ルールをバックテストで検証していたのですが、その過程で自作したコードにバグが見つかりました。テクニカル指標の計算を間違えていて、修正したら結果が変わってしまったのです。
つまり、そもそも検証していた条件が正しいのかが確定していない状態でした。
この状態でエントリーを自動化したらどうなるか。答えははっきりしています。間違いを、高速で、正確に繰り返すことになります。設定次第では、手動でやるより短い時間で、より多くの誤った発注を重ねることになります。
自動化はミスを減らす技術ではありません。決めたことを、決めたとおりに実行する技術です。決めた内容が間違っていれば、間違いが正確に実行されるだけです。
→ 関連記事:株のスクリーニングを自動化した|Python+Discordで毎朝8時に条件銘柄が届く仕組みと、自作ツールにバグが見つかった話
22万円を失った日に、何が起きていたか
もう一つ、順番を決めるうえで大きかったのが、自分の負け方でした。
僕は1日のデイトレードで22万円の損失を出したことがあります。このとき、損切りルールを知らなかったわけではありません。「-8%で機械的に切る」と決めていました。
振り返ると、失敗は2つ重なっていました。
1つ目は、ポジションが大きすぎたこと。
今の僕のルールでは、1トレードの許容損失は資金の2%、1ポジションは65万円までです。ところがそのとき建てたのは、1単元が数百万円する銘柄でした。そもそも自分のルールでは触れない大きさです。同じ下落率でも、建玉が大きければ損失額はそのまま膨らみます。
2つ目は、逆指値を置いていなかったこと。
損切りラインは決めていたのに、注文としては置いていませんでした。だから含み損が膨らんでいく画面を見ながら、自分の手で決済することになりました。
正直に書くと、決めたラインより手前で切ったこと自体は、損失を小さくしています。-8%まで待っていたら、損失はもっと大きくなっていたはずです。
でもそれは、たまたまそのまま下げ続けたからそう見えるだけです。切った直後に反発していたら、今度は「切らなければよかった」と思ったでしょう。どちらに転んでも、判断が「含み損を抱えた自分」に委ねられている状態そのものが問題でした。
ここで気づいたことがあります。
- エントリーは、やるかやらないかを選べる。見送っても損はしない
- 出口は、ポジションを持った瞬間から逃げられない。しかも含み損を抱えた状態で判断を迫られる
少なくとも僕の場合、ルールを破りやすかったのは圧倒的に出口でした。落ち着いているときに決めたことを、含み損を見ながら実行するのは想像以上に難しい。
だとすれば、機械に任せて一番効果があるのは、エントリーではなく出口です。
→ 関連記事:信用取引の損切りルール|「-8%で機械的に切る」を守れずに22万円溶かした話
自動化を進める順番
以上を踏まえて、僕はこの順番で進めることにしました。
| 段階 | やること | 何が手に入るか | リスク |
|---|---|---|---|
| 1 | 逆指値の自動セット | 人間が最も壊す部分を機械に渡す | 低い |
| 2 | 約定履歴の自動記録 | 振り返りの材料。検証の土台 | 低い |
| 3 | 場中データの収集のみ | デイトレ条件を作る材料。発注はしない | 低い(誤発注は起きない) |
| 4 | 半自動発注(提案 → 承認 → 発注) | 速度を得つつ、判断は人間に残す | 中 |
| 5 | 完全自動 | 手離れ | 高い |
順番の考え方はシンプルで、「効果が大きく、リスクが小さい順」です。
1. 逆指値の自動セット
新規に建てたら、その直後に損切り注文を置く。 やりたいことはこれだけです。
地味に見えますが、僕がこれを最優先で実装することにしたのは、人間が忘れたり、迷ったり、「もう少し待とう」と思ったりする余地を、構造的に減らせるからです。
ポイントは「後で入れる」を許さないことです。買った直後は冷静なので逆指値を入れられますが、含み損が出てからでは入れられなくなります。冷静なうちに退路を決めておく、という作業を機械に任せます。
ただし、やりたいことが単純なのと、実装が単純なのは別です。 安全に動かすには、
- 新規注文の約定数量を照合する
- 逆指値の注文が受け付けられたかを確認する
- 再送するときに注文が重複しないようにする
- 部分約定、通信断、API停止、注文拒否を扱う
といった処理が要ります。約定してから逆指値が受け付けられるまでの間は、どうしても無防備な時間が生まれます。「置けば安心」ではありません。
なお、逆指値を置いてもその価格で必ず約定するわけではありません。寄り付きで大きく窓を開けた場合や、流動性が薄い場面では、想定より不利な価格で約定します。逆指値は損失をゼロにする道具ではなく、場中の裁量判断を減らす道具だと考えています。
2. 約定履歴の自動記録
売買の記録を、手作業ではなく自動で残します。
派手さはありませんが、体系的な記録が無いと検証が難しくなります。
ここで一点、実装上の注意があります。APIから自動で取れるのは注文と約定の情報だけです。「なぜ買ったのか」は自動では残りません。あとで振り返れるようにするには、発注した時点で、どの条件に反応したのか(戦略名・判定値・シグナルの時刻)を別途ログに残し、約定IDと紐づけておく必要があります。
そして手作業の記録は、負けた日ほど書かなくなります。だから自動化する価値があります。
3. 場中データの収集だけ行う(発注はしない)
ここは「作るけれど、使わない」段階です。
僕の売買条件は現時点ですべて日足の終値ベースで、性質としてはスイングトレード向きです。デイトレの条件を作るには、場中の値動きのデータが要ります。それを溜める段階です。
データ収集のモジュールに発注機能を持たせなければ、売買注文は発生しません。 安全にコードを育てられます。
ただし「リスクがゼロ」ではありません。APIの認証情報の管理、データの取りこぼし、各社の利用規約——このあたりは発注しなくても付いて回ります。
4. 半自動発注
プログラムが「この銘柄が条件に合っています」と提案し、人間が承認してから発注します。
完全自動の一歩手前です。速度は上がりますが、最後の判断は人間に残ります。ここまで来て初めて、自分のルールが実戦でどう振る舞うかが見えてきます。
5. 完全自動
ここまでの4段階を通過し、手数料とスリッページを含めた検証、検証に使っていない期間でのテスト、ペーパートレード、少額での実運用を経て、想定どおりに動くことを確認できてから、初めて検討します。
なお、検証で分かるのは「過去のデータでどう振る舞ったか」であって、将来も通用するかどうかではありません。相場環境は変わりますし、過去に合わせすぎた条件は将来に効きません。
実装するときの現実的な話
順番が決まったら、次は「どこで実装するか」です。証券会社によってできることが違います。
僕が実際に調べたのは、次の2つです。
| 楽天証券 マーケットスピードII RSS | 三菱UFJ eスマート証券 kabuステーションAPI | |
|---|---|---|
| 形式 | Excelアドイン | REST + WebSocket |
| 逆指値 | ○ | ○ |
| OCO(利確と損切りの同時発注) | 要確認(下記) | ×(API未対応) |
| Pythonから使えるか | △(Excel経由) | ○ |
| 必要なもの | 対応するMicrosoft Excel(必須) | kabuステーション本体の起動+API利用設定+Professionalプラン以上 |
段階1(損切り注文を機械が置く)は、どちらでも構築できます。
ただし、いくつか正確に押さえておくべき点があります。
OCOまわりは、名前が同じでも中身が違う
「利確と損切りを同時に出して、片方が約定したらもう片方を自動で取り消す」——これが本来のOCOです。
kabuステーションAPIは、このOCOに対応していません。 利確の指値と損切りの逆指値を別々に発注し、どちらかが約定したらもう片方を取り消す処理を、自分で書く必要があります。
一方、楽天証券の国内株式には「逆指値付通常注文」や「セット注文」といった仕組みがありますが、これらは本来のOCOとは別物です。僕が公式資料を読んだ範囲では、国内株式でFXのようなOCOがそのまま使えるとは確認できませんでした。ここは実際に使う前に、必ず公式の注文仕様をご確認ください。
取り消し処理を書き損ねると何が起きるか
片方の注文が残ったままになると、二重決済、注文の拒否、取消の遅延といった、想定していない注文状態が発生しえます。
具体的な挙動は、現物か信用か、注文区分は何かによって変わります。僕自身まだ検証環境で確認しきれていないので、断定は避けます。ただ、自動化の最初の一歩で最も慎重に作るべき部分であることは間違いありません。
「発注と同時に」は、実装としては簡単ではない
新規注文と、その約定数量に対応する決済逆指値を一体で登録できるとは限りません。多くの場合は「新規の約定を検知してから、決済の逆指値を発注する」という実装になります。
つまり、部分約定・通信断・API停止・注文拒否をどう扱うかまで考える必要があります。「同時に置けば安心」という単純な話ではない、というのが実際に調べてみた感想です。
2つのAPIの詳しい比較は、こちらに書きました。
→ 関連記事:個人でも株の自動売買はできる?楽天証券RSSとkabuステーションAPIを比較して分かったこと
自動化しても、資金管理は自分で決める必要がある
最後に、自動化の外側にある話をひとつ。
逆指値を自動で置けるようになっても、「どこに置くか」「何株建てるか」は自分で決めなければなりません。ここは自動化の範囲外です。
順番としてはこうなります。
1. 損切り価格を先に決める(僕の場合は-8%)<br>2. 1トレードで許容する損失額を決める(資金260万円の2%=5.2万円)<br>3. 1と2から株数を逆算する(5.2万円 ÷ 8% = 約65万円が1ポジションの上限)
逆指値の位置が先で、ポジションサイズが後です。逆にすると計算が合いません。
なお、この「-8%」「2%」という数字は僕が自分の資金量と、自分が平然と眺められる含み損の実測から決めたもので、誰にでも当てはまる推奨値ではありません。適切な水準は、資金・銘柄のボラティリティ・売買スタイルによって変わります。
そして「2%」は約定を保証する数字ではなく、あくまで想定するリスクの予算です。窓開けや流動性の薄い場面では、実際の損失がこれを超えることがあります。
→ 関連記事:信用取引の資金管理|1トレードの損失を「資金の2%」に抑えるポジションサイズの決め方
よくある質問
Q. プログラミングができなくても自動化できますか?
目的(損切りを自分の裁量に委ねない)だけなら、プログラムを書かずに近づけます。 ただし、どこまでできるかは証券会社・商品・現物か信用かによって大きく違います。
たとえば楽天証券の国内株式の「セット注文」は、新規約定後に決済注文を出せますが、決済側に逆指値は指定できません。「どのツールでも、発注と同時に損切りを置ける」わけではないのです。
なので現実的な進め方は、自分が使う証券会社の注文機能を先に調べて、そこでできる範囲を確認することだと思います。そのうえで足りない部分をAPIで補う、という順番が無理がありません。
自動化はあくまで手段で、目的は「含み損の中の自分に判断させないこと」です。手段は簡単な方から選べばいいと思います。
Q. 完全自動まで、どれくらいかかりますか?
僕自身がまだ段階1〜2にいるので、正直なところ分かりません。ただ、急いでいません。ルールの検証が終わっていない状態で先に進んでも、間違いを速く実行する仕組みが出来上がるだけだからです。
Q. 自動売買は証券会社の規約的に問題ないですか?
前述の2つは、いずれも証券会社が公式に提供している機能なので、その範囲での利用は想定されています。ただし利用規約や仕様は変更されることがあるので、運用前に必ず最新の規約をご確認ください。
なお、トレーディングツールの画面をキャプチャしてOCRで読み取るような、公式に提供されていない手段は別問題です。規約に抵触する可能性があるうえ、板の更新速度に対して遅すぎ、レイアウト変更で壊れます。
Q. 自動化すれば勝てるようになりますか?
なりません。自動化ができるのは「決めたことを、決めたとおりに、速く正確に実行する」ことだけです。ルールの検証が先、自動化は後だと考えています。
※この記事の内容は個人の見解・記録であり、投資助言ではありません。記載の損切り幅やリスク許容度は筆者個人の設定であり、推奨値ではありません。記載のAPI仕様・注文機能・プラン条件は2026年8月7日時点で筆者が確認したものであり、変更される可能性があります。実際の利用にあたっては各証券会社の公式情報および利用規約を必ずご確認ください。信用取引は元本を超える損失が生じる可能性があります。

