第5回
「ロスカット、負けルールなどの追加」
前回までの作業でテーブルを使いパラメータの最適化ができるようになりました。しかしながら、移動平均線などの指標を基にしたルールだけでは1取引あたりのリスク(どの程度の損失が発生するのか)が不明であり心理的な不安から売買の実行しがたいものです。そこで、今回は実践上必要と思われるロスカット(損切り)などを作っていきます。
さて、今回は“ロスカット”、“トレーリング・ストップ”、“負けルール”という、いわばオプションルールのようなものを3種類作成します。この解説では“評価項目計算シート”にそれぞれを追加していきませんので、ひとつが完成したら新しいシート(勿論同じ列に)にコピーして保存しておくと簡単に使い分けることができます。
ロスカット
ロスカットとはポジションを建てた値段から決められた以上に損失になっていたら、手仕舞いし損失を確定するというものです。ロスカットは相場で成功する上で必須のテクニックですが、一般的にロスカットは難しいと言われています。それはロスカットを入れることにより、当然利益になる回数は減少してしまうため(ロスカットした後に期待通り動き利益に転じることもあるからです)や、または損失が減少することを期待してロスカットを躊躇してしまうためでしょう。そこで、ロスカットの効果を検証しておきましょう。
今のところ、終値でシグナルを出し、翌日の寄付きで売買を実行するように作っていますので、建てた値段と日々の終値で計算される損益で、ロスカットするかどうかを判断し、翌日の寄付きで手仕舞うというルールで作ってみましょう。
1)現在30列にシグナルを記入していますが、これを32列に仮シグナル1として書き換えます。R1C32に“仮シグナル”と入力し、R29C32に“=IF(RC[-25]>RC[-24],1,IF(RC[-25]<RC[-24],-1,0))”と入力して、データの最後の行までコピーして下さい。
これで、30列と32列に全く同じシグナルができたはずです。30列のシグナルはもう必要ありませんので、すべてクリアして下さい。
2)次に33列に仮の建値を入力します。まず、R1C33に“仮建値1”と入力し、R30C33に“=IF(R[-1]C[-1]=0,0,IF(R[-1]C[-1]<>R[-2]C[-1],RC[-30],R[-1]C))”と入力して、データの最後の行までコピーして下さい。
ここまでは、以前一度同じような作業を行っていますので特に計算式の説明は必要ないでしょう。
3)次に34列にロスカットの状態を示すシグナルを作ります(ロスカットにヒットした状態を“1”、ヒットしていない状態を“""”(何も表示しない)ことで表します)。まず、R1C34に“L Cut”と入力し、R2C34にロスカットする値(今回はとりあえず“300”)を入力しておきましょう。
R30C34に“=IF(AND(R[-1]C[-2]=R[-2]C[-2],R[-1]C=1),1,IF(OR(AND(R[-1]C[-2]=−1,
RC[-28]>RC[-1]+R2C34),AND(R[-1]C[-2]=1,RC[-28]<RC[-1]-R2C34)),1,""))” と入力して、データの最後の行までコピーして下さい。
これは、どういうことをしているかというと、「もし前日と前々日の仮シグナル1が同じで、前日の“L Cut”値が“1”であれば“1”を表示し、もし前日の仮シグナル1が“−1”かつ当日の終値が、“仮建値1+ロスカットの幅”よりも高いとき、あるいは、もし前日の仮シグナル1が“1”かつ当日の終値が、“仮建値1−ロスカットの幅”よりも安いとき、“L Cut”値に“1”を表示し、そうでなければ何も表示しない。」ということを表しています。
4)最後にシグナルを書き換えます。
R29C30に“
=IF(RC[2]<>R[-1]C[2],RC[2],IF(RC[4]<>1,RC[2],0))” と入力して、データの最後の行までコピーして下さい。これはどういうことをしているかというと、「当日の“仮シグナル1”と前日の“仮シグナル1”が異なっているときは、当日の“仮シグナル1”を表示し、当日の“仮シグナル1”と前日の“仮シグナル1”が同じで、当日の“L Cut”値が“1”でないとき、当日の“仮シグナル1”を表示し、そうでないときは“0”を表示する。」ということを表しています。
今回はロスカットの基準を固定値幅(300円)としましたが、その他に、パーセンテージ、ボラティリティなどでも行うのもよいでしょう。
トレーリング・ストップ
トレーリング・ストップとはポジションの最大値洗い益から決められた以上に損失になっていたら、手仕舞いし損益を確定するというものです。ロスカットでは損失を管理できますが、一旦大きく利が乗った場合でも手仕舞いのシグナルが遅すぎて、ほとんど利益を確保できないということも多々あります。トレーリング・ストップを用いることによって、大勝利の可能性は減少してしまいますが、ほどほどの利益を確保し、より安定した結果を期待できる可能性があります。
今回は、買いシグナルが出ている間の終値の最高値、あるいは売りシグナルが出ている間の終値の最安値を基準として、そこから終値で見た場合に何円逆行していたら、手仕舞うかどうかを判断し、翌日の寄付きで手仕舞うというルールで作ってみましょう。
1)30〜33列までは、ロスカットと同じ項目を入力して下さい。
2)次に34列に買いトレード期間中は最大終値、逆に売りトレード期間中は最小終値(SIC、significant close)が表示されるようにしておきます。まず、R1C34に“SIC”と入力し、R30C34に“=IF(R[-1]C[-2]<>R[-2]C[-2],R[-1]C[-28],IF(R[-1]C[-2]=-1,IF(R[-1]C[-28]<R[-1]C,R[-1]C[-28],R[-1]C),IF(R[-1]C[-2]=1,IF(R[-1]C[-28]>R[-1]C,R[-1]C[-28],R[-1]C),0)))”と入力して、データの最後の行までコピーして下さい。
これはどういうことをしているかというと、「もし前日の“仮シグナル1”と前々日の“仮シグナル1”が違うとき、前日の終値を表示し、そうでなく前日の“仮シグナル1”と前々日の“仮シグナル1”が同じときで、前日の“仮シグナル1”が“−1”のとき、もし前日の終値が前日の“SIC”より小さいときは、前日の終値を表示し、そうでなければ前日の“SIC”を表示する。また前日の“仮シグナル1”と前々日の“仮シグナル1”が同じときで、前日の“仮シグナル1”が“1”のとき、もし前日の終値が前日の“SIC”より大きいときは、前日の終値を表示し、そうでなければ前日の“SIC”を表示する。(前日の“仮シグナル1”と前々日の“仮シグナル1”が同じときで、前日の“仮シグナル1”が“0”のとき“0”を表示する)」ということを表しています。
3)次に35列にトレーリング・ストップの状態を示すシグナルを作ります(トレーリング・ストップにヒットした状態を“1”、ヒットしていない状態を“""”(何も表示しない)で表します)。まず、R1C35に“T Stop”と入力し、R2C35にトレーリング・ストップする値(今回はとりあえず“1000”)を入力しておきましょう。
R30C35に“=IF(RC[-1]=0,"",IF(AND(R[-1]C[-3]=R[-2]C[-3],R[-1]C=1),1,IF(OR(AND
(R[-1]C[-3]=−1,RC[-29]>RC[-1]+R2C35),AND(R[-1]C[-3]=1,RC[-29]<RC[-1]-R2C35)),1
,"")))” と入力して、データの最後の行までコピーして下さい。
これは、どういうことをしているかというと、「もし前日の“SIC”が“0”だったら、何も表示しない。もし前日の“仮シグナル1”が前々日の“仮シグナル1”と同じで前日の“T Stop”が“1”のときは“1”を表示する。もし前日の“仮シグナル1”が“−1”で当日の終値が“当日のSIC+トレーリング・ストップの幅”より高いか、または前日の“仮シグナル1”が“1”で当日の終値が“当日のSIC−トレーリング・ストップの幅”より安いとき、“1”を表示し、そうでないとき何も表示しない」ということを表しています。
4)最後にシグナルを書き換えます。
R29C30に“=IF(RC[2]<>R[-1]C[2],RC[2],IF(RC[5]<>1,RC[2],0))” と入力して、データの最後の行までコピーして下さい。ここは、ロスカットのところで同様の作業を行っていますので特に説明の必要はないでしょう。
今回はトレーリング・ストップの基準を固定値幅(1000円)としましたが、その他にロスカット同様、パーセンテージ、ボラティリティなどでも行うのもよいでしょう。
負けルール
負けルールは、「ラリー・ウィリアムズの相場で儲ける法」(日本経済新聞社、1996年)、「タートルズの秘密」(Pan Rolling、1999年)で詳しく述べられていますが、これは「理論上の前回のトレード」が損失になった後、または数連敗した後にだけ取引するというルールです。相場というものはもみ合いと放れの連続であり、トレンド追随型のシステムを採用した場合放れの段階では儲かるが、もみ合いの段階では儲かりません。したがって逆説的に「儲からなかったトレードを探し、その後にだけトレードを行えば勝ちにつながる可能性が高い」という考えに基づいて作られたルールです。
「理論上の(前回の)トレード」とは?
まず、「理論上のトレード(シグナル)」に対して、実際に行うトレードのことを「実際のトレード(シグナル)」としておきます。理論上のトレードとは、ここでの「シグナル(30列)」に従って行う取引のことを指しています。すなわち、取り決めたルールに基づいて行った場合のトレードということです。
ではどのような条件になれば実際に取引を行うのでしょうか?その説明をします。
まず、「理論上のシグナル」が発生し、それに従って取引を行うと仮定します。そしてその取引が損失(負け)で終了した場合、その後に「理論上のシグナル」が発生すれば、そのシグナルを「実際のシグナル」として取引を行います。
上記は負けた後に取引を行うとした場合で、連敗し続ければ「実際のシグナル」も出続けることになります。また、何連敗以上したときにだけ取引を行うという場合もあります。
1)今回は、前の段落で作ったトレーリング・ストップを採用したまま、負けルールを組み込んでいきましょう。
まずR1C36に“仮シグナル2”と入力して下さい。
R29C36に“=IF(RC[-4]<>R[-1]C[-4],RC[-4],IF(RC[-1]<>1,RC[-4],0))”と入力して、データの最後の行までコピーして下さい。
これで、30列と36列に全く同じシグナルができたはずです。30列のシグナルはもう必要ありませんので、クリアして下さい。
2)次に37列に仮の建値を入力します。まず、R1C37に“仮建値2”と入力し、R30C37に“=IF(R[-1]C[-1]=0,0,IF(R[-1]C[-1]<>R[-2]C[-1],RC[-34],R[-1]C))”と入力して、データの最後の行までコピーして下さい。
3)次に38列に仮の落値を入力します。まず、R1C38に“仮落値2”と入力し、R30C38に“=IF(AND(R[-1]C[-2]<>R[-2]C[-2],R[-2]C[-2]<>0),RC[-35],0)”と入力して、データの最後の行までコピーして下さい。
ここまでは、同じような作業を行っていますので特に説明の必要はないでしょう。
4)次に39列に(理論上の)確定損益を入力します。まず、R1C39に“確定損益”と入力し、R30C39に“=IF(RC[-1]<>0,(RC[-1]-R[-1]C[-2])*R[-2]C[-3],"")”と入力して、データの最後の行までコピーして下さい。
これは、どういうことをしているかというと、「もし当日の“仮落値2”が“0”でなかったら、当日の“仮落値2”から前日の“仮建値2”を引いて、前々日の“仮シグナル2”を掛けたものを表示し、そうでなければ何も表示しない」ということを表しています。
前々日の“仮シグナル2”を掛けているのは、買いの場合は“1”を掛けることになるので、当日の“仮落値2”から前日の“仮建値2”引くことになり、売りの場合は“−1”を掛けることになるので、前日の“仮建値2”から当日の“仮落値2”引くことになり、買いの場合でも、売りの場合でも1つの計算式で損益を計算できます。
5)次に40列に連勝連敗数を入力します。まず、R1C40に“連勝連敗”と入力し、R2C40にはとりあえず“−1”と入力して下さい。“−1”というのは1回負けたことを示しているので、負けた後にだけ取引するということです。もし、ここに“−2”と入力した場合は、2連敗以上した後にだけ取引するということです。
R30C40に“=IF(AND(RC[-1]<>"",RC[-1]>0),IF(R[-1]C<0,1,R[-1]C+1),IF(AND(RC[-1]<>"",RC[-1]<0),IF(R[-1]C>0,-1,R[-1]C-1),R[-1]C))” と入力して、データの最後の行までコピーして下さい。
ここは、同じような作業を行っていますので特に説明の必要はないでしょう。
最後にシグナルを書き換えます。
R29C30に“=IF(R[1]C[10]<=R2C40,RC[6],0)” と入力して、データの最後の行までコピーして下さい。
これはどういうことをしているかというと、「翌日の“連勝連敗”が“R2C40”の値と比較して等しいか小さいとき、当日の“仮シグナル2”の値を表示し、そうでない場合は“0”を表示する。」ということを表しています。
(“翌日の”というのは未来の値が入っていておかしいと思われるかもしれませんが、実際手仕舞いおよび仕掛けは翌日の寄付で行いますので不可能ではありません。つまり、翌日の寄付で行う取引は、逆指し(ストップオーダー)などの条件を必要とします。)
(第5回終了)
(続く)