私たちのファンページに参加してください
- ビュー:
- 69
- 評価:
- パブリッシュ済み:
- 2025.04.04 10:53
-
このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動
このライブラリには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つの異なるモードでチャートに情報を表示することができます。
- キャンバス
- ラベル
- 最適化された テキスト出力のラベル
- キャンバス 背景付きラベル
- 背景付きラベル、プラス、最適化
outType: Labelsモードで背景を使用すると、他の追加チャート・オブジェクトを使用するのとほぼ同じ負荷がかかります。つまり、ディスプレイへのテキスト出力にかかる時間がわずかに増加します。
MetaQuotes Ltdによってロシア語から翻訳されました。
元のコード: https://www.mql5.com/ru/code/33898

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

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

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

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