バックテストスコアの計算方法バージョン1.1の変更点

Pocket
LINEで送る

バックテストスコアと名付けた検証を約1ヶ月続けてきて、欠点など色々と見えてきました。

バックテストスコアをより良いものとするため、計算方法を変更いたします。

 

 

 

主な変更点

  1. 証拠金の算出方法を変更
  2. 両建てを行うEAの証拠金計算方法を修正
  3. マイナススコアに対する品質補正係数の計算方法修正
  4. 分割決済EAの取引数を変更

 

 

 

証拠金の算出方法を変更

バージョン1.0では1point当たりの損益を算出し、10,000pointの損益を1ロット(10万通貨)当たりの証拠金としておりました。

円建て口座のUSDJPYなどで1pointの損益が100円であった場合、1ロットの証拠金は100万円となる計算でした。

これは実際の必要証拠金額よりも大きな数値です。

これにより必要証拠金が大きくなるため収益率が下がり、バックテストスコアも本来の成績より下がっている状態でした。

そのため必要証拠金の計算方法の見直しをおこなっておいます。

 

証拠金の計算は下記のようになります。

 

証拠金 = 1point当たりの損益 × 10,000 × 通貨ごとの係数

 

これまでの計算方法に、通貨ペア毎の係数を掛け合わせることで、より現実的な数値となるようにしています。

係数は次の方法で算出しております。

クロス円の場合、現在価格を5で割った値を求める。小数点以下は切り上げる。

得られた数値に20,000を掛けてから1,000,000で割った値がその通貨ペアの係数となる。

例として現在111.7円のドル円の場合、5で割った値は22.34です。

小数点以下を切り上げて、23となります。

23に20,000を掛けて、460,000となります。

これを更に1,000,000で割った0.46がドル円の係数となります。

これまで円口座のドル円は証拠金が100万円と算出されておりましたが、この係数0.46を掛けることで46万円となります。

これによりレバレッジ25倍での実際の必要証拠金額に近づけることができました。

 

クロス円以外の通貨ペア、EURUSDやGBPUSDの場合は、最初の3文字のクロス円の係数が、その通貨ペアの係数となります。

EURUSDの場合はEURJPYの係数と等しくなります。

 

この変更により影響として、必要証拠金が減少した関係で、バックテストスコアはバージョン1.0と比べて上昇する傾向があります。

 

 

 

両建てを行うEAの証拠金計算方法を修正

両建てを行うEAの場合バージョン1.0では、買いポジションの合計取引数量と売りポジションの合計取引数量を足した値が最大取引数量となっておりました。

バックテストスコアは最大取引数量が大きいほど必要証拠金が多くなる計算ですので、最大取引数量が大きいEAはバックテストスコアが下がります。

 

しかし実際の両建ての証拠金は、(厳密には違いますが)大きい方のロット数に合わせた数値になる場合が多いです。

このため両建てEAのバックテストスコアは、両建てをしないEAよりも不利な状態でした。

そこで、買いの最大取引数量と売りの最大取引数量を別々に取得し、大きい方の値を最大取引数量とするよう変更いたしました。

 

例えば買い1.5ロット、売り1.0ロットで両建てするEAの場合は、買いの方が大きい値ですので1.5ロットが最大取引数量となります。

上記の場合、バージョン1.0では買いと売りを足した2.5ロットが最大取引数量となっておりました。

 

この変更により、両建てを行うEAはバージョン1.0よりもバックテストスコアが改善する可能性があります。

両建てを行わないEAのバックテストスコアには影響はありません。

 

 

 

マイナススコアに対する品質補正係数の計算方法修正

バックテストスコアの計算の大きな流れとして、収益と必要証拠金から概算スコアを求め、これに品質補正係数を掛けて最終的なバックテストスコアとしています。

品質補正係数には、モデリング品質係数、取引期間係数、取引数係数、modify係数の4つがあります。

現在の計算方法を式で表すと、下記のようになります。

 

バックテストスコア = 概算スコア ×モデリング品質係数 ×取引期間係数 × 取引数係数 × modify係数

 

品質補正係数はいずれも0以上1以下の値をとるため、品質補正係数の値が悪いとバックテストスコアは0に近づきます。

ただしこの0に近づく性質は、概算スコアがマイナスのEAの場合にも当てはまってしまいました。

質の低いバックテストの場合にスコアを下げる目的で導入した品質補正係数ですが、概算スコアがマイナスですと逆にスコアが上昇して0に近づくという結果になってしまいました。

 

この問題への対処といたしまして、概算スコアがマイナスの場合の計算を下記に変更いたしました。

 

バックテストスコア = 概算スコア ÷ モデリング品質係数 ÷ 取引期間係数 ÷ 取引数係数 ÷ modify係数

 

スコアが0以上のEAに関しては、この変更による影響はありません。

スコアがマイナスのEAに関しては、この変更により更にバックテストスコアが下がります。

 

 

 

分割決済EAの取引数を変更

MT4のバックテストでは、取引数は決済の回数に応じて数えられています。

例えば次のような取引をおこなったとします。

0.3ロットでエントリー → 0.1ロットを決済 → 0.1ロットを決済 → 0.1を決済して全て決済完了。

この場合、エントリーは1回ですが、3回に分けて決済しているため総取引数は3回とカウントされます。

 

総取引数は品質補正係数にも関係がある項目です。

総取引数が少ないEAは誤差の大きい成績とみなして、バックテストスコアを下げています。

極端な考え方をすると、同じEAでも決済する際に同じタイミングで分割決済するようにしたほうが、バックテストスコアが改善する可能性があります。

 

そこで総取引数のカウント方法をエントリーの回数へと変更いたしました。

分割決済を行うと決済後のロット数での取引レコードが新たに挿入されますが、これを除いたエントリー回数をカウントして総取引数としております。

 

この変更により、分割決済を行っているEAではバックテストスコアが減少する可能性があります。

 

 

 

計算方法

詳しい計算方法についてはこの記事では割愛させていただきます。

別途記事にまとめて後日公開いたします。

 

 

 

これまでに検証した記事について

これまでに紹介した記事に関しては、バージョン1.0の結果であることを明記してありますので、バージョン1.0での結果としてこのまま掲載いたします。

全ての記事をバージョン1.1で書き直す予定は今の所ありません。

 

ランキングに関してはバージョン1.1での結果に変更させていただきます。

変更方法として、これまでに検証したEA全てをバージョン1.1で再計算し、上位10位のEAを掲載する予定です。

ランキング上位のEAに関しては、バージョン1.0での検証記事に追記する形で、バージョン1.1の結果を記載することを検討しております。

 

 

 

総括

今回の変更内容は主に証拠金周りを中心とした、不具合の改善がメインなりました。

 

実際には追加のチェック項目などいろいろ考えました。

しかし、あまり一気に修正しても効果の検証がしにくいなと思ったので、まずは最低限直さなきゃ行けない部分の修正にとどめました。

チェック項目の追加は次回以降に少しずつ行い、効果を検証しつつ取捨選択していけたらと考えております。

 

次以降の検証記事では、バージョン1.1での計算結果を掲載していきます。

計算ツールも近々バージョン1.1版をアップロード予定です。

 

Pocket
LINEで送る

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)