//Function CMqlTimer.OnRolloverDaybool CMqlTimer::OnRolloverDay()
//Дневной ролловер
{
//----------------------------------------------------------------------------////Work variablesstring MessageText; //Text for messageint UserEventID; //Identifier of the user event bool Result; //Returned importance//----------------------------------------------------------------------------//
Result = true;
ResetLastError();
RolloverCountDay = RolloverCountDay+1;
UserEventID = CHARTEVENT_CUSTOM+15;
MessageText = StringFormat("Rollover Day (№ %d)",RolloverCountDay); //Можно просто "Rollover Day"
//We refer user event of the work chartEventChartCustom(0,(ushort)UserEventID-CHARTEVENT_CUSTOM,0,0,MessageText);
//Checking for presence of the errorsif(_LastError!=0)
//В результате работы произошла ошибка
{
Result = false;
}
//----------------------------------------------------------------------------//return(Result);
//----------------------------------------------------------------------------//
}
voidOnChartEvent(constint id, // идентификатор события constlong& lparam, // параметр события типа longconstdouble& dparam, // параметр события типа doubleconststring& sparam // параметр события типа string
)
{
//----------------------------------------------------------------------------////Work variables//----------------------------------------------------------------------------////----------------------------------------------------------------------------//// Processing user events ////----------------------------------------------------------------------------//if(id>CHARTEVENT_CUSTOM)
//User event is received
{
Expert.OnEvent(id,lparam,dparam,sparam);
}
//----------------------------------------------------------------------------//
}
どこかのフォーラムで、テスト中のコメントは(ディスク容量を節約するために)ログに書き込まれないと読みました。そこで質問ですが、テスターでプログラムをデバッグするにはどうしたらいいのでしょうか?printfとPrintFormatを試しましたが、テスターでは何も動作せず、Alertも試しました。
確認しました。私のエージェントはローカルです(少なくともLocalに掲載されています)。Expert Advisor を"Every tick" モードで実行した後、"Log" タブの内容がエージェントのログファイルの内容と一致します(Expert Advisor とログファイルを添付します)。
はい、忘れてました。テスト期間は "Last Month "です。
ログに「デバッグ版の 'test.ex5' を再コンパイルしてください」と書かれています。
つまり、デバッグ用のEX5(エディタでF5を押すとデバッグ情報付きのEX5が出る)は、テスターでは実行できないのです。
このようなEAを自動で再コンパイルするようにします。その間、手動でEAを再コンパイルしてください。
そして、フルコードを持ってこられるのですか?
で、多分全部持ち出しちゃったんだろうな、他に理由が思いつかないし...。
もう少し詳しく状況を説明しようと思います。
CMqlTimer " というクラスがあり、このクラスは、時間、日、週、月、年の異なる時間間隔が変化する瞬間を追跡する。
例えば、分数が0になれば「新しい時間」が来たことになり、曜日が変数に格納されている数字と一致しなければ、曜日交替(サーバー時間では「00:00:00」)が来たことになるなど、非常にシンプルな原始的方法ですべてが実現されています。で、その上で。
解析はタイマーが作動した時に1秒間隔で行われ、その作業はCMqlTimer::OnTimer()で行われます。時間間隔が変更された場合は、関数を実行する必要があります。例えば、「新しい」日であれば、CMqlTimer::OnRolloverDay()関数が実行されるはずです。
残りのコードを削除し、OnRolloverDay()のみを記述すると、以下のようになります。
すべてのユーザー イベントは追跡され、メインクラスに処理されます。
以下のような感じです。
そのため、テストモードではイベントがOnChartEventに到達しません。つまり、Expert Advisorはテストモードでは EventChartCustomを 使用して送信されたイベントを処理することができないのです。 ログに全イベントを表示して確認しました。
追記
最も興味深いのは、デモのすべてのイベントに到達すること ですが、テスターでは拒否を動作していることです。
319以前はすべて動作し、テスターでは、イベントが正常に処理されました。前回のリリースで動作したTrue......とは言えません。
ログに「デバッグ版の 'test.ex5' を再コンパイルしてください」と書かれています。
つまり、デバッグ用のEX5(エディタでF5を押すとデバッグ情報付きのEX5が出る)は、テスターでは実行できないのです。
このようなEAを自動で再コンパイルするようにします。その間、手動でEAを再コンパイルしてください。
で、たぶん全部持ち出しちゃったんだろうな、他に理由が思いつかないし...。
もう少し詳しく状況を説明しようと思います。
...テスターではEAがエラーなく動作し、主催者のテスト機でもエラーなく合格しているのですが、何が問題なのか理解できません。
デモ口座で実行すると、注文を開こうとするとエラーが発生します。
2010.09.06 13:26:50 Trades '101894' : failed instant buy 0.10 USDJPY at 84.179 [Unsupported filling mode] (充填モードがサポートされていません)
2010.09.06 13:26:45 Trades '101894' : failed instant buy 0.10 USDCAD at 1.03689 [Unsupported filling mode] (サポートされていないフィリングモード)
2010.09.06 13:26:39 Trades '101894' : failed instant buy 0.10 USDJPY at 84.174 [Unsupported filling mode] (充填モードがサポートされていません)
2010.09.06 13:26:34 Trades '101894' : failed instant buy 0.10 USDCAD at 1.03685 [Unsupported filling mode] (サポートされていないフィリングモード)
2010.09.06 13:26:28 Trades '101894' : failed instant buy 0.10 USDJPY at 84.174 [Unsupported filling mode] (充填モードがサポートされていません)
2010.09.06 13:26:23 Trades '101894' : failed instant buy 0.10 USDCAD at 1.03688 [Unsupported filling mode] (サポートされていないフィリングモード)
2010.09.06 13:26:18 Trades '101894' : failed instant buy 0.10 USDJPY at 84.181 [Unsupported filling mode] (充填モードがサポートされていません)
売却依頼をする。
BUYのリクエスト。
OrderCheckはエラーを見つけられませんでした。
ORDER_FILLING_CANCEL クエリをORDER_FILLING_AON クエリに置き換えたところ、エキスパートが動作する ようになりました。
しかし、問題は、なぜテスターとサーバーの操作にこれほど差が出るのか、ということです。
チャンピオンシップサーバーが逆になったら何の冗談だ。