エラー、バグ、質問 - ページ 2041

 
Kirill Belousov:
サブウィンドウの番号は指定しないが、この関数は(これは入力パラメータではなく出力パラメータである) - 指定したIDのチャートのどのサブウィンドウに価格チャートがあり、そのチャートで指定したX、Y座標にどの価格と時間が対応するかを教えてくれるのだ。

これは理解できる、参照でパラメータを 渡す。しかし、疑問が残ります。なぜ、この関数は、インジケータがどのサブウィンドウの番号にインストールされているかを見て、そこからデータを取得しないのでしょうか?

 
Vitaly Muzichenko:

これは理解できる、参照でパラメータを 渡す。しかし、疑問が残ります。なぜ、この関数は、インジケータがどのサブウィンドウ番号にインストールされているかを見て、そこからデータを取らないのでしょうか?

チャート高さピクセル数
 
fxsaber:
チャート高さピクセル数

サブウインドウに複数のインジケータがあると計算が大変ですが、とにかくありがとうございました。

 
Vitaly Muzichenko:

サブウィンドウに複数のインジケータがあると計算が大変ですが、とにかくありがとうございました。

https://www.mql5.com/ru/docs/chart_operations/chartwindowfind

Документация по MQL5: Операции с графиками / ChartWindowFind
Документация по MQL5: Операции с графиками / ChartWindowFind
  • www.mql5.com
1. Функция ищет на указанном графике подокно с указанным "коротким именем" индикатора (короткое имя выводится слева вверху подокна) и в случае удачи возвращает номер подокна. Не следует путать короткое имя индикатора и имя файла, которое указывается при создании индикатора функциями iCustom() и IndicatorCreate(). Если короткое наименование...
 

はい、これらはすべて私が知っている機能です。

課題は簡単で、4番目のサブウィンドウにあるオブジェクト(赤でハイライトされている)を価格にリンクさせる必要があります。この場合、価格は-0.02で、グラフ上のY座標は34です


 
Vitaly Muzichenko:

作業は簡単で、サブウィンドウ4のオブジェクト(赤で表示)を価格にリンクさせるだけです。

#property indicator_separate_window

#property indicator_buffers 0 
#property indicator_plots 0

#define  CHART_SUBWINDOW_BORDER_SIZE 2 // Размер разделителя подокон

void OnInit()
{
  int X = 0;
  int Y = 0;

  const int SubWindow = ChartWindowFind();
  
  for (int i = 0; i < SubWindow; i++)  
    Y += (int)ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS, i) + CHART_SUBWINDOW_BORDER_SIZE;
  
  int SubWindow2;
  datetime time;
  double Price;
  
  if (ChartXYToTimePrice(0, X, Y, SubWindow2, time, Price))
    Print(SubWindow2);
}

int OnCalculate ( const int rates_total, const int, const int, const double &[] )
{ 
  return(rates_total);
}
 
fxsaber:

完成したバリアント、ありがとうございます!インジケーターに添付してみますね。

追伸:うまくいきました!本当にありがとうございます。


しかし、タンバリンで踊るのに、なぜ関数でサブウィンドウの番号を指定しなければならないのか、という疑問が残ります。

 
Vitaly Muzichenko:

サブウィンドウの番号を弄る必要があるのに、なぜ関数で指定する必要があるのでしょうか?

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

エラー、バグ、質問

キリル・ベローゾフ さん 2017.10.15 19:50

サブウィンドウの番号を指定するのではなく、関数が教えてくれます(これは入力パラメータではなく出力パラメータ です) - 指定したIDのチャートのどのサブウィンドウが価格チャートで、そのチャート上で指定したX、Y座標に対応する価格と時刻は何ですか。
 
Vitaly Muzichenko:

完成版ありがとうございます!インジケーターに添付してみますね。

追伸:うまくいきました!本当にありがとうございます。


しかし、なぜ関数でサブウィンドウの番号を指定しなければならないのか、という疑問が残ります。

このパラメータを指定して ChartGetInteger() を使用すると、ダンスを短くすることができます。

chart_window_ydistance

インジケータサブウィンドウの上境界線とメインチャートウィンドウの上境界線との間の垂直Y軸方向の距離(ピクセル単位)です。マウスイベント時、カーソル座標はメインチャートウィンドウの座標で渡され、インジケータサブウィンドウ内のグラフィックオブジェクトの座標はサブウィンドウの左上隅を基準として設定されます。

この値は、サブウインドウフレームの左上隅を相対座標とするグラフィックオブジェクトを 正しく扱うために、メインチャートの絶対座標をサブウインドウのローカル座標に変換するために必要な値です。

int r/o modifier - サブウィンドウ番号

 
Kirill Belousov:

このパラメータを指定して ChartGetInteger() を使用すると、ダンスを短くすることができます。

chart_window_ydistance

インジケータサブウィンドウの上枠とメインチャートウィンドウの上枠の間の垂直Y軸方向の距離(ピクセル単位)。マウスイベント時、カーソル座標はメインチャートウィンドウの座標で渡され、インジケータサブウィンドウ内のグラフィックオブジェクトの座標はサブウィンドウの左上隅を基準として設定されます。

この値は、サブウインドウフレームの左上隅を相対座標とするグラフィックオブジェクトを 正しく扱うために、メインチャートの絶対座標をサブウインドウのローカル座標に変換するために必要な値です。

int r/o modifier - サブウィンドウ番号

ありがとうございます!短縮して、同じ結果ですが、コードが少なくなりました。