エラー、バグ、質問 - ページ 119

 
どこかのフォーラムで、テスト中のコメントは(ディスク容量を節約するために)ログに書き込まれないと読みました。これに関して質問ですが、テスターでプログラムをデバッグするにはどうしたらいいのでしょうか?printfとPrintFormatを 試しましたが、テスターでは何も動作せず、Alertも試しました。
 
Scriptong:
どこかのフォーラムで、テスト中のコメントは(ディスク容量を節約するために)ログに書き込まれないと読みました。そこで質問ですが、テスターでプログラムをデバッグするにはどうしたらいいのでしょうか?printfとPrintFormatを試しましたが、テスターでは何も動作せず、Alertも試しました。
テストエージェントのログを見てください - すべてがそこに書かれていますが、ローカル エージェントのみです。リモートエージェントは、情報保存のため、Print()出力を ログに書き込まない。
Документация по MQL5: Общие функции / Print
Документация по MQL5: Общие функции / Print
  • www.mql5.com
Общие функции / Print - Документация по MQL5
 

確認しました。私のエージェントはローカルです(少なくともLocalに掲載されています)。Expert Advisor を"Every tick" モードで実行した後、"Log" タブの内容がエージェントのログファイルの内容と一致します(Expert Advisor とログファイルを添付します)。

はい、忘れてました。テスト期間は "Last Month "です。

ファイル:
test.mq5  2 kb
 

ログに「デバッグ版の 'test.ex5' を再コンパイルしてください」と書かれています。

つまり、デバッグ用のEX5(エディタでF5を押すとデバッグ情報付きのEX5が出る)は、テスターでは実行できないのです。

このようなEAを自動で再コンパイルするようにします。その間、手動でEAを再コンパイルしてください。

 
alexvd:
そして、フルコードを持ってこられるのですか?

で、多分全部持ち出しちゃったんだろうな、他に理由が思いつかないし...。

もう少し詳しく状況を説明しようと思います。

CMqlTimer " というクラスがあり、このクラスは、時間、日、週、月、年の異なる時間間隔が変化する瞬間を追跡する。

例えば、分数が0になれば「新しい時間」が来たことになり、曜日が変数に格納されている数字と一致しなければ、曜日交替(サーバー時間では「00:00:00」)が来たことになるなど、非常にシンプルな原始的方法ですべてが実現されています。で、その上で。

解析はタイマーが作動した時に1秒間隔で行われ、その作業はCMqlTimer::OnTimer()で行われます。時間間隔が変更された場合は、関数を実行する必要があります。例えば、「新しい」日であれば、CMqlTimer::OnRolloverDay()関数が実行されるはずです。


残りのコードを削除し、OnRolloverDay()のみを記述すると、以下のようになります。

//Function CMqlTimer.OnRolloverDay
bool CMqlTimer::OnRolloverDay()
//Дневной ролловер
{
//----------------------------------------------------------------------------//
//Work variables
string MessageText; //Text for message
int    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 chart
EventChartCustom(0,(ushort)UserEventID-CHARTEVENT_CUSTOM,0,0,MessageText);

//Checking for presence of the errors
  if(_LastError!=0)
  //В результате работы произошла ошибка
  {
  Result = false;  
  }
//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}

すべてのユーザー イベントは追跡され、メインクラスに処理されます。

以下のような感じです。

void OnChartEvent(const int id,         // идентификатор события  
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                  )
{
//----------------------------------------------------------------------------//
//Work variables
//----------------------------------------------------------------------------//

//----------------------------------------------------------------------------//
//                          Processing user events                            //
//----------------------------------------------------------------------------//
  if(id>CHARTEVENT_CUSTOM)
  //User event is received
  {
  Expert.OnEvent(id,lparam,dparam,sparam);
  }
//----------------------------------------------------------------------------//  
}

そのため、テストモードではイベントがOnChartEventに到達しません。つまり、Expert Advisorはテストモードでは EventChartCustomを 使用して送信されたイベントを処理することができないのです。 ログに全イベントを表示して確認しました。

追記

最も興味深いのは、デモのすべてのイベントに到達すること ですが、テスターでは拒否を動作していることです。

319以前はすべて動作し、テスターでは、イベントが正常に処理されました。前回のリリースで動作したTrue......とは言えません。

 
stringo:

ログに「デバッグ版の 'test.ex5' を再コンパイルしてください」と書かれています。

つまり、デバッグ用のEX5(エディタでF5を押すとデバッグ情報付きのEX5が出る)は、テスターでは実行できないのです。

このようなEAを自動で再コンパイルするようにします。その間、手動でEAを再コンパイルしてください。

ありがとうございます。F5を押して得られるファイルとF7を押して得られるファイルに違いがあるとは知りませんでした。
 
Interesting:

で、たぶん全部持ち出しちゃったんだろうな、他に理由が思いつかないし...。

もう少し詳しく状況を説明しようと思います。

...
ありがとうございます。考えておきます。
 

テスターでは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] (充填モードがサポートされていません)

売却依頼をする。

MqlTradeRequest request;
         request.action=TRADE_ACTION_DEAL;
         request.symbol=Symbol_[i];
         request.volume=volume_exe;
         request.price=SymbolInfoDouble(Symbol_[i], SYMBOL_BID);
         request.sl=0;
         request.tp=0;
         request.deviation=SymbolInfoInteger(Symbol_[i], SYMBOL_SPREAD)*2;
         request.type=ORDER_TYPE_SELL;
         request.type_filling=ORDER_FILLING_CANCEL

BUYのリクエスト。

MqlTradeRequest request;
         request.action=TRADE_ACTION_DEAL;
         request.symbol=Symbol_[i];
         request.volume=volume_exe;
         request.price=SymbolInfoDouble(Symbol_[i], SYMBOL_ASK);
         request.sl=0;
         request.tp=0;
         request.deviation=SymbolInfoInteger(Symbol_[i], SYMBOL_SPREAD)*2;
         request.type=ORDER_TYPE_BUY;
         request.type_filling=ORDER_FILLING_CANCEL;

OrderCheckはエラーを見つけられませんでした。


 

ORDER_FILLING_CANCEL クエリをORDER_FILLING_AON クエリに置き換えたところ、エキスパートが動作する ようになりました。

しかし、問題は、なぜテスターとサーバーの操作にこれほど差が出るのか、ということです。


Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 

チャンピオンシップサーバーが逆になったら何の冗談だ。