総平均法に準ずる方法における「実利益≧税法上の利益」の証明

総平均法に準ずる方法における「実利益≧税法上の利益」の証明

#数学#端数処理#シミュレーター#株式#税金

💡 概要

特定口座で株式を売買するとき,売却時には「総平均法に準ずる方法」で税法上の利益が計算されます. 本記事では,この計算方法で余計な税金が発生しないことを解説します. 具体的には,

  1. 実際の利益:全株売却時点での総売却金額-総買付金額
  2. 税法上の利益:全株売却時点での税法上の利益の和

としたとき,常に「実際の利益≧税法上の利益」となることを数学的に証明します.

記号

ここでは簡単のため,ある株式を1営業日あたり高々1回売買すると仮定します.また手数料は無料とします.

  • 取引日1:初めて株を購入した営業日
  • 取引日 n (2)\boldsymbol{n\ (\geq 2)}:取引日 n1n-1 の次に売買があった営業日

とします(売買日のみ注目して番号付け).

また各 n (1)n\ (\geq1) に対し,取引日 nn における記号を定めます:

  • pnp_n :株価(約定価格)
  • rnr_n :売買株数( r1>0r_{\boldsymbol{1}}>0 ,売却なら rn<0r_n<0
  • sn=1knrks_n=\sum_{1\leq k\leq n} r_k :約定後の保有株数( sn0s_n \geq 0
  • bn=pnrnb_n= p_n r_n :当日の売買金額
    • 初日は必ず買い:b1>0b_{\boldsymbol{1}}>0
    • 売却なら負:bn<0b_n<0
  • qnq_n :約定後の税法上の平均取得価格(計算式は後述)
  • gng_n :当日発生した税法上の利益(計算式は後述)
📄 まとめ

まとめると「 nn 日目に株価 pnp_nrnr_n 株売買したら,保有株数 sns_n ,平均取得価格 qnq_n になり, gng_n 円の税法上の利益が発生した」と言えます.


総平均法に準ずる方法(税法上の平均取得価格・利益の計算)

「総平均法に準ずる方法」による平均取得価格 qnq_n や日次利益 gng_n は次のように計算されます.

✍️ 定義:総平均法に準ずる方法の計算式
  • 取引日1q1=p1q_1=p_1 (約定価格のまま),g1=0g_1=0

  • 取引日 n (2)\boldsymbol{n\ (\geq 2)}

    • qn={qn1sn1+pnrnsnif rn>0 (買付)ceil(qn1)if rn<0 (売却)q_n=\begin{cases}\displaystyle{\frac{q_{n-1}s_{n-1} + p_n r_n}{s_n}} & \text{if $r_n>0$ (買付)} \\ \text{ceil}(q_{n-1})& \text{if $r_n<0$ (売却)} \end{cases}
      • ceil(x)\text{ceil}(x): 数 xx を整数に切り上げた値
      • \Rightarrow 買付日のみ本質的に値が変化
    • gn={0if rn>0 (買付)(pnqn)(rn)if rn<0 (売却)g_n=\begin{cases} 0 & \text{if $r_n>0$ (買付)} \\ (p_n-q_n)\cdot(-r_n)& \text{if $r_n<0$ (売却)} \end{cases}
      • \Rightarrow 売却日のみ損益が発生
🔍 参考

計算例と利益の観察

簡単な例として,5回の売買ですべて売却する場合の計算例を次の表に示します.

nnpnp_nrnr_nsns_nbnb_nqnq_ngng_n
116622221212p1=6p_1 \color{#000}{= 6}00
223344661212

q1s1+p2r2s2=246=4\frac{q_1 \color{#2a8b45}{s_1} \color{#000}{+} \color{#d9381e}{p_2} r_2}{\color{#2a8b45}{s_2}} = \frac{24}{6} = 4

00
33223-3336-6ceil(q2)=4\text{ceil}\color{#000}{(}q_2\color{#000}{)} = 4

(p3q3)(r3)=6\color{#000}{(}\color{#d9381e}{p_3} \color{#000}{- q_3)}\color{#000}{(}-\color{#1d6fbc}{r_3}\color{#000}{)} = -6

441177101077

q3s3+p4r4s4=1910=1.9\frac{\color{#2a8b45}{q_3 s_3} \color{#000}{+} \color{#d9381e}{p_4 r_4}}{\color{#2a8b45}{s_4}} = \frac{19}{10} = 1.9

00
554410-100040-40ceil(q4)=2\text{ceil}\color{#000}{(}q_4\color{#000}{)} = 2

(p5q5)(r5)=20\color{#000}{(}\color{#d9381e}{p_5} - \color{#000}{q_5)}\color{#000}{(}-\color{#1d6fbc}{r_5}\color{#000}{)} = 20

この例から実際の利益と税法上の利益を計算します.

  • 実際の利益

    • 保有株数 sns_n00 になった日までの bn\boldsymbol{-b_n} の和から求められます (bnb_n は買付で出ていく金額なので bn-b_n は入ってくる金額を表します).
    • 例では,(b1+b2++b5)=15-(b_1+b_2+\cdots +b_5)=15 円です.
  • 税法上の利益

    • 保有株数 sns_n00 になった日までの gn\boldsymbol{g_n} の和から求められます (gng_n は日次利益を表します).
    • 例では,g3+g5=14g_3 + g_5=14 円です.

以上より,税法上の利益の方が小さくなりました(切り上げがなければ両者一致).

このことから,株をすべて売却した取引日において,「実際の利益≧税法上の利益」となることが予想できます. これが成り立てば,実際より多くの税金を取られないことを保証できます.

シミュレーター

総平均法に準ずる方法による利益と実際の利益を比較するためのシミュレーターを作りました. 保有株数が 00 になるまでの取引を自由に入力でき,利益の比較ができます.

総平均法に準ずる方法 シミュレーター

番号n株価p株数r保有株数s売買金額b平均価格q税法上利益g操作
11+10000100001000010
22+11000121.00010
33-110000-321
44+11000142.00020
55-110000-532
65+11000153.00020
76-110000-642
86-100000-60000420000

✅ 検証成功:実利益 ≧ 税法上の利益

実際の総損益: 50003
税法上の総利益: 20005

「実際の利益≧税法上の利益」の証明

先ほどの主張をより厳密に書きます.

性質

n (2)n\ (\geq 2) に対して以下が成り立つ:

  • 売買株数列 r1,,rn1r_1,\ldots,r_{n-1} と株価列 p1,,pnp_1,\ldots,p_n が与えられているとし,取引日 nn にそれまで保有していた sn1s_{n-1} 株を全売却したと仮定する.
  • このとき実際の利益を FnF_n ,税法上の利益を GnG_n とすると, FnGnF_n \geq G_n となる.

証明

(方針:nn に関する数学的帰納法)

まず,FnF_nGnG_n は以下のように書けます:

  • 実際の利益Fn=pnsn11kn1bk\displaystyle{F_n = p_n s_{n-1} - \sum_{1\leq k\leq n-1}b_k}
    • n1n-1 日目までに 1kn1bk\sum_{1\leq k\leq n-1}b_k 円支出しており,nn 日目に pnsn1p_n s_{n-1} 円手元に戻るため
  • 税法上の利益Gn=(pnceil(qn1))sn1+1kn1gk\displaystyle{G_n=(p_n-\text{ceil}(q_{n-1}))s_{n-1} + \sum_{1\leq k \leq n-1}g_k}
    • n1n-1 日目までに 1kn1gk\sum_{1\leq k \leq n-1}g_k 円利益確定しており,nn 日目に平均取得価格 ceil(qn1)\text{ceil}(q_{n-1}) 円で sn1s_{n-1} 株売るため
⚠️ 注意

rn=sn1r_n =-s_{n-1} とするのが自然ですが,上記の式は rnr_n を一切用いていません.これは帰納法を使うためです. もし全売却を rn=sn1r_n=-s_{n-1} と表現すると,帰納法において前日の取引日 n1n-1sn2s_{n-2} 株を全売却する仮定することと rn1=sn2r_{n-1}= -s_{n-2} は同値となり,列 r1,,rn1r_1,\ldots,r_{n-1} の一般性を失います.

FnGnF_n \geq G_n を直接示しても良いですが,ここでは切り上げを無視した場合の平均取得価格 qkq^{\prime}_k や日次利益 gkg^{\prime}_k を導入します:

  • 取引日1: q1=p1q^{\prime}_1=p_1g1=0g^{\prime}_1=0
  • 取引日 k (2kn1)\boldsymbol{k\ (2\leq k \leq n-1)}
    • qk={qk1sk1+pkrkskif rk>0qk1if rk<0q^{\prime}_k=\begin{cases} \displaystyle{\frac{q^{\prime}_{k-1}s_{k-1} + p_k r_k}{s_k}} & \text{if } r_k>0 \\ \boldsymbol{q^{\prime}_{k-1}}& \text{if } r_k<0 \end{cases}
    • gk={0if rk>0(pkqk)(rk)if rk<0g^{\prime}_k=\begin{cases} 0 & \text{if } r_k>0 \\ (p_k-q^{\prime}_k)\cdot(-r_k)& \text{if } r_k<0 \end{cases}
    • \Rightarrow 切り上げを無視した利益: Gn=(pnqn1)sn1+1kn1gkG^{\prime}_n=(p_n-q^{\prime}_{n-1})s_{n-1}+\sum_{1\leq k \leq n-1}g^{\prime}_k

切り上げの有無から明らかに qkqkq^{\prime}_k \leq q_k なので, gkgkg^{\prime}_k \geq g_kGnGnG^{\prime}_n \geq G_n となります. 以下では( FnGn\boldsymbol{F_n \geq G^{\prime}_n} よりも強い主張として) Fn=Gn\boldsymbol{F_n = G^{\prime}_n} を数学的帰納法で示します.

n=2n=2 のとき

s1=r1s_1 = r_1q1=p1q'_1 = p_1 より,

  • F2=p2s1b1=p2r1p1r1=(p2p1)r1F_2 =p_2s_1-b_1 = p_2r_1-p_1r_1=(p_2-p_1)r_1
  • G2=(p2q1)s1+g1=(p2p1)r1G^{\prime}_2=(p_2-q^{\prime}_1)s_1 +g^{\prime}_1 = (p_2-p_1)r_1

なので, F2=G2F_2 = G^{\prime}_2 となり, n=2n=2 のとき主張が成り立ちます.

n3n\geq 3 のとき

n (3)n\ (\geq 3) に対し, Fn1=Gn1F_{n-1} = G^{\prime}_{n-1} が成り立つと仮定します. 最終的には Fn=GnF_n=G^{\prime}_n を示しますが,途中で2つの補助的な式を導出します.

[A] n3n\geq3 のとき, Fn=Fn1+(pnpn1)sn1\boldsymbol{F_n = F_{n-1}+ (p_n-p_{n-1})s_{n-1}}

📐 導出
Fn=pnsn1bn11kn2bk=(pnsn1pn1rn1)1kn2bkFn1=pn1sn21kn2bk\begin{aligned} \boldsymbol{F}_n &= p_n s_{n-1} - b_{n-1} - \sum_{1\leq k \leq n-2} b_k \\ &= (p_n s_{n-1} - p_{n-1}r_{n-1}) - \sum_{1\leq k \leq n-2} b_k \\ \boldsymbol{F}_{n-1} &= p_{n-1} s_{n-2} - \sum_{1\leq k \leq n-2} b_k \end{aligned}

より,

FnFn1=(pnsn1pn1rn1)pn1sn2=pnsn1pn1(rn1+sn2)=pnsn1pn1sn1=(pnpn1)sn1\begin{aligned} \boldsymbol{F}_n - \boldsymbol{F}_{n-1} &= (p_n s_{n-1} - p_{n-1} r_{n-1}) - p_{n-1}s_{n-2} \\ &= p_n s_{n-1} - p_{n-1} (r_{n-1} + s_{n-2}) \\ &= p_n s_{n-1} - p_{n-1} s_{n-1} \\ &= (p_n - p_{n-1}) s_{n-1} \end{aligned}

[B] n3n\geq3 のとき,Gn=Gn1+(pnpn1)sn1\boldsymbol{G'_n = G'_{n-1}+ (p_n-p_{n-1})s_{n-1}}

📐 導出
Gn=(pnqn1)sn1+gn1+1kn2gkGn1=(pn1qn2)sn2+1kn2gkGnGn1=(pnqn1)sn1+gn1(pn1qn2)sn2\begin{aligned} \boldsymbol{G}^{\prime}_n &= (p_n - q^{\prime}_{n-1})s_{n-1} + g^{\prime}_{n-1} + \sum_{1\leq k \leq n-2} g^{\prime}_k \\ \boldsymbol{G}^{\prime}_{n-1} &= (p_{n-1} - q^{\prime}_{n-2})s_{n-2} + \sum_{1\leq k \leq n-2} g^{\prime}_k \\ \boldsymbol{G}^{\prime}_n - \boldsymbol{G}^{\prime}_{n-1} &= (p_n - q^{\prime}_{n-1})s_{n-1} + g^{\prime}_{n-1} - (p_{n-1} - q^{\prime}_{n-2})s_{n-2} \end{aligned}

です.ここから rn1r_{n-1} の正負で場合分けします.

rn1>0\boldsymbol{r_{n-1}>0} のとき,qn1=qn2sn2+pn1rn1sn1q^{\prime}_{n-1} = \displaystyle{\frac{q^{\prime}_{n-2}s_{n-2}+p_{n-1}r_{n-1}}{s_{n-1}}}gn1=0g^{\prime}_{n-1}=0より,

GnGn1=(pnqn2sn2+pn1rn1sn1)sn1+0(pn1qn2)sn2=(pnsn1qn2sn2pn1rn1)pn1sn2+qn2sn2=pnsn1pn1(rn1+sn2)=pnsn1pn1sn1=(pnpn1)sn1\begin{aligned} \boldsymbol{G}^{\prime}_n - \boldsymbol{G}^{\prime}_{n-1} &= \left(p_n - \frac{q^{\prime}_{n-2}s_{n-2} + p_{n-1}r_{n-1}}{s_{n-1}} \right)s_{n-1} + 0 - (p_{n-1} - q^{\prime}_{n-2})s_{n-2} \\ &= ( p_n s_{n-1} - {\color{magenta}q^{\prime}_{n-2}s_{n-2}} - {\color{blue}p_{n-1}r_{n-1}} ) - {\color{blue}p_{n-1}s_{n-2}} + {\color{magenta}q^{\prime}_{n-2}s_{n-2}} \\ &= p_n s_{n-1} - {\color{blue}p_{n-1}(r_{n-1} + s_{n-2})} \\ &= p_n s_{n-1} - {\color{blue}p_{n-1}s_{n-1}} \\ &= (p_n - p_{n-1})s_{n-1} \end{aligned}

rn1<0\boldsymbol{r_{n-1}<0} のとき,qn1=qn2q^{\prime}_{n-1} = q^{\prime}_{n-2}gn1=(pn1qn1)(rn1)=(pn1qn2)rn1g^{\prime}_{n-1}=(p_{n-1}-q^{\prime}_{n-1})\cdot(-r_{n-1}) = -(p_{n-1}-q^{\prime}_{n-2})r_{n-1} より,

GnGn1=(pnqn2)sn1(pn1qn2)rn1(pn1qn2)sn2=pnsn1qn2sn1pn1rn1+qn2rn1pn1sn2+qn2sn2=pnsn1+qn2(sn1+rn1+sn2)pn1(rn1+sn2)=pnsn1pn1sn1=(pnpn1)sn1\begin{aligned} \boldsymbol{G}^{\prime}_n - \boldsymbol{G}^{\prime}_{n-1} &= (p_n - q^{\prime}_{n-2})s_{n-1} - (p_{n-1} - q^{\prime}_{n-2})r_{n-1} - (p_{n-1} - q^{\prime}_{n-2})s_{n-2} \\ &= p_n s_{n-1} {\color{magenta}- q^{\prime}_{n-2}s_{n-1}} - {\color{blue}p_{n-1}r_{n-1}} + {\color{magenta}q^{\prime}_{n-2}r_{n-1}} \\ &\quad\quad\quad\quad\quad - {\color{blue}p_{n-1}s_{n-2}} + {\color{magenta}q^{\prime}_{n-2}s_{n-2}} \\ &= p_n s_{n-1} + {\color{magenta}q^{\prime}_{n-2}(-s_{n-1} + r_{n-1} + s_{n-2})} - {\color{blue}p_{n-1}(r_{n-1} + s_{n-2})} \\ &= p_n s_{n-1} - {\color{blue}p_{n-1}s_{n-1}} \\ &= (p_n - p_{n-1})s_{n-1} \end{aligned}

最後に,式[A]から式[B]を辺々引くと FnGn=Fn1Gn1F_{n}-G^{\prime}_{n}=F_{n-1}-G^{\prime}_{n-1} が得られますが, 帰納法の仮定からこの右辺は 00 となります. よって Fn=GnF_{n}=G^{\prime}_{n} となり,n (3)n\ (\geq 3) に対する主張も成り立ちます.(証明終了)

補足

本記事では簡単のため,ある株式を1営業日あたり高々1回売買,手数料を無料と仮定しましたが,次のような拡張も考えられます.

📄 同一銘柄を同一日に複数回売買する場合

その日の約定時刻を問わず,買注文を先,売注文を後に並べ直して処理します(このとき nn は取引日でなく処理番号と呼ぶべきでしょう).

  • 初日の約定順:a(100株買),b(200株買)
  • 次日の約定順:c(300株売),d(400株買)

のとき,処理順序は a( r1=100r_1=100 ), b( r2=200r_2=200 ), d( r3=400r_3=400 ), c( r4=300r_4=-300 )となります(または b,a,d,c でもよく,計算結果も一致).

参考:https://www.smbcnikko.co.jp/service/tax_sys/qa/index.html#anc-07

📄 手数料が発生する場合

取引 nn で売買手数料 cn (0)c_n\ (\geq 0) が発生するとき,各記号を以下のように拡張すれば良いです

  • bn=pnrn+cnb_n = p_nr_n + \boldsymbol{c_n}
  • qn={qn1sn1+pnrn+cnsnif rn>0ceil(qn1)if rn<0q_n=\begin{cases}\displaystyle{\frac{q_{n-1}s_{n-1} + p_n r_n+\boldsymbol{c_n}}{s_n}} & \text{if } r_n>0 \\ \text{ceil}(q_{n-1})& \text{if } r_n<0 \end{cases}
  • gn={0if rn>0(pnqn)(rn)cnif rn<0g_n=\begin{cases} 0 & \text{if } r_n>0 \\ (p_n-q_n)\cdot(-r_n)-\boldsymbol{c_n}& \text{if } r_n<0 \end{cases}

※この定義の下では「実際の利益≧税法上の利益」となるかは改めて議論が必要です.

参考:https://www.jtg-sec.co.jp/bluesky_net/tokutei/tokutei7.htm

おわりに

税法上の利益と実際の利益は当然(ほぼ)等しくなるべきですが,今回それが数学的にわかり安心しました. 本記事の証明は帰納法を使った長いものですが,もっと簡単に証明できる可能性もあります. ご意見いただければ幸いです.ご覧いただきありがとうございました.