無料でロボットをダウンロードする方法を見る
Facebook上で私たちを見つけてください。
私たちのファンページに参加してください
興味深いスクリプト?
それではリンクにそれを投稿してください。-
他の人にそれを評価してもらいます
記事を気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
ライブラリ

コンソール・タイプのチャート・テキスト出力に最適化された表示 - MetaTrader 5のためのライブラリ

ビュー:
69
評価:
(17)
パブリッシュ済み:
2025.04.04 10:53
\MQL5\Experts\canvas-vs-labels\demo\cyberdev\ \MQL5\Experts\canvas-vs-labels\demo\
Demo.mq5 (9.48 KB) ビュー
\MQL5\Experts\canvas-vs-labels\measurement\cyberdev\ \MQL5\Experts\canvas-vs-labels\measurement\
MQL5フリーランス このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

このライブラリには2種類の表示がある。1つ目のLabelsDisplayは CChartObjectLabelに基づいて いる。もう1つの CanvasDisplayはCCanvasをベースにしている。これらのディスプレイはレンダリング頻度に最適化されている。Demo.mq5ディスプレイの動作をデモするメインのExpert Advisorの他に、テスターでティックのみの計測を行うCanvasVsLabelsTester.mq5という2つのバリエーションがあります。ユニバーサルなCanvasVsLabels.mq5は、テスターとチャートの両方で測定を行います。表示速度の比較の詳細については、リンク「Canvas vs Labels」をご覧ください。

チャートの描画速度の測定

チャートの入力方法

//+------------------------------------------------------------------+
//|ChartDisplayDemo.mq5
//|著作権 2021, © Cyberdev|サイバーデブ
//| https://www.mql5.com/en/users/cyberdev/seller
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, © Cyberdev."
#property link      "https://www.mql5.com/en/users/cyberdev/seller"
#property version   "1.00"

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
#include "cyberdev\ChartDisplay.mqh"

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
enum OutType { 
  otCanvas, // キャンバス
  otLabels  // ラベル
};

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
input OutType outType = otLabels; // outType - 表示タイプ
input int nLines = 50; // nLines - ディスプレイの行数。
input bool optimizeUpdate = false; // optimiseUpdate - ラベルの最適化
input int bWidth = 406; // bWidth - 表示幅
input int lY_Dist = 14; // lY_Dist - 線間の距離.
input bool back = false; // 背面 - ラベルの背景

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
Strings * display;
CChart Chart;

//+------------------------------------------------------------------+
//| エキスパート初期化関数|
//+------------------------------------------------------------------+
int OnInit() {
  Chart.Attach(ChartID());
  Chart.ShowGrid(false);
  Chart.ColorBackground(C'194,231,197');
  Chart.ColorBarUp(clrDodgerBlue);
  Chart.ColorBarDown(clrBlueViolet);
  Chart.ColorCandleBull(clrDodgerBlue);
  Chart.ColorCandleBear(clrBlueViolet);
  Chart.ColorForeground(clrBlack);
  switch (outType) {
  case otCanvas:
    display = new CanvasDisplay();
    break;
  case otLabels:
    display = new LabelsDisplay();
    break;
  default:
    return INIT_FAILED;
  }
  if ((outType == otLabels && back &&
       !dynamic_cast<LabelsDisplay *>(display).createExt(nLines, 10, 10, bWidth, lY_Dist)) || 
       !display.create(nLines, 10, 15, bWidth, lY_Dist))
    return INIT_FAILED;
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
|エキスパート初期化関数|
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
  if (CheckPointer(display) == POINTER_DYNAMIC)
    delete display;
  Chart.Detach();
}

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
#define  concatenate(_rate)                                                         \
 ("Open: " + DoubleToString(rates[_rate].open, digits) +                           \
  "; High: " + DoubleToString(rates[_rate].high, digits) +                         \
  "; Low: " + DoubleToString(rates[_rate].low, digits) +                           \
  "; Close: " + DoubleToString(rates[_rate].close, digits) + ".")   
  

//+------------------------------------------------------------------+
//| エキスパート・ティック機能|
//+------------------------------------------------------------------+
void OnTick() {
  MqlRates rates[];
  int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);
  static datetime time = 0;
  datetime cTime;
  static bool firstRun = true;
  bool triggered = false;
  if (CopyRates(NULL, PERIOD_CURRENT, 0, 2, rates) != 2)
    return;
  display.setText(concatenate(1));
  cTime = rates[0].time;
  if (cTime != time) {
    if (!firstRun) {
      display.push();
      display.setText(concatenate(0));
    }
    time = cTime;
    firstRun = false;
    triggered = true; 
  }
  if(outType == otLabels && optimizeUpdate) {
    if (triggered)
      display.update();
    else
      dynamic_cast<LabelsDisplay *>(display).updateOne();
  }
  else
    display.update();
}
//+------------------------------------------------------------------+

    一番上の行を更新するには、使用しているクラスの setText メソッドを呼び出す必要があります。下の行にテキストを移動するには、使用する クラスのpushメソッドを呼び出します。そして、追加/更新されたテキストをディスプレイに表示するには、いずれかのクラスのupdateメソッドを使います。このメソッドに加えて LabelsDisplay クラスには updateOneメソッドがあり 、表示を2倍以上速くすることができる。このメソッドは、最上行を更新する必要がある場合にのみ呼び出される。もしpushメソッドが呼ばれたなら、その後にupdateOneの代わりにupdate メソッドを呼ぶべきである

    入力パラメーター

    • outType - 表示タイプ.
    • nLines - ディスプレイの行数.
    • optimiseUpdate - ラベルを最適化します
    • bWidth - ディスプレイの幅。
    • lY_Dist - 行間の距離です。
    • back - ラベルの背景です。

    outTypeで 、表示タイプをCanvas またはLabelsの 値から選択できます。nLinesは 、pushメソッドでスクロールした後に保存される行数を設定します。optimiseUpdate パラメータは、pushメソッドが呼び出されておらず、残りの行を更新する必要がない場合に、1行だけを経済的に更新することを可能にします(上記参照)。bWidth パラメータを使用すると、表示の幅を設定できます(背景を使用するキャンバスおよびラベルに関連します)。lY_Dist パラメータで、希望のフォントサイズを設定できます。フォントサイズはlY_Dist から fDec 係数で設定された部分を差し引いたもので、行間の距離を考慮せずに、フォントサイズではなく実際の行の高さを変更できます。back パラメータは、 Labels モードでの背景を有効にします

    このように、5つの異なるモードでチャートに情報を表示することができます。

    1. キャンバス
    2. ラベル
    3. 最適化された テキスト出力のラベル
    4. キャンバス 背景付きラベル
    5. 背景付きラベル、プラス、最適化

    outType: Labelsモードで背景を使用すると、他の追加チャート・オブジェクトを使用するのとほぼ同じ負荷がかかります。つまり、ディスプレイへのテキスト出力にかかる時間がわずかに増加します。



    MetaQuotes Ltdによってロシア語から翻訳されました。
    元のコード: https://www.mql5.com/ru/code/33898

    マルチテスター マルチテスター

    テスターでの複数回の実行/最適化。

    パン・プリズマNo.72 パン・プリズマNo.72

    4度の多項式で移動線を構成する。正弦波とその軸を外挿する。構築された線は、各バーで1つの値を削除し、再描画されない外挿値のスライディング線が構築される。

    手動ポジション追跡パネル 手動ポジション追跡パネル

    CDialogクラスをベースにしたパネル。現在のシンボルでの作業。ポジショングループの削除、利益確定、ブレークイーブンの設定

    iCHOトレンドCCIDualOnMAフィルター iCHOトレンドCCIDualOnMAフィルター

    標準インディケータiCHO(Chaikin Oscillator, CHO)とカスタムインディケータ'CCIDualOnMA'に基づく戦略