順張りと逆張りの是非 (2017/06/23)

順張りは正しいが、逆張りは間違っている、といった主張をよく見かける。私はこのような主張に同意しない。そこで、順張り、逆張りについての私なりの考えをまとめてみる。

理屈っぽいので、興味のない人はお帰り下さい。

順張りと逆張り

私は順張り、逆張りを以下のように解釈している。

  • 順張りとは価格が上昇すれば継続して上昇すると予測して買い、下落すれば継続して下落すると予測して売ることである。
  • 逆張りとは価格が下落すれば反転して上昇すると予測して買い、上昇すれば反転して下落すると予測して売ることである。

逆張りに対する批判と反論

順張り派は反転の保証がないと批判する。例えば、価格が下落したからといって、そこで買って反転しなかったら痛い目に遭う、というのである。

だが、保証がないのは継続の場合も同じである。例えば、価格が上昇したからといって、そこで買って継続しなかったら痛い目に遭うだろう

逆張りは自己矛盾であるという批判もある。例えば、価格が下落したので逆張りで買ったものの、さらに下落したので損切りをして売ったとする。この場合、価格は下落したのに売ったことになり、これは順張りになるから自己矛盾だ、というのである。

だが、自己矛盾は順張りにもある。例えば、価格が上昇したので順張りで買ったところ、さらに上昇したので利食いをして売ったとする。この場合、価格は上昇したのに売ったことになり、これは逆張りになるから、これも自己矛盾である。

相場には継続も反転もある

現実の相場では永遠に上昇したり、下落したりすることはない。上昇してもいずれは下落に転じ、下落してもいずれは上昇に転じるものである。

現実の相場では永遠に反転を繰り返すということはない。上昇した後もしばらく上昇を続けたり、下落した後もしばらく下落を続けることがあるものである。

継続か反転かの判断が重要

重要なのは継続か反転かの判断によって順張りと逆張りを使い分けることである。継続しかないと考えたら順張りで利食いはできないし、逆張りではポジションを取ることすらできない。また、反転しかないと考えたら逆張りで損切りはできないし、順張りではポジションを取ることすらできなくなる。

現実の相場には継続も反転もある。したがって、順張りもあれば、逆張りもあり、利食いもあれば、損切りもなければならない。

順張りの利食い

順張りで利食いするのは継続から反転に判断が変わった場合だ。順張りでポジションを取ったのは価格の方向が継続すると判断したからである。その後、利食いしたのは、もはや継続しない、反転すると判断したからである。

逆張りの損切り

逆張りで損切りするのは反転から継続に判断が変わった場合だ。逆張りでポジションを取ったのは価格の方向が反転すると判断したからである。その後、損切りしたのは、もはや反転しない、継続すると判断したからである。

利食い・損切りと損益の大きさ

利益がある程度に達したら利食いし、損失がある程度に達したら損切りするという手法はよく行われていると思う。だが、私はこのような手法には疑問を感じている。

利益が出ていて、しかも相場が継続すると考えるなら利食いすべきではない。損失が出ていて、しかも相場が反転すると考えるなら損切りすべきではない。ポジションの損益にはとらわれず、現時点でどのように行動すれば利益を最大化できるかということが重要ではないかと私は考えている。

願望・恐怖と判断を履き違えない

ただし、以上の議論はあくまでも判断は概ね正しく、決して願望や恐怖と履き違えたりしないというのが前提である。

利益が出ている→利益が増えてほしい→相場が継続してほしい→継続するだろう→利食わない、というのはよくない。損失が出ている→損失が減ってほしい→相場が反転してほしい→反転するだろう→損切らない、というのもよくないのである。

また、利益が出ている→利益が縮小しそうで怖い→相場が反転する気がする→反転するだろう→利食う、というのはよくない。損失が出ている→損失が拡大しそうで怖い→相場が継続する気がする→継続するだろう→損切る、というのもよくないのである。

願望や恐怖といった感情にとらわれては正しく判断することはできなくなる。もちろん、冷静に判断したとしても、それが正しいという保証はないし、難しいことだ。だが、感情にとらわれてはなおさら正しい判断から遠ざかるだろう。

勝てない戦略の活用 (2017/05/19)

勝てない戦略でも他の戦略と組み合わせると役に立つ場合がある。複数の戦略を組み合わせる場合、勝てる戦略同士を組み合わせなければならないと思い込んでいる人もいるだろう。だが、かならずしもそうでないことを説明する。

期待利益、リスク、シャープレシオ

本題に入る前に、期待利益、リスク、シャープレシオについて簡単に説明しておく。

ここに1年当たり100トレード、1トレード当たりの期待利益が0.1%、リスクが1.0%の戦略Aがあるとする。リスクフリーレートを考慮せずにシャープレシオを求めると、

\[ 戦略Aの1年当たりの期待利益 = 0.1 \times 100 = 10.0 \] \[ 戦略Aの1年当たりのリスク = 1.0 \times \sqrt{100} = 10.0 \] \[ 戦略Aの1年当たりのシャープレシオ = 10.0 \div 10.0 = 1.0 \]

となる。

一方、1年当たり100トレード、1トレード当たりの期待利益が0.2%、リスクが4.0%の戦略Bがあるとする。同様に考えると、

\[ 戦略Bの1年当たりの期待利益 = 0.2 \times 100 = 20.0 \] \[ 戦略Bの1年当たりのリスク = 4.0 \times \sqrt{100} = 40.0 \] \[ 戦略Bの1年当たりのシャープレシオ = 20.0 \div 40.0 = 0.5 \]

となる。

戦略Bの期待利益は戦略Aの2倍である。では戦略Bのほうが優れているかといえばそういうわけではない。1年後の予想利益はリスクも考慮すると、

\[ 戦略Aの1年後の予想利益 = 10.0 \pm 10.0 \] \[ 戦略Bの1年後の予想利益 = 20.0 \pm 40.0 \]

となる。

都合よく考えると、利益は最大で戦略Aは20%、戦略Bは60%の利益だから戦略Bのほうが良さそうに見える。だが、逆に都合悪く考えると、戦略Aは0%、戦略Bは-20%となり、戦略Aは単に利益が出ないだけだが、戦略Bは-20%の損失である。

都合よく考えるのも都合悪く考えるのも正しくない。リスクを等しくして比較する必要がある。

もし戦略Aで戦略Bと同じ4.0%のリスクを覚悟できるなら、投資額を4倍にすればいい。すると、期待利益も4倍になり、

\[ 戦略Aの1年当たりの期待利益 = 0.4 \times 100 = 40.0 \] \[ 戦略Aの1年当たりのリスク = 4.0 \times \sqrt{100} = 40.0 \] \[ 戦略Aの1年後の予想利益 = 40.0 \pm 40.0 \]

となる。つまり、都合よく考えれば80%の利益、都合悪く考えても0%の利益で、いずれの場合も戦略Aは戦略Bより優れている。

勝てない戦略は役に立たないか

では本題に入る。

ここに勝つ場合は+1、負ける場合は-1で一定で、1年当たり12回勝ち、8回負けるという戦略Cがあるとする。Pythonで計算してみると、

import numpy as np

c = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1,
              -1])
mean_c = np.mean(c)
print('mean_c = ', mean_c)
std_c = np.std(c)
print('std_c = ', std_c)
sharpe_c = mean_c / std_c * np.sqrt(20)
print('sharpe_c = ', sharpe_c)


mean_c =  0.2
std_c =  0.979795897113
sharpe_c =  0.912870929175

で、期待利益は0.2、リスクは0.98、シャープレシオは0.91となる。

一方、勝つ場合は+0.5、負ける場合は-0.5で一定で、戦略Cが勝てば必ず負け、負ければ必ず勝つという戦略Dがあるとする。計算すると

d = np.array([-0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5,
            -0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5])
mean_d = np.mean(d)
print('mean_d = ', mean_d)
std_d = np.std(d)
print('std_d = ', std_d)
sharpe_d = mean_d / std_d * np.sqrt(20)
print('sharpe_d = ', sharpe_d)


mean_d =  -0.1
std_d =  0.489897948557
sharpe_d =  -0.912870929175

で、期待利益は-0.1、リスクは0.49、シャープレシオは-0.91となる。

戦略Cと戦略Dの相関係数を求めると、

cor_cd = np.corrcoef(c, d)[0][1]
print('cor_cd = ', cor_cd)


cor_cd =  -1.0

で、-1.0となる。勝敗が正反対なのであるから当然である。

ここで戦略Cと戦略Dを合わせた戦略Eを考えてみる。計算すると、

e = c + d
mean_e = np.mean(e)
print('mean_e = ', mean_e)
std_e = np.std(e)
print('std_e = ', std_e)
sharpe_e = mean_e / std_e * np.sqrt(20)
print('sharpe_e = ', sharpe_e)


mean_e =  0.1
std_e =  0.489897948557
sharpe_e =  0.912870929175

で、期待利益は0.1、リスクは0.49、シャープレシオは0.91となる。戦略Cと比べると、期待利益は半減したが、リスクも半減したのでシャープレシオは変わらない。

したがって、戦略Eはシャープレシオにおいて戦略Cと同等である。戦略Eが投資額を倍にして戦略Cと同じリスクを負うなら、期待利益も同じになる。資金の使い方として非効率である点はここでは無視する。

ところで、戦略Dの負けを1つだけ勝ちだったことにしてみる。再計算すると、

d[0] = 0.5
mean_d = np.mean(d)
print('mean_d = ', mean_d)
std_d = np.std(d)
print('std_d = ', std_d)
sharpe_d = mean_d / std_d * np.sqrt(20)
print('sharpe_d = ', sharpe_d)


mean_d =  -0.05
std_d =  0.497493718553
sharpe_d =  -0.449466574975

で、期待利益は-0.05、リスクは0.49、シャープレシオは-0.45となる。元の戦略と比べると、期待利益は増加したが、リスクはそのままなので、シャープレシオも増加している。

戦略Cと新しい戦略Dの相関係数を求めると、

cor_cd = np.corrcoef(c, d)[0][1]
print('cor_cd = ', cor_cd)


cor_cd =  -0.902670933848

で、-0.90となる。勝敗が完全には反対でないので、これも当然である。

そして、戦略Cにこの新しい戦略Dを合わせて新しい戦略Eを考えてみる。再計算すると、

e = c + d
mean_e = np.mean(e)
print('mean_e = ', mean_e)
std_e = np.std(e)
print('std_e = ', std_e)
sharpe_e = mean_e / std_e * np.sqrt(20)
print('sharpe_e = ', sharpe_e)


mean_e =  0.15
std_e =  0.572276157113
sharpe_e =  1.17219699775

で、期待利益は0.15、リスクは0.57、シャープレシオは1.17となる。戦略Cと比べると、期待利益は減少しているが、リスクはそれ以上に減少しているので、シャープレシオは大きくなっている。

新しい戦略Dの期待利益は-0.05であり、マイナスである。にもかかわらず、戦略Cのパフォーマンスを改善していることが分かる。つまり、勝てない戦略でも役に立つことがあるのである。

理屈はそうだが...

長々と説明したが、理屈はそうでも、いざ実行するとなると心理的にかなり抵抗がある。かく言う私も勝てない戦略を活用してみたいとは思うが(在庫はたくさんあるので)、実際にはやっていない(笑)。

トレード戦略の種類

基本的なトレード戦略の種類について述べる。下のSlideShareによると、5つの基本的なクオンツ戦略があるという。

http://www.slideshare.net/JessStauth/d-30965323(p4)

これによると、戦略は

  1. 平均回帰戦略:上がるものは下がる。

  2. モメンタム戦略:トレンドは友である。

  3. バリュー戦略:安く買って高く売る。

  4. センチメント戦略:噂で買って事実で売る。

  5. 季節性戦略:5月に売る。

の5種類に分類される。

ここでは私の独断と偏見による解釈を用いて、各戦略について簡単に説明する。

平均回帰戦略(上がるものは下がる)

上がるものも永遠に上がり続けることはない。いつかは必ず下がるものである。下がるものも永遠に下がり続けることはない。いつかは必ず上がるものである。

上がったものは下がり、下がったものは上がって、いずれ平均に戻ってくる。そこで、平均より下がれば買い、上がれば売る。これが平均回帰戦略であり、つまりは逆張りである。

ところで、平均回帰戦略について、平均の下で買い、上で売れば必ず勝てるのではないか、と勘違いする初心者が時々いる。だが、実際にはそうはいかない。平均自体も動くからである。

例えば、平均の下で買っても平均が下がり続けることがある。そして、価格が平均に戻ったときには平均は買った価格より下になっていることもあるのである。

また、平均の上で売っても平均が上がり続けることがある。そして、価格が平均に戻ったときには平均は売った価格より上になっていることもあるのである。

平均回帰戦略で勝つためには平均自体の動きが水平に近くなるタイミングを測る必要がある。

モメンタム戦略(トレンドは友である)

トレンドは友、というのはtrendとfriendをかけた洒落である。米国の投資家ジョージ・ソロスの言葉らしい。トレンドとは仲良くしろ、逆らうな、従え、ということのようだ。つまりはトレンドフォロー、順張りである。

平均回帰戦略の逆で、上がれば、その勢い、つまりモメンタムに付いて行って買い、下がれば、そのモメンタムに付いて行って売るのである。では、順張りと逆張り、どちらの戦略が正しいのだろうか。

順張りは正しいが、逆張りは間違っている、というような意見をよく見かける。だが、それは違うと私は考えている。値動きというのは時には平均回帰的であり、時にはモメンタム的であるものだ。したがって状況に合った戦略を採用しなければならない。とはいえ、言うは易く行うは難し、ではある。

バリュー戦略(安く買って高く売る)

「安く買って高く売る」を「下がったら買って上がったら売る」と解してはいけないのだろう。それだと平均回帰戦略と変わらない。「価格が本来の価値より安ければ買い、高ければ売る」と解すべきなのだろう。

本来の価値を知るためには価格以外の指標が必要である。この辺が過去の価格さえ分かればよい平均回帰戦略との違いである。FXの場合、各国の経済指標などを見ることになるのだろうか。

経済指標は少なくとも短期トレードでは使いにくい。取引する通貨ペア以外の通貨ペアの価格を用い、取引する通貨ペアのあるべき価格を算出するというのはどうか。私はそれより高いか安いかで売買するという手法をバリュー戦略としてもいいのではないかと考えている。

センチメント戦略(噂で買って事実で売る)

「噂で買って事実で売る」とは、例えば米国の利上げ観測が持ち上がったらドルが高くなるだろうと予測して買う。そして、実際に利上げが決まったらもはやこれ以上は高くならないだろうと予測して売るのである。

だが、センチメントをどのように測るかというのは簡単ではない。テキストなどを用いた定性分析も必要になるだろう。

季節性戦略(5月に売る)

「5月に売る」というのは株価は5月以降に下がる傾向があるので、5月になったら売るということである。実際に5月以降に下がる傾向があるのかは怪しい。だが、年、四半期、月、週、日などを通した周期性があると考えて、それに基づいた売買を行うのが季節性戦略である。

単に時期によって上がりやすい、下がりやすいということだけが季節性ではない。平均回帰的である、モメンタム的である、というのも季節性である。

商品市場では農作物やエネルギーなど、季節によって需要や供給が大きく変化するものがあるだろう。そのような場合、季節性を期待できる。

FXにおける季節性は商慣習に基づくものが多いのではないだろうか。日本の仲値やロンドンフィキシングなどである。しかし、商慣習も一定不変というわけではないことには注意が必要である。

(2017/03/09更新)

平均回帰戦略 (2017/05/27)

平均回帰戦略を作成してみる。

トレンドは敵

「トレンドは友」と言われるが、平均回帰戦略ではトレンドは敵である。単に売られ過ぎを買い、買われ過ぎを売るというだけでは、なかなか勝てる戦略にはならない。トレンドが発生すると、それまでに稼いだ利益はごっそり持って行かれてしまう。

トレンドを回避する方法としては

①トレンド系指標でトレンドの方向を確認して、それに逆らわない形でエントリーする、

②より長い計算期間でトレンドの方向を確認して、それに逆らわない形でエントリーする、

③トレンドの変換を確認してからエントリーする、

といったことがテクニカル分析ではよく言われる。

ただ、私の経験上、少なくとも短期トレードでは1、2は役に立たず、3は利益の幅を縮小して結局勝てない、という印象が強い。

トレンドは回避するのではなくてやり過ごす

私はトレンドを回避するよりもやり過ごすのが有効だと考えている。そもそも、トレンドは発生の初期段階で認識することは難しい。トレンドが発生したことを認識できたときには、もはやトレンドに乗るには遅すぎ、といって反転するかいなかは分からないという微妙なタイミングである。

だが、トレンドは決して永続しない。トレンドの発生を確認し、しばらく待てばトレンドはいずれ収束する。少なくとも、それまでに稼いだ利益をごっそり持って行ってしまうほどの勢いは残されていないのである。

平均回帰戦略の売買ルール

以上の考えに基づき、以下のような売買ルールを考えてみる。

買いエントリー

①zスコアがマイナスのエントリー閾値以下、かつ、

②トレンド期間がマイナスのフィルター閾値以下。

売りエントリー

①zスコアがプラスのエントリー閾値以上、かつ、

②トレンド期間がプラスのフィルター閾値以上。

買いエグジット

○zスコアが0以上。

売りエグジット

○zスコアが0以下。

備考

①この記事のzスコアとは終値を移動平均で減じ、それを移動標準偏差で除したものである。。

②この記事のトレンド期間とは価格が連続して移動平均の上に位置する期間(符号はプラス)、または下に位置する期間(符号はマイナス)のことである。

売買ルールの検証

では、上記の売買ルールに基づき、以下の内容で検証してみる。

  • 通貨ペア: USDJPY
  • スプレッド: 0.4pips
  • 足の種類: 5分足
  • 開始日: 2013年1月1日
  • 終了日: 2017年1月1日
  • 最適化: ウォークフォワードテスト

以下のコードを「mean_reversion.py」ファイルとして「~/py」フォルダーに保存する。

# coding: utf-8

import forex_system as fs
import pandas as pd

MINUTE = 60

# パラメータの設定
ENTRY_THRESHOLD = 0.0
FILTER_THRESHOLD = 0.0
PARAMETER = [ENTRY_THRESHOLD, FILTER_THRESHOLD]

# 最適化の設定
START_ENTRY_THRESHOLD = 0.5
END_ENTRY_THRESHOLD = 2.5
STEP_ENTRY_THRESHOLD = 0.5
START_FILTER_THRESHOLD = 0.25
END_FILTER_THRESHOLD = 1.25
STEP_FILTER_THRESHOLD = 0.25
RRANGES = (
    slice(START_ENTRY_THRESHOLD, END_ENTRY_THRESHOLD, STEP_ENTRY_THRESHOLD),
    slice(START_FILTER_THRESHOLD, END_FILTER_THRESHOLD, STEP_FILTER_THRESHOLD),
)

get_model = None

def strategy(parameter, symbol, timeframe):
    '''戦略を記述する。
    Args:
        parameter: パラメーター。
        symbol: 通貨ペア。
        timeframe: 期間。
    Returns:
        買いエントリー、買いエグジット、売りエントリー、売りエグジット、ロット数。
    '''
    entry_threshold = parameter[0]
    filter_threshold = parameter[1]
    period = fs.convert_minute_to_period(MINUTE, timeframe)
    zscore1 = fs.i_zscore(symbol, timeframe, period, 'MODE_SMA', 1)
    trend_duration1 = fs.i_trend_duration(symbol, timeframe, period,
                                          'MODE_SMA', 1)
    trend_duration1 /= period
    buy_entry = ((zscore1 <= -entry_threshold) &
                 (trend_duration1 <= -filter_threshold))
    buy_exit = zscore1 >= 0.0
    sell_entry = ((zscore1 >= entry_threshold) &
                  (trend_duration1 >= filter_threshold))
    sell_exit = zscore1 <= 0.0
    index = zscore1.index
    lots = pd.Series(1.0, index=index)
    return buy_entry, buy_exit, sell_entry, sell_exit, lots

if __name__ == '__main__':
    fs.platform()

以下のコマンドを実行してバックテストする。

%run -t ~/py/mean_reversion.py --mode backtest --symbol USDJPY --timeframe 5 --spread 0.4 --start 2013.01.01 --end 2017.01.01 --optimization 2

  start_test    end_test trades    apr sharpe    kelly drawdowns durations    parameter
  2013.12.27  2014.01.25    117 -0.001 -0.004   -0.096     0.012        18   [1.5, 0.5]
  2014.01.26  2014.02.24    123   0.35  9.565  264.891     0.006         4   [1.5, 0.5]
  2014.02.25  2014.03.26    111  0.196  6.653  227.406     0.005         7   [1.5, 0.5]
  2014.03.27  2014.04.25    124  0.095  3.348  117.649     0.005         8   [1.5, 0.5]
  2014.04.26  2014.05.25    103  0.011  0.528   24.182     0.005         7   [1.5, 0.5]
  2014.05.26  2014.06.24    114  0.101  6.127   373.18     0.002         2   [1.5, 0.5]
  2014.06.25  2014.07.24    113  0.007  0.465   30.847     0.005        17   [1.5, 0.5]
  2014.07.25  2014.08.23    112   0.04  2.006   99.139     0.003         7   [1.5, 0.5]
  2014.08.24  2014.09.22    117 -0.034 -1.099   -36.17     0.013        19   [1.5, 0.5]
  2014.09.23  2014.10.22    138  0.386  7.796  159.464     0.015         2   [1.5, 0.5]
  2014.10.23  2014.11.21    123  0.167  3.612   78.105     0.014         8   [1.5, 0.5]
  2014.11.22  2014.12.21    119   0.37  6.122  102.382     0.015         4   [1.5, 0.5]
  2014.12.22  2015.01.20    121  0.063   1.17   21.379      0.01        13   [1.5, 0.5]
  2015.01.21  2015.02.19    116  0.342  9.023  241.041     0.005         3   [1.5, 0.5]
  2015.02.20  2015.03.21    103    0.1  2.466   60.636     0.011         3   [1.5, 0.5]
  2015.03.22  2015.04.20    128 -0.014 -0.401  -12.087     0.012        17   [1.5, 0.5]
  2015.04.21  2015.05.20    123  0.083  2.707    88.46     0.006         5   [1.5, 0.5]
  2015.05.21  2015.06.19     61  0.096  4.099  175.404     0.004         5  [1.5, 0.75]
  2015.06.20  2015.07.19     61  0.107  4.547  193.778     0.005         5  [1.5, 0.75]
  2015.07.20  2015.08.18     26 -0.013 -0.811  -50.338     0.006        10   [1.5, 1.0]
  2015.08.19  2015.09.17     25  0.018  0.598   19.913     0.006        11   [1.5, 1.0]
  2015.09.18  2015.10.17     47 -0.041   -1.8  -78.528     0.007        12  [1.5, 0.75]
  2015.10.18  2015.11.16     27  0.031  1.857  110.617     0.004         5   [1.5, 1.0]
  2015.11.17  2015.12.16     36  0.018  1.124     69.4     0.005         6   [1.5, 1.0]
  2015.12.17  2016.01.15     62  0.256  9.889  386.208     0.004         4  [1.5, 0.75]
  2016.01.16  2016.02.14     55  0.207  4.995  121.295     0.007         5  [1.5, 0.75]
  2016.02.15  2016.03.15     68  0.104  2.922   81.683     0.008         6  [1.5, 0.75]
  2016.03.16  2016.04.14     28  0.048  2.316  111.077     0.005        17   [1.5, 1.0]
  2016.04.15  2016.05.14     56  0.051  1.484   43.073     0.009        15  [1.5, 0.75]
  2016.05.15  2016.06.13     64  0.092  2.781   84.173     0.005        10  [1.5, 0.75]
  2016.06.14  2016.07.13     51 -0.064 -1.383  -30.152     0.013        11  [1.5, 0.75]
  2016.07.14  2016.08.12    120 -0.108 -1.604  -24.186     0.021        14   [1.5, 0.5]
  2016.08.13  2016.09.11    106  0.108  2.632   64.107     0.013        10   [1.5, 0.5]
  2016.09.12  2016.10.11    111  0.258  5.663  125.334     0.007         7   [1.5, 0.5]
  2016.10.12  2016.11.10    112 -0.264 -3.963  -59.334      0.03        12   [1.5, 0.5]
  2016.11.11  2016.12.10    122   0.24   4.34   78.812     0.012         5   [1.5, 0.5]
  2013.12.27  2016.12.10   3243  0.108  2.518   67.426      0.03        78

年率は10.8%、シャープレシオは2.52となっており、まずまずである。