バックテスト用インジケータ作成をする方法~勝率計算の式をmqlで組み込む方法~
バックテストコードを書いている時に、勝率計算の部分で困った経験はないですか?
ある程度のレベルにまでなると、次はコードの条件式に移って行けると思うのですがそのまえにこの勝率計算の部分で躓く方が多いです。
その理由は、、、ややこしいから。
この記事で簡単に理解できるように分解して説明していこうと思います
目次
勝率計算式の全体像を公開
ではまず初めに、勝率計算式のコードのサンプルをこちらに書きます。
double sum=0;
double win=0;
if(JudgeTime != Time[0])
{
for(int i=MathMin(24*60*nissu/Period(), Bars-1);i>=0;i--)
{
if(ArrowDown[i]!=0)
{
sum++;
if(Open[i]>Close[i])
{
win++;
}
}
else if(ArrowUp[i]!=0)
{
sum++;
if(Open[i]<Close[i])
{
win++;
}
}
}
if(sum!=0)
{
Print("矢印合計:",sum, " 勝ち矢印数:", win, " 負け矢印数:", sum-win, " 勝率:", win/sum*100,"%");
}
else
{
Print("矢印なし");
}
JudgeTime = Time[0];
}
勝率計算式の細かいパーツを説明
それでは細かいパーツの解説に入って行きます。勝率計算の指揮のパーツを抜き出してきているだけなので、一部宣言をこの内容には書いてないところもありますが、基本的にこの部分を抜き出して使うことも可能です。
大まかな流れとしては、以下のバッファにて勝率計算を行います。
・ArrowUp
・ArrowDown
・sum
・win
上の二つは、矢印を出す際に宣言をしているのでこちらの記事では省いています。基本的な矢印が出た時に
sum++;
にて、sumという関数に数字を追加していく。
そしてさらに、その条件下の中でさらに
Open[i]>Close[i]
の条件を満たしていれば、
win++;
のパーツにて、winに数字を追加していく、という流れになります。
カッコが多用されていてややこしいですがやっていることは単純にこれだけなのでそこまで難しく考える必要はないです。
勝率計算用のバッファを準備
↓
バッファに数字を入れる条件を追加
↓
さらに勝利の条件を追加
という流れですので、その視点で再度式を見直してみて下さい。案外簡単です。
意識して勉強すべきポイント
バックテストのコードを学習する際にとても大事なのですが、まずは基本のコードを丸暗記するところから始めましょう。
一つ一つ調べながらやると時間がかかりすぎて勉強をするのが億劫になります。
途中でやめてしまうとすべての時間が無駄になるので、辞めないためにも勉強のやり方を工夫する必要があります。
プログラミングは苦手意識を持っている人が多いですし僕も初めて触るときは苦手としか思っていませんでしたが、言語の勉強と同じで最初は暗記から入るとスムーズに進めることが出来ます。
最後に
一つ一つ説明をしていっていますが、伝えきれない部分やその人特有の質問もあると思います。
ですので、不定期で募集をしている『バックテストマスター講義』への参加をお勧めします。
こちらの講義ではバイナリーオプションに特化したバックテストを取るスキルをマスターするためのもので、超初心者でも自分でゼロからインジケータを作成できるようにカリキュラムを組み、実際にそうなった生徒も沢山います。
トレードで利益を出すことが一番の目的だと思うので、トレードに繋がるバックテストを大事に考え、指導を行っています。
お問い合わせに関してはこちらから。
質問や要望などもこちらからどうぞ。それでは最後までありがとうございました。