SSブログ
システムトレード ブログトップ
前の5件 | 次の5件

エクセルを用いたトレーディングシステムにおける売買シグナルの設定 [システムトレード]

エクセルでトレーディングシステムを作成するに当たって、最も基本的なことの一つは、ポジションや売買シグナルをどのように表すかということです。
KFシステムクリエイターにおいては、買い持ちを"1"、売り持ちを"-1"、キャッシュポジションを"0"としています。

この方法のメリットは、トレード中のポジションが一目瞭然であることに加えて、前後の差分を取ることで容易に売買シグナルを得ることができるという点です。
また、うねり取りシステムへの対応も容易で、数値を実数まで拡張すれば、ポジションの大きさを表現することが出来ます。

今、簡単な事例として、nをパラメータとしたn日移動平均を用いたシステムを考えます。株価が終値で移動平均を上回ったら買い持ちで"1"、下回ったら売り持ちで"-1"とします。
すなわち、株価が移動平均の上にいる間は"1"が、下にいる間は"-1"が続くわけです。

エクセルで表す場合、特に面倒な事はありません。
IF関数を用いて、セルに次式を記入すれば良いだけです。ここで、株価を入力したセル番地を「株価」、移動平均を入力したセル番地を「移動平均」としています。
  =IF(「株価」>「移動平均」,1,-1)

もちろん、株価と移動平均は、時系列で事前に記述しておく必要があります。なお、株価は通常、終値を用います。
これにより、"1"の集まりと"-1"の集まりとが交互に現れる、売買ポジションを表す列が得られます。

この列のある行とその前の行との差を取り、全ての行に渡ってこの差分を求めると、ポジションが"1"から"-1"に変わる時は"-2"、"-1"から"1"に変わる時は"2"、それ以外は"0"となるシグナル列が得られます。
この列の値が"-2"なら売りドテン、"2"なら買いドテン、"0"ならばポジション継続ということになります。

そして、売りドテンシグナルが出たら、翌寄付きで買いポジションを手仕舞うと同時に新規売り、買いドテンシグナルが出たら、翌寄付きで売りポジションを手仕舞うと同時に新規買いとなるわけです。

これにキャッシュポジションを加えると、もう少しバリエーションが増えます。例えば、何らかの条件で発動するフィルタを設けてみます。
このフィルタは、ポジションを維持する場合は"1"、ポジションを外す場合は"0"となる数列で表されます。

このフィルタ列と、売買ポジションの列とを掛け合わせると、"1","0","-1"の3値からなるポジション列が得られます。ここで、ポジションが"0"の場合はキャッシュポジションを表します。
その前後の行の差分を取ると、"2","1","0","-1","-2"の5値からなるシグナル列となります。

その値が"2","0","-2"の場合は前述の通りです。"1"の場合は新規買いもしくは売り手仕舞い、"-1"の場合は新規売りもしくは買い手仕舞いとなります。
これらがどちらに該当するかについては、ポジション列で判断します。ポジション列が"0"なら手仕舞い、そうでないなら新規です。

このように、ポジションを"1","0","-1"の3通りで表記することにより、基本的な売買シグナルを全て得ることが出来ます。
更に、ポジションを実数表記すれば、うねり取りシステムにも対応できるようになります。

例えば、キャッシュポジションを含む3つの異なるシステムを均等に合成した場合、その合成システムは、"3","2","1","0","-1","-2","-3"の7つのポジションを取ることになります。
あるいは、運用資金を合成前の個々のシステムと同じにする場合は、これらのポジションに"1/3"を乗じれば良いだけです。ただ、以下では簡単のため、先に示した整数ポジションで考えます。

この7値のポジション間の差分を取ることにより、売買シグナルとしては、"6","5","4","3","2","1","0","-1","-2","-3","-4","-5","-6"の13通りが得られます。
それが"6"ならば3単位の売り持ちから3単位の買い持ちへの買いドテン、"-6"ならば3単位の買い持ちから3単位の売り持ちへの売りドテン、"0"ならば直近ポジション継続です。

また、"5"ならば3単位の売り持ちから2単位の買い持ち、もしくは2単位の売り持ちから3単位の買い持ちに、"-5"ならば3単位の買い持ちから2単位の売り持ち、もしくは2単位の買い持ちから3単位の売り持ちになります。
なお、これらの内どちらの売買パターンになるかは、ポジション列の値で判定できます。それは他のシグナルの場合についても同様です。

シグナルが"4"の場合は、3単位の売り持ちから1単位の買い持ち、2単位の売り持ちから2単位の買い持ち、1単位の売り持ちから3単位の買い持ち、のいずれかになります。
シグナルが"-4"の場合は、上記にて買いと売りを入れ替えればよろしいです。

シグナルが"3"の場合は、3単位の売り持ちから売り手仕舞い(キャッシュポジション)、2単位の売り持ちから1単位の買い持ち、1単位の売り持ちから2単位の買い持ち、キャッシュポジションから3単位の新規買い、のいずれかとなります。
シグナルが"-3"の場合は、上記にて買いと売りを入れ替えればよろしいです。

シグナルが"2"の場合は、3単位の売り持ちから2単位を売り外して1単位の売り持ち、2単位の売り持ちから売り手仕舞い、1単位の売り持ちから1単位の買い持ち、キャッシュポジションから2単位の新規買い、1単位の買い持ちから2単位を買い増して3単位の買い持ち、となります。

シグナルが"-2"の場合は、3単位の買い持ちから2単位を買い外して1単位の買い持ち、2単位の買い持ちから買い手仕舞い、1単位の買い持ちから1単位の売り持ち、キャッシュポジションから2単位の新規売り、1単位の売り持ちから2単位を売り乗せて3単位の売り持ち、となります。

シグナルが"1"の場合は、3単位の売り持ちから1単位を売り外して2単位の売り持ち、2単位の売り持ちから1単位を売り外して1単位の売り持ち、1単位の売り持ちから売り手仕舞い、キャッシュポジションから1単位の新規買い、1単位の買い持ちから1単位を買い増して2単位の買い持ち、2単位の買い持ちから1単位を買い増して3単位の買い持ち、となります。

シグナルが"-1"の場合は、3単位の買い持ちから1単位を買い外して2単位の買い持ち、2単位の買い持ちから1単位を買い外して1単位の買い持ち、1単位の買い持ちから買い手仕舞い、キャッシュポジションから1単位の新規売り、1単位の売り持ちから1単位を売り乗せて2単位の売り持ち、2単位の売り持ちから1単位を売り乗せて3単位の売り持ち、となります。

以上では、3システムの合成システムについて説明しましまたが、合成元システムの数を増やせば、それだけ得られるポジションの数が増加し、より細やかなうねり取りシステムとなります。

なお、ここではポジション数を増やすためにシステムの合成を考えましたが、ロジックの記述によってポジションを多段階に変化させることも可能ではあります。
しかし、そのようなロジックの記述は難しく、有効なシステムが得られる保証はありません。

合成システムであれば、個々の合成元システムの有効性を確認することは比較的容易であり、その帰結として、合成されたシステムの性能や信頼性もまた担保されることになります。
課題としては、同一銘柄で有効性が高く、しかも独立性の高い複数のシステムを揃えられるかということです。

nice!(0)  コメント(0) 
共通テーマ:

システムにおける性能指標の定義と位置付け(3):PFと損益レシオ [システムトレード]

損益に関係する性能指標は、通常は単株基準にて表されます。しかし、分析期間中における株価水準が大きく変動していたりする場合、単株基準では性能を的確に示すことが出来ない可能性があります。
そのような時に、単利基準や複利基準で性能指標を表現すると、適切な結果を得ることが出来る場合があります。

例えば、PFや損益レシオを単利基準で表すと、次式のようになります。
単利基準の場合は、
  単利PF   =総利益率/|総損失率|
         =-総利益率/総損失率 (総損失率<0)
  単利損益レシオ=平均利益率/|平均損失率|
         =-平均利益率/平均損失率 (平均損失率<0)

複利の場合については一先ず置いておいて、一例として、8001伊藤忠商事の累乗平均逆張りドテンシステムで、単株及び単利におけるPFや損益レシオを求めてみます。なお、分析期間は1993年11月1日~2021年1月19日の約27年間となっています。

単株(通常)の場合
  PF   =1.30
  損益レシオ=0.82

単利の場合
  平均利益率=2.51%
  平均損失率=-3.02%
  トレード数=1,222回
  勝率   =61.29%
より、
  PF   =1.32
  損益レシオ=0.83
となります。

この銘柄は分析期間中における株価の差が最大20倍近くありますが、単株と単利におけるPFと損益レシオに大きな違いはありません。
比較のために、単株と単利の場合の資産カーブを以下にそれぞれ示します。
伊藤忠商事_単株_資産カーブ_20210121a.png
伊藤忠商事_単利_資産カーブ_20210121b.png

明らかに単利基準の方が良好な直線性を有していますが、単株基準においても資産カーブが極端に階段状に変化している場面は見られません。
このことが、PFや損益レシオに大きな違いが生じていない理由だと考えられます。

一方、単株と単利とで資産カーブ形状に大きな違いが生じている事例として、9501東京電力HDRSI逆張りドテンシステムを見てみます。
次図は、単株と単利の場合のそれぞれの資産カーブです。なお、分析期間は1993年11月1日~2021年1月21日の約27年間です。
東京電力HD_単株_資産カーブ_20210121c.png
東京電力HD_単利_資産カーブ_20210121d.png

やや意外なことに、単株基準の方が資産カーブの直線性が高いことが分かります。
これらのPF及び損益レシオを求めると、以下のようになります。

単株(通常)の場合
  PF   =1.58
  損益レシオ=1.16

単利の場合
  平均利益率=6.17%
  平均損失率=-3.93%
  トレード数=296回
  勝率   =57.77%
より、
  PF   =2.15
  損益レシオ=1.57
となります。

8001伊藤忠商事の場合とは異なり、単株と単利とでPFや損益レシオに大きな違いが生じています。この理由は、資産カーブの直線性の違いにあると考えられます。
この例では、単株基準の方が直線性が良好でしたが、当然その逆の場合もあります。

以上のように、単株や単利の場合のPFや損益レシオについては、単に"額"と"率"とを置き換えて考えれば良いだけです。ただし、各基準における値の解釈については、よく注意する必要があります。
では、複利基準におけるPFや損益レシオはどのように考えれば良いのでしょうか。

複利基準におけるPFについては、単株や単利の事例に倣うと、
  複利PF=累積利益率/累積損失率
となりそうですが、以下に示すように、これだと不合理な事態が生じてしまいます。

上述した8001伊藤忠商事のシステムで、実際に累積利益率と累積損失率を求めてみました。ただし、ここでは簡単のため、簿価基準の結果としています。
なお、KFシステムクリエイターでは標準評価項目として、累積利益率と累積損失率は求めていません。ここでは検証用として算出しています。

結果は次の通りです。
  累積利益率=9.497×10^7
  累積損失率=1.873×10^(-7)
ここでX^kは、Xのk乗を表します。10^7ならば、10の7乗ということです。

両者の比を取ると、上述した仮の複利PFが求まります。
  複利PF(仮)=5.070×10^14
この結果に何らかの意味があるようには到底見えません。

そこで、PFについては後回しにして、先に損益レシオを求めてみます。

複利基準の場合の損益レシオは、単株や単利の場合に倣って、
  複利損益レシオ=複利利益率/|複利損失率|
         =-複利利益率/複利損失率
とすれば良さそうです。

ここで、複利利益率は、勝ちトレード当たりの累積利益率で、次式で定義します。
  複利利益率=(累積利益率)^(1/勝ち数)-1
       =(累積利益率)^(1/(勝率×トレード数))-1
同様に、複利損失率は、負けトレード当たりの累積損失率で、
  複利損失率=(累積損失率)^(1/負け数)-1
       =(累積損失率)^(1/((1-勝率)×トレード数))-1
となります。

上述した8001伊藤忠商事のシステムでは、
  複利利益率=2.48%
  複利損失率=-3.22%
となります。

これから複利損益レシオを求めると、
  複利損益レシオ=0.77
という結果が得られます。これは単株や単利の場合と大差なく、妥当な水準であると言えます。

ここで、単株や単利の場合で得られたPFと損益レシオの関係を用いると、複利PFは次式で表すことが出来ます。
  複利PF=複利損益レシオ/(1/勝率-1)
実際に数値を代入すると、上記システムでは、
  複利PF=1.22
が得られます。

ちなみに、上述した9501東京電力HDシステムの場合、複利運用における各数値を求めると、以下のようになります。
  累積利益率  =6.071×10^3
  累積損失率  =2.639×10^(-3)
  複利利益率  =5.23%
  複利損失率  =-4.64%
  複利損益レシオ=1.13
  複利PF   =1.54

これらの関係を見ると、PF及び損益レシオについて、
  複利<単株<単利
の関係になっていることが分かります。ただし、これはわずか2例の結果に過ぎず、この関係が普遍的であるかどうかについては、更なる検証が必要です。

なお、複利利益率や複利損失率と似た性能指標として、年率利益率と年率損失率があります。これらは、次式で定義されます。
  年率利益率=(累積利益率)^(246/統計期間)-1
  年率損失率=(累積損失率)^(246/統計期間)-1

ここで、246は平均年間立会日数、統計期間はトレード開始日から直近日までの日数です。分析期間とは異なりますので、注意が必要です。通常、統計期間<分析期間となります。

年率利益率は、複利運用した場合の年当たり利益率を表します。年率損失率は、複利運用した場合の年当たり損失率です。両者を用いると、簿価基準の年率リターンを求めることが出来ます。
  簿価年率リターン=(累積損益率)^(246/統計期間)-1
          =(累積利益率×累積損失率)^(246/統計期間)-1
          =(累積利益率)^(246/統計期間)×(累積損失率)^(246/統計期間)-1
          =(1+年率利益率)×(1+年率損失率)-1

前述の8001伊藤忠商事システムと9501東京電力HDシステムの年率利益率、年率損失率、簿価年率リターンは、それぞれ以下のようになります。

8001伊藤忠商事累乗平均逆システム
  年率利益率   =97.84%
  年率損失率   =-43.75%
  簿価年率リターン=11.28%
9501東京電力HDRSI逆システム
  年率利益率   =38.06%
  年率損失率   =-19.74%
  簿価年率リターン=10.82%

ところで、前述したようにKFシステムクリエイターでは累積利益率と累積損失率を直接的には求めていません。これらは累積損益率として一緒くたにして計算しています。
そのため、これらの値を計算するためには、別途演算用の列をワークシート上に用意して計算する必要があります。

しかし、KFシステムクリエイターではエクセル2003で利用できる256列を全て使用しており、ロジックによっては演算用の新たな列を、システムシート上に設けることが出来ない場合があります。もちろん、エクセル2007以降を使用すれば、257列以降を用いて演算することが可能ではあります。
そこで、既存の性能指標を用いて、近似的に累積利益率や累積損失率を求める方法を以下に記します。

前回の記事で、累積利益率を求める式を次式で表しました。
  累積利益率=Π(1+P(i)/F(i)) (i=1 to 勝ち数)
ここで、P(i)は各トレードにおけるi番目の勝ちトレードの利益、F(i)はそれらのトレードに投じた資金額です。

この式の両辺の自然対数を取ると、勝ち数をnとして、
  ln(累積利益率)=ln(1+P(1)/F(1))+ln(1+P(2)/F(2))+・・・+ln(1+P(n)/F(n))
となります。

ここで、関数ln(1+x)をテイラー展開すると、
  ln(1+x)=x-(1/2)x^2+(1/3)x^3+・・・
となります。

そこで、右辺をテイラー展開し、3次以上の項を省略すると、
  ln(累積利益率)≒Σ(P(i)/F(i))-(1/2)×Σ(P(i)/F(i))^2 (i=1 to n)
が得られます。

ここで、右辺第2項に注目します。実はKFシステムクリエイターでは、利益率標準偏差や損失率標準偏差を性能指標として算出しています。
これらを用いれば、右辺第2項を算出済みの性能指標で表すことが可能です。

利益率標準偏差をsとし、P(i)/F(i)をu(i)とすると、i=1 to n として、
  s=√(Σ((u(i)-u)^2)/(n-1))
となります。ここで、uはu(i)の平均値を表します。

両辺を2乗し(n-1)を掛けると、次式のようになります。
  (n-1)×s^2=Σ((u(i)-u)^2)
        =Σ(u(i)^2)-2×Σ(u(i)×u)+Σ(u^2)
        =Σ(u(i)^2)-2×u×Σu(i)+n×u^2

これをΣ(u(i)^2)について解くと、
  Σ(u(i)^2)=(n-1)×s^2+2×u×Σu(i)-n×u^2
となります。

ここで、
  Σu(i)=総利益率
     =勝ち数×平均利益率
  u=平均利益率
を意味します。

したがって、
  ln(累積利益率)≒Σu(i)-(1/2)×((n-1)×s^2+2×u×Σu(i)-n×u^2)
         =総利益率-(1/2)×((勝ち数-1)×利益率標準偏差^2+2×平均利益率×総利益率-勝ち数×平均利益率^2)
         =勝ち数×平均利益率-(1/2)×((勝ち数-1)×利益率標準偏差^2+勝ち数×平均利益率^2)
が得られます。

これから、
  累積利益率=e^ln(累積利益率)
として、累積利益率の近似値を求めることが出来ます。

累積損失率については、これらの計算式において、利益率を損失率、勝ち数を負け数に置き換えればOKです。

これらを、前述の8001伊藤忠商事システムと9501東京電力HDシステムについて実際に求めてみると、次のようになります。後ろに続く[]内は、正確な値からの誤差を示します。

8001伊藤忠商事累乗平均逆システム
  累積利益率=9.297×10^7 [-2.11%]
  累積損失率=2.416×10^(-7) [+28.99%]
9501東京電力HDRSI逆システム
  累積利益率=8.573×10^2 [-85.88%]
  累積損失率=3.853×10^(-3) [+46.00%]

8001伊藤忠商事における誤差は、比較的小さいことが分かります。一方、9501東京電力HDにおける誤差は、かなり大きくなっています。特に、累積利益率は桁が違うほど大きな差異となっています。

この理由は、9501東京電力HDシステムの最大利益率が246.48%と極めて大きいためです。そもそも、ln(1+x)のテイラー展開が収束する条件は、xが-1<x≦1となる時だけです。
この場合、x=246.48%=2.4648は1より大きく、この値に対してテイラー展開を適用したこと自体が間違っていたことになります。ただし、収束を考えない場合はその限りではありません。

8001伊藤忠商事システムの最大利益率は22.00%、最大損失率は-56.75%、9501東京電力HDシステムの最大損失率は-63.92%で、これらに対してテイラー展開すること自体は問題ありません。
ただし、特に累積損失率に関しては、比較的大きな誤差となっています。

累積利益率や累積損失率の近似値を求める段階において、利益率や損失率の3乗以上の項は切り捨てていました。結局、これらの項の合計が誤差となっているわけです。
ただし、利益率の全てが最大利益率ということは当然あり得ず、実際には平均利益率から最大利益率の間までのどこかに、均衡点が存在することになります。

例えば、8001伊藤忠商事システムの累積利益率の場合、切り捨てた3乗の項によって誤差が生じたと考えると、最大利益率に対しては、22.00%の3乗の3分の1の勝ち数倍、すなわち265.845%、平均利益率に対しては、2.51%の3乗の3分の1の勝ち数倍、すなわち0.395%となり、実際の近似値の誤差2.11%はその中間となります。

逆に、誤差が2.11%となる利益率を求めると、4.39%ほどとなります。これは、平均利益率と利益率標準誤差の和である4.89%に近い値となっていることが分かります。

同様に、他の残りの誤差からそれが得られる利益率や損失率を求めると、8001伊藤忠商事システムの累積損失率では12.25%、9501東京電力HDシステムの最大利益率では24.70%、同損失率では22.27%となります。
これらの平均と標準偏差との和は、それぞれ8.53%、26.40%、13.32%となっています。利益率の場合は平均と標準偏差との和の方が大きく、損失率の場合は小さいことが分かります。

この関係を用いて、これらを補正項として加減してやれば、より正確な値を得ることが出来ると考えられます。

補正項をδとすると、累積利益率の場合、
  δ=(1/3)×勝ち数×(利益率標準偏差+平均利益率)^3 (平均利益率>0)
累積損失率の場合、
  δ=-(1/3)×負け数×(損失率標準偏差-平均損失率)^3 (平均損失率<0)
となります。

これを、2乗の項まで求めたln(累積利益率)やln(累積損失率)に加えてやれば、補正後の値が得られます。
これまで同様、実際に計算した結果を、以下に示します。

8001伊藤忠商事累乗平均逆システム
  累積利益率=9.573×10^7 [+0.80%]
  累積損失率=2.190×10^(-7) [+16.92%]
9501東京電力HDRSI逆システム
  累積利益率=2.447×10^3 [-59.69%]
  累積損失率=3.491×10^(-3) [+32.28%]

補正なしの場合と比べて幾分マシにはなりましたが、まだかなりの誤差があります。
そこで、最初に切り捨ててしまった3乗項を取り込むことを考えてみます。

今、(u(i)-u)^3を展開してみます。
  (u(i)-u)^3=u(i)^3-3×u×u(i)^2+3×u^2×u(i)-u^3

これをu(i)^3について整理すると、
  u(i)^3=(u(i)-u)^3+3×u×u(i)^2-3×u^2×u(i)+u^3
となります。

両辺の総和を取って整理すると、
  Σ(u(i)^3)=Σ((u(i)-u)^3)+3×(n-1)×u×s^2+n×u^3
が得られます。ここで、nは勝ち数、sは利益率標準偏差です。

ここで、Σ((u(i)-u)^3)について考えます。これは偏差の3乗和であり、その値は勝ち数や標準偏差に依存することが予想されます。
単なる偏差の総和であればその値は0になるのですが、3乗和の場合はそうとは限りません。ちなみに、2乗和の場合は全ての項がプラスであるため、必ず有限の正の値を取ることになります。

そこで、これを次式のように仮定します。
  Σ((u(i)-u)^3)=a×n×s^3

定数aの値を変えて実際のシステムに当てはめてみると、a=3の場合が最も実際の値に近くなることが分かりました。そこで、この項を次式で近似してみます。
  Σ((u(i)-u)^3)≒3×n×s^3

ただし、これは利益率の場合であり、損失率の場合は次式になります。
  Σ((u(i)-u)^3)≒-3×n×s^3

これを3乗和の式に代入すると、
  Σ(u(i)^3)≒3×n×s^3+3×(n-1)×u×s^2+n×u^3

したがって、3次の補正項εは、
  ε=(1/3)×Σ(u(i)^3)
   =n×s^3+(n-1)×u×s^2+(1/3)×n×u^3 (u>0)
   =-n×s^3+(n-1)×u×s^2+(1/3)×n×u^3 (u<0)
となります。

以上から、累積利益率や累積損失率の近似値を求めると、次のようになります。

8001伊藤忠商事累乗平均逆システム
  累積利益率=9.529×10^7 [+0.34%]
  累積損失率=2.128×10^(-7) [+13.61%]
9501東京電力HDRSI逆システム
  累積利益率=5.497×10^3 [-9.45%]
  累積損失率=3.319×10^(-3) [+25.77%]

誤差が大分小さくなりましたが、まだ結構大きいものもあります。ただ、これは累積値における誤差であり、年率換算、もしくはトレード毎の誤差はそれよりも小さくなります。
これらの近似値を用いた複利利益率や複利損失率、年率利益率や年率損失率は、以下のようになります。

8001伊藤忠商事累乗平均逆システム
  複利利益率=2.48% [+0.02%]
  複利損失率=-3.20% [-0.81%]
  年率利益率=97.86% [+0.02%]
  年率損失率=-43.48% [-0.61%]
9501東京電力HDRSI逆システム
  複利利益率=5.23% [-1.17%]
  複利損失率=-4.64% [-3.78%]
  年率利益率=38.06% [-1.33%]
  年率損失率=-19.74% [-3.47%]

また、これらから複利PF及び複利損益レシオ、簿価年率リターンを求めると、次のようになります。

8001伊藤忠商事累乗平均逆システム
  複利PF    =1.23
  複利損益レシオ =0.78
  簿価年率リターン=11.83%
9501東京電力HDRSI逆システム
  複利PF    =1.54
  複利損益レシオ =1.13
  簿価年率リターン=10.81%

相対誤差は示しませんが、前述したこれらの正確な値と、ほとんど差がないことが分かります。

後半は話が大分脱線してしまいましたが、今回はプロフィットファクター(PF)及び損益レシオについて解説しました。併せて、複利利益率や複利損失率、年率利益率や年率損失率、累積利益率や累積損失率、簿価年率リターンについても説明いたしました。

大分長くなりましたので、今回はここまでといたします。

nice!(0)  コメント(0) 
共通テーマ:

システムにおける性能指標の定義と位置付け(2):損益に関する指標 [システムトレード]

トレーディングシステムにおける最も代表的な性能指標の一つには、その重要度はともかくとして損益累計が挙げられます。損益累計は、そのシステムを運用した結果、どれくらいの収益が見込めるかを、直接的に表現しています。
これは株価推移のようなもので、その騰落に注目が集まるのは、ごく自然なことでしょう。

損益累計は、分析期間中の全トレードにおける個々のトレードの損益を加算したものです。個々のトレードにおいて損益がプラスの場合のみを加算したものが総利益、そうでない場合のみを加算したものが総損失となり、両者の合計が損益累計もしくは総損益ということになります。

分析期間中のトレード結果は、勝ちトレードか負けトレードのいずれかとなることから、
  トレード数=勝ち数+負け数
となります。ここで損益ゼロの場合は、通常、負けトレードに分類します。

勝ち数をトレード数で割ったものを勝率と定義し、トレード数と勝率を用いて表現すると、
  勝ち数=トレード数×勝率
  負け数=トレード数×(1-勝率)
となります。ちなみに、これは定義を言い直したに過ぎません。

各トレードにおけるi番目の勝ちトレードの利益をP(i)、j番目の負けトレードの損失をL(j)とすると、
  総利益=ΣP(i) (i=1 to 勝ち数)
  総損失=ΣL(j) (j=1 to 負け数)
となります。ここでΣはP(i)やL(j)の値を、各トレードの数だけ合計することを表します。L(j)は通常、負の値もしくはゼロを用います。

なお、勝ちトレードがない場合は、
  総利益=0
  総損失=ΣL(j) (j=1 to トレード数)
負けトレードがない場合は、
  総利益=ΣP(i) (i=1 to トレード数)
  総損失=0
となります。

これらをそれぞれ勝ち数、負け数で割ると、平均利益及び平均損失が得られます。
  平均利益=総利益/勝ち数 (勝ち数≠0)
      =総利益/(トレード数×勝率)
  平均損失=総損失/負け数 (負け数≠0)
      =総損失/(トレード数×(1-勝率))

なお、勝ちトレードがない場合は、
  平均利益=0
負けトレードがない場合は、
  平均損失=0
となります。

KFシステムクリエイターの場合は、総損失をマイナスで表記するため、
  損益累計=総利益+総損失 (総損失≦0)
となりますが、総損失を絶対値で表記する場合は、
  損益累計=総利益-|総損失|
となります。ここで|x|はxの絶対値を表します。

また、平均損益は、
  平均損益=損益累計/トレード数
となります。

更に、平均利益を平均損失の絶対値で割ったものが、損益レシオもしくはペイオフレシオになります。
  損益レシオ=平均利益/|平均損失|
       =-平均利益/平均損失 (平均損失<0)

一方、総利益を総損失の絶対値で割ったものが、プロフィットファクター(PF)です。
  PF=総利益/|総損失|
    =-総利益/総損失 (総損失<0)

これらの値は、通常、1より大きいほど良いとされています。

なお、損益レシオとPFとの間には、以下の関係があります。
  損益レシオ=-(総利益/勝ち数)/(総損失/負け数)
       =PF×(負け数/勝ち数)
       =PF×((トレード数-勝ち数)/勝ち数)
       =PF×(1/勝率-1)

これらについては、過去の記事「プロフィットファクターは大きいほど良いのか?」などで解説していますので、そちらをご参照ください。

さて、損益累計は最も基本的な性能指標の一つですが、トレーディングシステムの性能を評価するという意味においては、あまり重要ではありません。
その理由の一つは、損益額はあくまで株価水準に依存する、ということです。そのため、分析期間中の株価水準が時期によって大きく異なると、損益額の水準も大きく異なってしまいます。

例えば、過去における株価水準が現在と比べて非常に高い場合、分析期間中の損益累計は過去の損益額に大きな影響を受けてしまいます。システムトレードでは未来の収益が最重要であるにも関わらず、それを左右する直近性能が反映され難いと言うことになるわけです。

同様の理由で、損益累計と関連が深いPFや損益レシオ、勝率、平均損益などもまた、トレーディングシステムの性能を評価するという意味においては、重要とはなり得ません。

この問題を緩和するためには、損益累計ではなく累計損益率を用いる方法があります。累計損益率は各トレード毎の損益率を合計したものですが、損益累計同様、総利益率と総損失率の和で表すことが出来ます。

総利益率や総損失率は、各トレードにおけるi番目の勝ちトレードの利益をP(i)、j番目の負けトレードの損失をL(j)とし、それらのトレードに投じた資金額をF(i)及びF(j)とすると、次式で定義されます。
  総利益率=Σ(P(i)/F(i)) (i=1 to 勝ち数)
  総損失率=Σ(L(j)/F(j)) (j=1 to 負け数)

ただし、KFシステムクリエイターでは、総利益率や総損失率を評価項目として直接的には用いていません。しかし、評価項目として採用している他の性能指標から求めることが出来ます。

これらは評価項目として用いられている平均利益率と平均損失率、勝ち数と負け数、もしくはトレード数と勝率から、
  総利益率=平均利益率×勝ち数
      =平均利益率×トレード数×勝率
  総損失率=平均損失率×負け数
      =平均損失率×トレード数×(1-勝率)
となります。

そして累計損益率は、
  累計損益率=総利益率+総損失率
       =(平均利益率×勝率+平均損失率×(1-勝率))×トレード数
で求めることが出来ます。

累計損益率に運用資金を乗じると、システムを単利運用した場合の損益額になります。それに運用資金を加えれば、単利運用時の資産残高が求まります。
  単利資産残高=運用資金×(1+累計損益率)

以上のように、累計損益率は単利運用時の損益を表します。一方、累計損益は単株運用時の損益を表します。では、複利運用時にはどのような指標を用いれば良いのでしょうか。
それは、累積損益率によって得ることが出来ます。

累積損益率は、必ずしも利益と損失に場合分けする必要はありませんが、これまでの説明に倣って累積利益率と累積損失率を定義してみます。

各トレードにおけるi番目の勝ちトレードの利益をP(i)、j番目の負けトレードの損失をL(j)とし、それらのトレードに投じた資金額をF(i)及びF(j)とすると、
  累積利益率=Π(1+P(i)/F(i)) (i=1 to 勝ち数)
  累積損失率=Π(1+L(j)/F(j)) (j=1 to 負け数)
となります。ここで、Π()は()内の項を、各トレード毎に全て乗じることを表します。

これらから、累積損益率は次式で示されます。
  累積損益率=累積利益率×累積損失率
       =Π(1+PL(k)/F(k)) (k=1 to トレード数)
ここで、PL(k)はk番目のトレードにおける損益を表します。

累積損益率は、資産カーブ(資産推移)のばらつきが大きいと、増加しにくいという性質があります。すなわち、累積損益率が大きいということは、取りも直さず資産カーブの直線性(ロバスト性)が高いということを意味します。

累計損益を累計損益率や累積損益率に拡張したことと同様に、PFや損益レシオなども、単利基準や複利基準で再定義することが出来ます。
単利基準におけるPFの再定義につきましては、以前の記事「プロフィットファクターの再定義」で解説しました。

次回はそのおさらいをすると共に、複利基準での再定義などについても考えたいと思います。また、売買指標の残りの項目についても、順次解説していきます。
長くなりましたので、今回はここまでといたします。

nice!(0)  コメント(0) 
共通テーマ:

システムにおける性能指標の定義と位置付け(1):性能指標の種類 [システムトレード]

トレーディングシステムには様々な性能指標があり、それらはシステム性能を判断する上で重要な情報を与えてくれます。言わば、システムの通信簿のようなものです。
それらの性能指標は、システム設計段階においては最適なシステムを得るための指針となり、運用段階においてはシステムが機能しているかどうかを判定する材料となります。

性能指標の数は非常に多く、その種類は多岐に渡っています。トレーディングシステムにおいてどの性能指標を採択し重視するかは、設計するシステムの性能を大きく左右する重要な要素です。
個々の性能指標についても、古典的なものから現代的なもの、一般的なものから特殊なもの、等、様々です。

KFシステムクリエイターでは、約100種類もの性能指標を演算し、確認することが出来ます。これらは、システムの条件を変更する度に再演算され、直ちに再表示されます。
各々の性能指標は他の性能指標と密接に関連し、その多くが互いに従属する関係にあります。

性能指標は大きく分けて、次の5つに分類されます。

一つ目は売買指標で、個々の売買毎の成績を集計したものとなります。この指標は離散的であり、同じ分析期間のシステムであっても、それを構成する要素の数は異なるのが普通です。
プロフィットファクター(PF)、トレード数、勝率、損益レシオなどがこれに該当します。

二つ目は統計指標で、分析期間全域に渡る資産推移を統計処理したものとなります。この指標は連続的であり、日々の資産推移に応じて変遷します。
期待効率、標準誤差、EER(効率誤差比)、安定指数などがこれに該当します。

三つ目は複合指標で、売買指標と統計指標を組み合わせたものとなります。この指標は連続的ですが、売買指標の影響も受けるため、安定性を備えつつ直近性能を反映しやすい傾向があります。
最適化対象指標として用いられるKFインデックスなどがこれに該当します。

四つ目は対比指標で、システムの分析結果とそれ以外の指標との対比を表したものとなります。システムの相対評価を行う際などに有効です。
資産対株価推移などがこれに該当します。

五つ目はシステム指標で、システムそのものの妥当性や健全性を示したものとなります。統計指標と類似していますが、資産推移の分布や直近資産残高の水準など、主に資産カーブの統計的整合性を評価します。
正規分布と資産カーブの整合率などがこれに該当します。

これらの指標の中で、最も種類が多く、最も広く利用されているのは、売買指標です。売買指標は、トレード結果を直接的に表現するため分かりやすい反面、得られた性能が独り歩きしやすい傾向にあります。
例えば、2020年12月13日の記事「今更ですが、プロフィットファクターとは結局何なのでしょうか?」で述べたように、PFが最大となるシステムが必ずしも最良のシステムであるとは限りません。

これは、意図的な操作などによりPFや勝率を高め、あたかもそれが優れたシステムであるかのように見せかけることが可能であるという危険性を孕んでいます。
そして残念ながら、売買指標と言う比較的分かりやすい指標であるが故に、見かけの性能に惑わされてしまう人が少なくありません。

今回の記事では、各性能指標にスポットを当て、その定義や意味合いについて解説していきます。それらを通じて、性能指標に対する正しい理解を得る一助になればと考えます。

なお、性能指標の数は冒頭で示したように非常に多くの種類があります。それらの全てについて解説することは現実的ではありませんし、限界もあります。
そこで、代表的な指標に関しては深く掘り下げて考えていきますが、派生的な指標に関しては定義のみで済ませる場合があります。

また、一回の記事だけで到底収まる内容ではないため、今後数回に渡って掲載していく予定です。
今回は、今後取り上げる予定の性能指標を以下に列記するに留め、次回以降、それらについて詳しく解説していきます。

ちなみに、PF等、過去の記事において詳細に解説している指標については、基本的には概要の説明に留め、それらの記事を参照していただくこととします。

1.売買指標

  損益累計,総利益,総損失
  プロフィットファクター(PF)
  トレード数,勝ち数,負け数
  勝率,平均利益,平均損失
  損益レシオ,平均損益,投資効率
  平均損益率,損益率標準偏差
  最大利益率,最大損失率
  平均利益率,利益率標準偏差
  平均損失率,損失率標準偏差
  累計損益率
  最大STD,最大ETD
  平均ETD,ETD標準偏差
  時価累積損益率,簿価累積損益率
  平均リターン,年率リターン,CSR
  最適レバレッジ
  勝ちトレード日数各種
  負けトレード日数各種
  連勝数各種
  連敗数各種
  時価累計ドローダウン各種
  時価累積ドローダウン各種
  簿価累計ドローダウン各種
  簿価累積ドローダウン各種

2.統計指標

  期待効率
  標準偏差,標準誤差
  EER
  標準猶予日数,統計期間
  安定指数,RSQ
  単利期待効率
  単利標準偏差,単利標準誤差
  単利EER
  単利標準猶予日数,統計期間
  単利安定指数,単利RSQ
  単利資産増減倍率

3.複合指標

  KFインデックス
  単利KFインデックス

4.対比指標

  資産対株価各種

5.システム指標

  整合率
  現在ポジション
  最小推定損益

なお、以上の性能指標は全てKFシステムクリエイターの評価項目となっています。性能指標の表記についてはそのまま記していますが、分かりにくい項目については、今後の解説で明確にしていきます。

nice!(0)  コメント(0) 
共通テーマ:

テクニカル分析とシステムトレードの悩ましい関係 [システムトレード]

先日、久しぶりに書店を訪れ、株本コーナーをざっと見まわしました。最近の株価上昇の影響やテレワークの普及もあって、ネット証券の口座開設数が増加しているとの話を聞いていましたが、それに伴い株本コーナーも書籍数が増加しているように見えました。

ざーっとそれらの背表紙を見渡してみたところ、テクニカル分析に関する書籍が結構目につきました。その中の一冊を手に取り、パラパラとめくってみたのですが、チャートの一局面のみを捉えてテクニカル指標の良しあしを判定しているような内容でした。

ちょっと興味深かったのが、いくつかのテクニカル指標を組み合わせて売買判断を行う、といったもので、その効果はともかくとして、以前(といっても10年以上も昔ですが)はあまり書籍化されていないアプローチでした。
もちろん、複数の指標の組み合わせは今やむしろ当たり前であり、ネット上の記事などでは広く紹介されています。

そこでふと思ったのですが、KFシステムクリエイターのような自己相関型のシステムの場合、これはある意味、完全なテクニカル分析の土台の上に成り立っているわけです。
トレーディングシステムのロジックは、多くの場合テクニカル指標に基づいており、それを長期に渡って継続して運用したものが、システムトレードと言うことになります。

通常のテクニカル分析との最大の違いは、その継続性にあります。普通、テクニカル分析の有効性を紹介する書籍などでは、ある銘柄のチャートの一部のみを捉え、そこに定式化されたテクニカル指標を当てはめて、利益が出る出ないを解説しています。

以前から話しているように、十分長期の期間において、全ての銘柄、同一のパラメータで、利益が出るようなテクニカル指標は、恐らく存在しません。
そこで、システムトレードにおいては、十分長期の期間において、個々の銘柄、最適なパラメータで、利益が出るようなテクニカル指標(ロジック)を見出しているのです。

安易なテクニカル分析の最大の欺瞞は、有効性の継続性を軽視することにあります。これはテクニカル分析に限らず、世の中にある多くの非科学的な誘惑にも当て嵌まることです。

ある著名なサイトのネット記事で、「株価が上昇したからと言ってすぐに手仕舞いせず、トレンドに乗り続けるべし」という記述を見かけました。そして、「株価が20日移動平均を下回ったら手仕舞いすればよい」と解説していました。

こんな簡単な方法で利益が得られるのであれば、誰も苦労はしません。そして何よりも、こんな簡単な方法だからこそ、簡単に売買シミュレーションができ、その結果を直ちに判定することが出来るはずなのに、その手間すらかけずに直感の赴くまま述べているとしか思えないことが残念です。

一般人のブログ記事であれば、とやかく言う筋合いのものではないのですが、少なくとも専門家として著名なサイトの担当ページを受け持っている方の書くべき内容ではないと思います。
結局、多くの人は立派な経歴を有した識者の言うことを信用しがちであり、その見識が実際には正しくないとしても、それに抗うことは難しくなってしまいます。

さて、ここまでの話で、テクニカル分析は有用ではないと言っているわけではありません。問題なのは、その使い方にあります。
局所的なチャートを引っ張り出して、それに様々なテクニカル指標を当てはめ、利益が出る出ないと分析することは無意味です。

チャートが変われば、当然それらのテクニカル指標の有効性も変わってきます。あるチャートでは利益が出るものの、別のチャートでは損失になってしまう場合も普通に生じてきます。

では、どうすれば良いのでしょうか?

当たり前の話ですが、十分長期、例えば5年以上の時系列データを用い、対象とするテクニカル指標に基づいた売買成績を全て集計し、収益の期待値がプラスになるかどうかを確認すれば良いのです。
何のことはない、これは単に、そのようなトレーディングシステムを作成して性能を確認すべし、と言っているに過ぎません。

ここで重要なのは、客観的に過不足なくデータを集計することであり、テクニカル指標の定義に則って忠実に売買タイミングを抽出し、エントリー期間の損益を正確に求めることです。
その際、当然のことですが、売買シグナルの点灯と同時にエントリーやエグジットをすることは出来ません。必ず1ティック以上の時間を置く必要があります。

指値や逆指値を用いれば、シグナル点灯と同時にエントリーできると思われるかもしれませんが、現実的にはそれは難しいでしょう。
テクニカル指標を用いたトレードの中には、「ある閾値を超えたらその方向にエントリーする」といったロジックを有するものが少なくありません。

例えば、株価が20日移動平均を下回ったら買いを手仕舞いする、という場面を考えた時、株価が下落する方向に「売る」ことになります。これは逆指値での注文が必要になります。
しかし、逆指値の場合、必ずスリッページが生じてしまいます。長期に渡るトレードにおいて、このスリッページの蓄積は時として致命的です。

また、移動平均の値も株価に応じて微妙に変化しますし、これでは売買シグナルを忠実に再現した客観的なトレードが実現できません。

逆張り系のトレードであれば、指値で売買できると考えるかもしれません。例えば、株価の20日移動平均からの乖離率が+5%になったら「売る」といった類です。
これは見方を変えれば、予め売却価格を決めておいて、そこに指値注文を出しておく、ということです。

1回こっきりのトレードであれば、これは出来なくもありません。しかし、先に述べたように、テクニカル指標の有効性を確認するためには、トレードの継続性が必要になります。
この前提がなければ、そもそもその有効性を評価することなど、出来っこないのです。

では、このような逆張りトレードを連続して行う場合、どのような問題点があるのでしょうか?

一つは高値安値の順番です。通常の日足データでは、高値が先か安値が先かは分かりません。値動きの激しい銘柄や相場環境の場合、売買ルールによっては、1日の中で複数回のエントリーが生じるかもしれません。
その際、エントリータイミングを正確につかむためには、ティックデータが必要になります。

検証期間として最低でも5年間が必要だとすると、その分のティックデータを全て集める必要がありますが、それは非常に難しく、現実的ではありません。
また、ティックデータの場合、それぞれの売買単位は小さく、自分の売買による影響が無視できません。

そして何よりも、逆張りトレードの場合、エントリーはいくらでも待てるのですが、エグジットに関しては必ずしもその限りではありません。
損失の拡大に備えて、通常は損切りとセットで考える必要がありますが、それは結局逆指値を導入するということです。これはスリッページを生じさせます。

元々、普通に株本などで紹介されている手法は、当日の終値で判定して翌日の始値で売買する前提で用いられています。あるいは、週足や月足ベースなどに適用する場合もあります。
いずれにしても、これは判定から実際の売買までのタイミングが、1ティック以上離れていることを示しています。

さて、一般にテクニカル分析においては、分析に用いる指標のパラメータを推奨値に固定することが普通です。どんな銘柄に対してもそれは変らず、もしも上手くいきそうにない場合には、パラメータを変えるのではなく、別のテクニカル指標を適用してみるというアプローチが取られる場合が多いのではないでしょうか?

そのため、巷にある多くのチャートソフトなどでは、テクニカル指標の多さが重要なアピールポイントになっているように思います。
もちろん、それは多いに越したことはないのでしょうが、それに囚われすぎてしまうと、継続的に収益を上げ続けるという最終目標を忘れてしまうかもしれません。

一方、トレーディングシステム、特にKFシステムクリエイターでは、むしろパラメータを最適化して上手く収益化出来そうな道を探ります。
もちろん、ロジックもいろいろと変えてみるのですが、その際に銘柄の背景を考慮するようなことはしません。あくまで、パラメータと同じ土俵で走査します。

このように、KFシステムクリエイターでは基本的に、全数検索を前提としてシステムを設計します。ロジックの種類が増えれば、それだけ優れたシステムが得られる可能性は増すわけですが、それと同時にシステムの設計工数も増加してしまいます。

そのような事情から、新たなロジックの追加、特に既存のテクニカル指標の導入に関しては、どちらかと言えばやや消極的な立場を取っていました。
しかし、多くの人がテクニカル指標の多さを求める傾向が高いのであれば、そのような方向性を考える必要があると感じています。

そこで来年以降、新たなロジックの追加を順次行っていくことにしました。もちろん、ユーザーの方にはその都度ロジックを無償提供していきます。
そうすることで、KFシステムクリエイターはテクニカル指標の評価装置としても、用いることが出来るようになるでしょう。

さて、冒頭でテクニカル指標の組み合わせによるトレードについて触れました。これは取りも直さず、トレーディングシステムを合成することと同義です。
例えば、移動平均とRSIの組み合わせで売買判定を行うと言うことは、移動平均システムとRSIシステムとを合成すると言うことです。

この場合、それぞれの指標は互いにフィルタとして機能します。しかし、システムとして考えた場合には、そのフィルタという概念は、システムのロジックと同一になります。
これについては、2010年11月15日の記事「フィルタはシステムだ!」をご参照ください。

単なるテクニカル分析の延長線上で指標の組み合わせの優劣を確認する場合、それは果たして正確に売買を再現できるのでしょうか?
それを確認するためには、トレーディングシステムというきちんとした道具を用意する必要があります。

「テクニカル分析によると、あの時あのタイミングで買って、あのタイミングで売っていれば利益が出ていた」などと言うのは、実は何も言っていないことと同じです。
テクニカル分析を極めると言うことは、システムトレードを極めることと同義なのです。

nice!(0)  コメント(0) 
共通テーマ:
前の5件 | 次の5件 システムトレード ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。