2010年06月21日(月)
ランダムウォークとランダムトレード(5) [ランダムウォーク]
前回作成したランダムにトレードするEAですが、ランダムだけあって毎回結果は違います。
この毎回の違いを1回ずつ手動で見るのはなかなか大変です。
そこで、これをまとめて実行するために、メタトレーダーの最適化の機能を利用します。
但し、最適化と言っても、何かのパラメータを本当に最適化するのではなく、単に同じEAを繰り返して実行させるだけです。
簡単には、プログラムの最初に、
extern int Count = 0; // カウンター
という文を追加するだけです。
本来ならこれだけでいいのですが、1回あたりのバックテストにかかる時間が非常に短い場合、乱数の開始点を設定するMathSrand()で指定したGetTickCount()が同じ値を返してしまうことがあります。
そこで、GetTickCount()+Count として、毎回違う開始点になるように細工しました。
int init()
{
MathSrand(GetTickCount()+Count);
}
次に、テスターの画面の右上の「Expert Property」というボタンを押して次のような画面でCount を変化させる範囲を設定します。
ここでは、Count の値を0から999まで1刻みで変えています。つまり、1000回実行するということです。
では、実際に最適化を実行してみましょう。下の図のように「Optimization」にチェックをしてスタートします。
なお、ここでは通貨ペアはUSDJPY、日足チャートに対してのテストです。期間は2003年1月から2005年12月の3年間としました。
ちなみにこの期間のUSDJPYの値動きは下のチャートの通りです。
期間の始めと終わりがだいたい同じ水準になるような期間にしてあります。
最適化の結果、Optimization Graph は下の図のようになりました。
これはプロフィットファクター(PF)が1を超えた回のPFの値を並べたものです。最高で1.38で、1000回のうち、223回で利益が出ていることを表しています。
この結果をどう見るかですが、仮にスプレッドを0にすれば、利益の出る確率は5割に近づくはずです。
それが2割強に落ちたということは、やはりスプレッドがコストとなり、期待値がマイナスになったということです。
それでも3年程度の期間(400トレード程度)では、PFが1.3程度の結果が出るということもランダムトレードの性質として理解しておく必要があるでしょう。
とりあえず、この結果を目安にして、次回は違う条件でテストしてみることにします。
Posted at 18時50分