mql5言語の特徴、微妙なニュアンスとテクニック - ページ 16

 
アンドレイ・ディク
バックテスト」タブの「チャートを開く」コマンドで、テスト後に開いたチャートに、EAで使用したすべてのインディケータを適切なパラメータで自動的に追加することは可能でしょうか?

まだです。

とりあえずビジュアルテストのテンプレートを保存して、クライアント端末で適用することができます

 
スラワ

まだです。

とりあえずビジュアルテストのテンプレートを保存して、クライアント端末で適用することができます。

そして、EAのOnDeinitで以下のようにすると。

ChartSaveTemplate ()


を tester.tpl という名前にして、"Open Chart" コマンドでチャートを開いたら、必要なものが得られるのでしょうか?

 
アンドレイ・ディク

そして、Expert AdvisorのOnDeinitで次のようにします。

ChartSaveTemplate ()


をtester.tplと名付けると、"Open Chart"コマンドでチャートを開いた後に、必要なものが表示されますね。

ChartSaveTemplate は、テスターエージェントのローカルファイルフォルダにテンプレートを保存します。

メインメニューからレンダラーでテンプレートを手動で保存するという意味です。

Tester.tplは、クライアントターミナルからビジュアライザーへの一方通行でのみ動作します。

 
スラワ

ChartSaveTemplate は、テンプレートをテスターエージェントのローカルファイルフォルダに保存します。

ビジュアライザーからメインメニューを通して手動でテンプレートを保存するという意味です。

Tester.tplは、クライアントターミナルからビジュアライザーへの一方通行でのみ動作します。

いや、遅いし、手間もかかるし、特にテンプレートを保存するためだけに毎回ビジュアルテストを 行うのはコストがかかりすぎることが多いので......。

インジケータでテストした後にチャートを開くことができるはずだということです。

SZY.テスターでは動作しません。

//——————————————————————————————————————————————————————————————————————————————
void OnDeinit (const int reason)
{
  if(ChartSaveTemplate(0, "testersdfsdfsdfsdf"))
    Print (__FUNCTION__ + ": Шаблон сохранён");
  else
    Print (__FUNCTION__ + ": Шаблон НЕ сохранён");
    
  EventKillTimer ();
}
//——————————————————————————————————————————————————————————————————————————————

//——————————————————————————————————————————————————————————————————————————————
double OnTester ()
{
  if(ChartSaveTemplate(0, "testersdfsdfsdfsdf"))
    Print (__FUNCTION__ + ": Шаблон сохранён");
  else
    Print (__FUNCTION__ + ": Шаблон НЕ сохранён");
  return (-DBL_MAX);
}
//——————————————————————————————————————————————————————————————————————————————

の結果です。

2017.03.07 12:22:15.422 Core 1 2017.03.06 23:58:59 OnTester: Template NOT saved.
2017.03.07 12:22:15.422 Core 1 最終残高 1129.18 USD
2017.03.07 12:22:15.422 Core 1 OnTesterの結果 -1.797693134862316e+308
2017.03.07 12:22:15.422 Core 1 2017.03.06 23:58:59 OnDeinit: Template NOT saved.

 
void OnStart()
  {
   int indic = iCustom(Symbol(), Period(), "Examples\\ATR", 7, PRICE_CLOSE, clrGreen);
   ChartIndicatorAdd(0, 1, indic);  
   Sleep(10000);
  }

この方法では、インジケーターの色を設定することはできません。

では、なぜ「バグではなく、機能だ」と言う人がいるのでしょうか。

しかし、公式の回答ですっかり納得してしまった。

MQL5プログラムからインジケーターの色やスタイルを変更する方法について考えていきます。

一方、インジケーターの色を設定するには、カラータイプの入力変数を使用します。

 
ロフィルド
void OnStart()
  {
   int indic = iCustom(Symbol(), Period(), "Examples\\ATR", 7, PRICE_CLOSE, clrGreen);
   ChartIndicatorAdd(0, 1, indic);  
   Sleep(10000);
  }

この方法では、インジケーターの色を設定することはできません。

では、なぜ「バグではなく、機能だ」と言う人がいるのでしょうか。

しかし、公式の回答は、私にとってはまったく納得のいくものです。

インジケータハンドル(計算部)から表示(描画)プロパティを設定することができないため。バグとは、ある方法で書かれたものが、別の方法で動作することです。

ここでは、別のアプローチが必要です。ChartIndicatorXXX機能グループのように、短い名前による指標へのアクセス。ChartIndicatorSetInteger(chart_id,sub_window,indicator_name,PROP_COLOR,mod,value) のような ものです。

すでに考えてはいるのですが、まだ手をつけていません。

 

なぜ、ハンドルを通して何かを設定する必要があるのでしょうか?色はPLOT_LINE_COLORプロパティを通してインジケータ自身で 設定されます。

indicator_colorN は PLOT_LINE_COLOR で変更された元の色を設定するだけである。

indicator_colorN は、インジケータが呼び出さ れ、PLOT_LINE_COLOR で設定される場合の入力と変わりません。

このようなプロパティをハンドルで変更することは一切許可してはいけません。

そして、indicator_bufferを動的に設定できるようにするときです。

 
ロフィルド

なぜ、ハンドルを通して何かを設定する必要があるのでしょうか?色はPLOT_LINE_COLORプロパティを通してインジケータ自身で 設定されます。

indicator_colorN は PLOT_LINE_COLOR で変更された元の色を設定するだけである。

indicator_colorN は、インジケータが呼び出さ れ、PLOT_LINE_COLOR で設定される場合の入力と変わりません。

このようなプロパティをハンドルで変更することは一切許可してはいけません。

そして、indicator_bufferを動的に設定できるようにするときです。

ハンドルネームには触れないでください。ハンドルは描画プロパティの設定に使えないと自分に言い聞かせています。そして、その理由を説明しました。

カスタム・インジケータの他に、組み込みのインジケータがあり、それらをチャートに追加した後、色を変更する必要があることを忘れないでください。

 

インジケータ呼び出しの 機能を拡張することだけを提案しています。

iCustom(... inputs, PRICE_CLOSE,
         [color color1, int width1, int style1]... );

iAlligator(... params, PRICE_CLOSE,
         [color color1, int width1, int style1]... );
他に追加するものはありません。
 
ロフィルド

インジケータ呼び出しの 機能を拡張することだけを提案しています。

えー、どうせ見えないのになぜ?
理由: