記事「MQL5の構造体とデータ表示メソッド」についてのディスカッション

 

新しい記事「MQL5の構造体とデータ表示メソッド」はパブリッシュされました:

この記事では、MqlDateTime、MqlTick、MqlRates、MqlBookInfoの各構造体と、それらからデータを表示するメソッドについて見ていきます。構造体のすべてのフィールドを表示するためには、標準的なArrayPrint()関数があります。この関数では、配列に含まれるデータを便利な表形式で、扱われる構造体の型とともに表示します。

MqlParamおよびMqlTradeRequest構造体は、指標を作成し、取引リクエストをサーバーに送信するための技術情報を送信します。完成した構造体のデータ送信結果に応じて、構造体の必要項目を埋めていきます。言い換えれば、これらの構造体では、プログラマーがこれらの構造体のフィールドに記入したデータを表示する必要は特にありません。
しかし、残りの構造体はクエリ結果を返し、各フィールドはターミナルサブシステムか取引サーバーによって埋められます。このような構造体からデータを取得したり、プログラムによって構造体のフィールドに入力されたデータを分析したり、あるいはログに出力して手動で分析したりすることは、プログラム上の意思決定や、論理エラーの発生箇所を把握発見するために非常に便利で必要なことです。


構造体のすべてのフィールドを表示するためには、標準的なArrayPrint()関数があります。この関数では、配列に含まれるデータを便利な表形式で、扱われる構造体の型とともに表示します。しかし、表形式で表現するよりも便利なために、構造体から別の形式でデータを表示する必要があることもあります。たとえば、構造体のすべてのフィールドを、ヘッダーと対応するデータとともに1行で表示する必要があるかもしれません。大量のデータを分析するには、こちらの方が便利かもしれません。同時に、構造体フィールドの説明や対応するデータの別の表現など、より詳細なビューが必要な場合もあります。

作者: Artyom Trishkin

 
記事のタイトルで、もうこの著者を特定できる :)))))
 

このような記事がシリーズ化されれば、まさに素晴らしい!!!

私がコードを書くことを学び始めた4年ほど前、このような記事がどれほど恋しかったことか。

そして今でも、まだ知らなかったことを見つけることができる。

特に、StringFormatと PrintFormatに関する 前回の記事は、これらの関数に関するヘルプが非常に貧弱であることを考えると、非常に有益だ。

面白くて必要な記事を書いてくれた作者に感謝します!

StringFormat(). Обзор, готовые примеры использования
StringFormat(). Обзор, готовые примеры использования
  • www.mql5.com
Статья является продолжением обзора функции PrintFormat(). Рассмотрим вкратце форматирование строк при помощи StringFormat() и их дальнейшее использование в программе. Напишем шаблоны для вывода информации о символе в журнал терминала. Статья будет полезна как новичкам, так и уже опытным разработчикам.
 
とても良い記事だ。mqhファイルはどこでダウンロードできますか?
 
Zhongquan Jiang # :
とても良い記事だ。ダウンロードできるmqhファイルはどこにありますか?

ファイルは記事には添付されていません。MetaEditorのコードエディターで、記事中のコードをコピーペーストするだけです。

 
Artyom Trishkin #:

ファイルは記事には添付されていません。MetaEditorのコードエディターで、記事のコードをコピー・ペーストするだけです。

取引、自動取引システム、取引戦略のテストに関するフォーラム

外貨のMT5

ウラジーミル・カルプトフ, 2016.10.15 08:38 AM

フォーラムのロシア語パートにロシア語で書き込んでください。

 
この記事にはMqlRatesPrint関数がありません。
 
Fokus24 #:
MqlRatesPrint関数はこの記事にはありません

忘れていたようだ。ありがとう。

//+------------------------------------------------------------------+
//| MqlRates構造体のすべてのフィールドの説明をログに記録する。
//+------------------------------------------------------------------+
void MqlRatesPrint(const string symbol,const ENUM_TIMEFRAMES timeframe,const MqlRates &rates,
                   const bool short_entry=true,const uint header_width=0,const uint indent=0,int index=WRONG_VALUE)
  {
//--- 結果を格納する変数を宣言する。
   string res="";
//--- タイムフレームの小数点以下の桁数と文字列値を取得する。
   int dg=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
   string tf=StringSubstr(EnumToString(timeframe==PERIOD_CURRENT ? Period() : timeframe),7);
   string num=(index==WRONG_VALUE ? ":" : StringFormat("[%ld]:",index));
//--- シンボルTF[index]フォーマットでログにバーデータを出力:Time、O、H、L、C、S、V/VR
   if(short_entry)
     {
      res=StringFormat("%s %s%s %s, O: %.*f, H: %.*f, L: %.*f, C: %.*f, S: %2ld, V: %5lld, RV: %lld",
                       symbol,tf,num,(string)rates.time,dg,rates.open,dg,rates.high,dg,rates.low,dg,rates.close,rates.spread,rates.tick_volume,rates.real_volume);
      Print(res);
     }
   /* 出力例:
 GBPUSD H1: 2023.07.21 08:00:00、O: 1.28794、H: 1.28848、L: 1.28772、C: 1.28772、S: 4、V: 448、RV: 0
 */
//--- そうでなければ
   else
     {
      //--- インデントとヘッダーフィールドの幅を指定して、構造体のすべてのデータを記述する文字列を作成する。
      res=StringFormat("%s %s%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s",symbol,tf,num,
                       MqlRatesTime(rates,header_width,indent),
                       MqlRatesOpen(symbol,rates,header_width,indent),
                       MqlRatesHigh(symbol,rates,header_width,indent),
                       MqlRatesLow(symbol,rates,header_width,indent),
                       MqlRatesClose(symbol,rates,header_width,indent),
                       MqlRatesTickVolume(rates,header_width,indent),
                       MqlRatesSpread(rates,header_width,indent),
                       MqlRatesRealVolume(rates,header_width,indent)
                      );
      //--- 受信した文字列をログブックに出力する
      Print(res);
     }
   /* 出力例 (Last が NULL でない場合):
 時刻: 2023.07.20 14:42:33
 Bid: 1.28958
 Ask: 1.28962
 Last: 1.28947
 Volume: 33
 Time msc: 2023.07.20 14:42:33.401
 Flags: BID|ASK
 Volume Real: 33.45
 
 出力例(LastがNullの場合):
 Time: 2023.07.20 14:42:33
 Bid: 1.28958
 Ask: 1.28962
 Time msc: 2023.07.20 14:42:33.401
 Flags: BID|ASK
 */
  }
//+------------------------------------------------------------------+
 

機能を完成させることを提案する。


string GetPrintSource( const string Source );

print関数のソースを構造体のソースで返す。

 
fxsaber #:

私は機能性を追加することを提案する。


構造体のソースによってプリント関数のソースを返す。

例を挙げてもらえますか?理解できません。

 
Artyom Trishkin #:

例を挙げてもらえますか?理解できません。

string GetPrintSource( const string Source )
{
  return("string ToString( const STRUCT &Data ) { return(\"i = \" + (string)Data.i); }");
}

void OnStart()
{
  Print(GetPrintSource("struct STRUCT { int i; };"));
}
私はここで 似たようなことをしましたが、入力がありました。
CheckInputs - нахождение аварийных проходов при Оптимизации советника
CheckInputs - нахождение аварийных проходов при Оптимизации советника
  • www.mql5.com
Во время Оптимизации советника некоторые проходы могут завершаться аварийно. Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий Новая версия платформы MetaTrader 5