デバッグログでデバッグ!そして・・発見!EAですが、バックテストから、正しく動作しているかテストは必須です。ストラテジーテスターの操作履歴を追いかけるのもありですが、わかりやすくファイルに出力できれば、テストがはかどります。今回はCSV形式で取引結果をファイルに出力し、シグナルと取引が正しいかどうか確認したいと思います。前回の記事で書いた通り#ifdefを使用してデバッグコードを埋め込みます。シグナルとポジション数をCSVに出力してシグナル通りに売買が行われているか確認したいと思います。Sample1のコードを下記のように追加&修正しました。前回までの売買シグナルと違う値の場合、ポジションをいったん全決済する。シグナルが出ている間、1分毎に時間をずらして購入していく。DEBUG//SendOrderの結果をCSVに出力する。WriteTradeLog(signal);#endif}//トレーリングを行う。signal){//ログファイル名が重複するのを避けるため、後ろに番号をつける。ログなのでファイルオープンできなかった場合は、何もしない。現時点でのオーダー数を取得する。orderCount[5]);FileClose(handle);}#endifコンパイルが通ったので早速バックテストを再度実行します。ここで生成したファイルはWindows7の場合、次のフォルダに出力されていました。c:\Users\(ユーザ名)\AppData\Roaming\MetaQuotes\Terminal\(口座毎のシステムID)\tester\filessample1Log(バックテスト実行日時).csvファイルが作成されていれば成功です。中身を見てみましょう。・・・・・おっと、いきなりシグナルが0状態で売ポジションが1になっています。バグ発見!このようにわかりやすい形でファイルを出力することによりテストが行いやすくなります。ログを工夫することでさまざまなデータをとることが可能です。バグを修正したコードがこちらです。前回までの売買シグナルと違う値の場合、ポジションをいったん全決済する。シグナルが出ている間、1分毎に時間をずらして購入していく。DEBUG//SendOrderの結果をCSVに出力する。WriteTradeLog(signal);#endif}//トレーリングを行う。){Trainling(Limit);}}修正した結果のログはこちらです。シグナルの方向と売買の方向が一致するようになりました。実は、最大ポジション数を増やしても取引数が増えない問題が残っています。バックテスト固有の問題かもしれませんが、モデルを「全ティック」にして実行しても、OnTick内のTimeCurrent()で取得できる時間は、設定されている時間足(たとえば15分であれば、15分毎)になってしまい、時間の比較関数が正しく動作していません。調べてみないといけない項目のようです。(追記)時間について、少し調査してみましたが、TimeCurrent()の値が時間足の値になっているわけではなさそうです。バックテスト中はTimeCurrent()とTimeGMT()が同じ値が戻ってくるというのもちょっとショックです・・・。今作っている休日判断ロジックがバックテスト中は正しく動作しない様子です・・・。(泣)��追記2)落ちとしては、ストラテジーテスタのエキスパート設定を開きパラメータをリセットしたら正しく動作しました・・。ソース上でデフォルト値を変更しても、エキスパート設定でリセットしないとデフォルト値は反映されない事をすっかり失念していました。バグとしてもう一か所、初期化時にMaxPositionの設定をしていない箇所がありましたので修正しました。MaxPosition);return(INIT_SUCCEEDED);}テストは大切!!!ということを改めて感じました。★相互リンク募集中★トレードステーションと株・FX自動売買で暮らす茶トラがFX検証中。人気の投稿[MT4プログラミング]MT4のチャート上に矢印を表示する。(6)レンジ・エクスパンション・インデックス(REI)を作ってみた。バックテストを実行してみよう。オシレーターを作成してみた。