記事のタイトルで、もうこの著者を特定できる :)))))
このような記事がシリーズ化されれば、まさに素晴らしい!!!
私がコードを書くことを学び始めた4年ほど前、このような記事がどれほど恋しかったことか。
そして今でも、まだ知らなかったことを見つけることができる。
特に、StringFormatと PrintFormatに関する 前回の記事は、これらの関数に関するヘルプが非常に貧弱であることを考えると、非常に有益だ。
面白くて必要な記事を書いてくれた作者に感謝します!
StringFormat(). Обзор, готовые примеры использования
- www.mql5.com
Статья является продолжением обзора функции PrintFormat(). Рассмотрим вкратце форматирование строк при помощи StringFormat() и их дальнейшее использование в программе. Напишем шаблоны для вывода информации о символе в журнал терминала. Статья будет полезна как новичкам, так и уже опытным разработчикам.
とても良い記事だ。mqhファイルはどこでダウンロードできますか?
この記事には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関数のソースを構造体のソースで返す。
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 - нахождение аварийных проходов при Оптимизации советника
- www.mql5.com
Во время Оптимизации советника некоторые проходы могут завершаться аварийно. Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий Новая версия платформы MetaTrader 5
取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事「MQL5の構造体とデータ表示メソッド」はパブリッシュされました:
この記事では、MqlDateTime、MqlTick、MqlRates、MqlBookInfoの各構造体と、それらからデータを表示するメソッドについて見ていきます。構造体のすべてのフィールドを表示するためには、標準的なArrayPrint()関数があります。この関数では、配列に含まれるデータを便利な表形式で、扱われる構造体の型とともに表示します。
MqlParamおよびMqlTradeRequest構造体は、指標を作成し、取引リクエストをサーバーに送信するための技術情報を送信します。完成した構造体のデータ送信結果に応じて、構造体の必要項目を埋めていきます。言い換えれば、これらの構造体では、プログラマーがこれらの構造体のフィールドに記入したデータを表示する必要は特にありません。
しかし、残りの構造体はクエリ結果を返し、各フィールドはターミナルサブシステムか取引サーバーによって埋められます。このような構造体からデータを取得したり、プログラムによって構造体のフィールドに入力されたデータを分析したり、あるいはログに出力して手動で分析したりすることは、プログラム上の意思決定や、論理エラーの発生箇所を把握発見するために非常に便利で必要なことです。
構造体のすべてのフィールドを表示するためには、標準的なArrayPrint()関数があります。この関数では、配列に含まれるデータを便利な表形式で、扱われる構造体の型とともに表示します。しかし、表形式で表現するよりも便利なために、構造体から別の形式でデータを表示する必要があることもあります。たとえば、構造体のすべてのフィールドを、ヘッダーと対応するデータとともに1行で表示する必要があるかもしれません。大量のデータを分析するには、こちらの方が便利かもしれません。同時に、構造体フィールドの説明や対応するデータの別の表現など、より詳細なビューが必要な場合もあります。
作者: Artyom Trishkin