計算上の損切り価格は991.4円。しかし、その市場で注文できる価格は1円刻みだった。991円にするか992円にするかは、単なる表示の問題ではない。損切り幅、発動するタイミング、保有できる数量が変わる。
バックテストでは小数点以下の価格で売買できていても、本番では呼値や最低数量の制約がある。この記事では、呼値を考慮して価格を決め、その後に数量を再計算する順番を説明する。数値は特定銘柄の現在の仕様ではなく、1円刻み・100株単位を仮定した例である。
呼値は発注できる価格の刻み
呼値の単位とは、注文価格の最小の刻みを指す。日本取引所グループの資料でも、銘柄の区分や価格水準に応じた刻みが示されている。全ての株が同じ1円刻みというわけではなく、商品、銘柄、価格帯によって条件が違う。
制度変更や銘柄区分の変更があれば、過去と現在で適用される刻みが変わる場合がある。したがって最新の呼値表だけで長期間のバックテストを再現するのは適切でないことがある。対象時点で使えた注文価格と、現在の発注仕様を分けて管理したい。
買い建玉の損切りを上下へ丸める
1000円で買い、理論上の損切り水準が991.4円だったとする。理論幅は8.6円だ。1円刻みで991円へ下げれば幅は9円、992円へ上げれば幅は8円になる。同じ100株なら、指定価格で決済できる単純な想定損失は900円と800円で違う。
992円へ近づければ予定損失は小さくなるが、元のルールより早く損切りに触れやすい。991円へ遠ざければ、理論水準を割るまで待つ設計に近いが、幅が広がる。「安全だから常に切り上げ」という一つの処理では、売買ルールの意味を保てない。

四捨五入は意図を理解してくれない
一般的な四捨五入は最も近い価格を選ぶだけで、損切り、利確、新規ブレイクアウトの目的を判断しない。買い逆指値を抵抗線の上へ置くつもりなのに、下へ丸めて抵抗線の内側へ戻してしまえば別の条件になる。
買い指値では、計算した上限価格を超えない方向へ丸めたい場合がある。売り指値では下限を下回らない方向が考えられる。一方、逆指値の発動価格と発動後の指値は役割が違う。全ての価格欄へ同じ丸め関数を適用するのでなく、注文の意図ごとに規則を定義する。
価格を確定してから数量を決める
許容する予定損失を9000円、買値1000円、丸めた損切りを991円、追加の滑り想定を1株2円とする。実効的な損失幅は1000−991+2=11円。費用をここでは別にし、9000÷11=約818株となる。
100株単位なら切り下げて800株となり、予定損失は8800円だ。理論幅8.6円のまま先に数量を計算すると、9000÷8.6から1000株を選んでしまう。後で価格を991円へ丸め、滑り2円を入れれば1万1000円となり、9000円の予算を超える。

数量は通常、リスク上限を超えない方向へ丸める
818株を四捨五入して800株にする例では偶然問題がないが、計算結果が858株なら900株となり、上限を超える。リスク予算を制約とするなら、取引単位へ切り下げる必要がある。最も近い数量と、上限以下の最大数量は違う。
最小単位でも予定損失が予算を超えるなら、数量ゼロという結果を受け入れる。その銘柄を無理に買うために損切りを近づければ、元の戦略を変えてしまう。小型の商品や別の対象を検討するか、取引を見送るという選択がある。
手数料に最低額がある場合は単純な割り算だけでは足りない
費用が数量に完全比例するなら、一単位あたり費用を損失幅へ加えやすい。しかし最低手数料や段階的な料率がある場合、数量を決めてから総費用を計算し、予算内か再確認する必要がある。
例えば800株で8800円の予定損失に往復300円の固定費用が加われば9100円になり、9000円を超える。同じ100株単位で700株なら7700+300=8000円だ。このように、暫定数量から総額を検査して必要なら一単位ずつ下げる手順が使える。
損切りの発動価格と約定価格は別
991円の逆指値を設定しても、必ず991円で売れるわけではない。価格が飛んだり買い板が薄くなったりすれば、不利な価格で約定する可能性がある。逆指値付き指値なら価格条件を守る代わりに未約定となるリスクがある。
滑り2円という例も、常に2円以内で収まる意味ではない。通常時の予定計算に加え、5円、10円などの追加変動や寄り付きのギャップを別シナリオとして確認する。呼値へ正しく丸めたことは、損失上限を市場が守ってくれることとは違う。
価格帯をまたぐと刻みが変わる場合
現在価格の呼値が使えても、遠くに置く利確価格や損切り価格では別の価格帯に入る場合がある。現在価格の刻みだけで全ての注文を丸めると、送信先で無効価格になる可能性がある。
まず注文候補価格が属する価格帯を判定し、その価格帯の刻みへ合わせる。丸めた結果が境界を越えた場合には、適用される刻みをもう一度確認する。境界のちょうど上下をテストデータに含め、単純な一定幅の計算だけで済ませない。
チャートの小数桁と注文価格の精度は違う
指標が小数点以下四桁まで表示されても、その精度で売買できるとは限らない。複数の価格の平均は、個々の約定価格より細かい小数を持ち得る。移動平均やATRの小数値が自然に出ることと、注文の有効な価格刻みは別問題だ。
逆に、画面が丸めて表示しているだけで、内部データにはより細かな値がある場合もある。表示された文字列を再利用するのでなく、元の数値と注文仕様から発注価格を作る。計算用、発注用、表示用の値を別に保存すると誤差の原因を追いやすい。
プログラムでは小数の誤差にも注意する
コンピューターの二進浮動小数点では、0.1のような十進小数を厳密に表せないことがある。割り算した値が期待した整数よりわずかに大きくなり、切り上げで一刻み余分に動く実装も起こり得る。
価格を最小単位の整数で持つ、十進数の型を使う、境界の許容誤差を明確にするなどの方法がある。ただし許容誤差を広げすぎると、実際に無効な価格を通す。最終的には取引先の価格・数量フィルターへ合っているかを検査する必要がある。
売り建玉では方向を反転して確認する
空売りの損切りは通常、売値より上の買い戻しになる。損切りを上へ丸めるほど幅が広がり、下へ丸めるほど近くなる。買い戦略用の符号をそのまま使うと、負の損失幅や過大な数量が出ることがある。
買い・売りそれぞれで、理論価格が刻みに一致する場合、刻みの中間の場合、価格帯境界の場合を試す。価格が一致するときに余計に一刻み動かないことも確認する。数量の最小値、ゼロ、資金不足、価格データ欠損も同じくテスト対象になる。
一刻みが予定利益の何%かを測る
一刻み1円でも、利益目標が2円なら目標幅の半分、利益目標が100円なら1%にすぎない。呼値の粗さが戦略へ与える影響は絶対額だけでなく、狙う値幅との比率で変わる。数ティックの利益を狙う戦略では、一回の丸めが期待値を大きく変え得る。
例えば買値1000円、理論利確1002.4円を1002円へ丸めると、利幅は2.4円から2円へ約16.7%縮む。損切り側は8.6円から9円へ広がるなら、利益と損失の比率は両側から悪化する。価格をわずかに変えただけと考えず、丸め後の損益条件全体を再計算する必要がある。
一部約定後にも予定リスクを更新する
800株の予定注文が、異なる価格で一部ずつ成立すると、平均取得価格と保有数量が変わる。注文前の1000円という想定を使い続けず、実際の加重平均価格から損切りまでの幅を再評価する。ただし、その結果だけを見て損切りを不用意に遠ざけると、元の売買ルールを変えることになる。
残注文が全量成立した場合のリスクも合わせて計算する。現在の約定数量だけなら予算内でも、残りが不利な価格で成立すれば上限を超える可能性がある。変更や取消しを行う場合は、処理中の追加約定も想定し、最終数量の確認を行う必要がある。
発注前の数量計算と約定後のリスク監視は一度きりの処理ではない。市場が提示する刻み、実際の取得価格、未約定量が変わるたびに、何を固定し何を更新するかを決める。この区別を持つと、計算上は予算内なのに実口座では超過するという事故を見つけやすくなる。
検証では丸め前と丸め後の成績を比較する
計算された数量が最低注文単位に届かない場合は、その取引を見送る選択肢を残す。例えば許容数量が80株でも100株単位でしか注文できなければ、100株へ切り上げると予定上限を超える。注文を成立させるためだけに損切りを近づければ、元の戦略条件を変えることになる。代替商品へ移る場合にも価格感応度や費用は異なるため、同じ数量計算をそのまま流用しない。
全ての取引について、理論上の新規価格・決済価格と実際に発注可能な価格を並べる。丸め後に取引回数、損切り到達、平均利益がどれだけ変わったかを見る。刻みが粗い商品で小さな値幅を狙うほど、違いが重要になりやすい。
丸めた後の価格が足の高値や安値へ届くかを再判定する必要もある。理論価格へ届いたからといって、丸めて遠くした指値にも届いたとは限らない。価格だけ差し替えて約定件数を固定すると、実行できなかった取引が残ってしまう。
発注ログには理論価格、丸め規則、最終価格、刻み、数量単位、予定損失を残す。本番で拒否が起きたとき、どの変換で仕様を外れたかが分かる。小数点を見やすくする作業ではなく、取引ルールを市場の制約へ翻訳する作業として丸めを扱いたい。
参考:日本取引所グループ「呼値の単位」。本文の1円刻み・100株単位は独自の説明条件であり、全銘柄共通の制度ではない。


コメント