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

 

インジケータサブウィンドウで動作しないのですが、何が間違っているのでしょうか?

  datetime dt =0; 
  double price =0; 
  int window= ChartWindowFind();
  ChartXYToTimePrice(0,5,34,window,dt,price);
  PrintFormat("Window=%d  =>  time=%s  Price=%G",window,TimeToString(dt),price);

2017.10.15 05:35:36.060	i-Stp EURCHF,M30: Window=0  =>  _Time=2017.09.29 22:00  _Price=0.904348
  datetime dt =0; 
  double price =0; 
  int window= ChartWindowFind();
// ChartXYToTimePrice(0,5,34,window,dt,price);
  PrintFormat("Window=%d  =>  _Time=%s  _Price=%G",window,TimeToString(dt),price); 

2017.10.15 05:37:13.997	i-Stp EURCHF,M30: Window=1  =>  _Time=1970.01.01 00:00  _Price=0
 
Yury Kulikov:

MouseMove(x, y, key)パラメータを使用 します。カーソルとマウスボタンの位置が決定され、メインラインは 端末インターフェースの機能ではなく、mqlによって移動される、すなわち、プログラムはラインの移動ではなく、ラインに対するカーソルの位置を監視する。主線と従線の座標を同期して変化させることで、線の同時移動を実現しています。

不思議なことに、マウス座標は全く使わず、id == CHARTEVENT_MOUSE_MOVE に反応するだけです。そして、すべてがうまくいく、これは実は論理的なことなのです。

滑らかさを追求したカスタムDNDは必要ない。カスタムDNDを作るなら、kanvasでカスタムオブジェクトも作るべき。確かに、対象が常に同じなので、ラグはありえませんね。

 
Vitaly Muzichenko:

インジケータサブウィンドウで動作しないのですが、何が間違っているのでしょうか?

何が期待され、何が具体的にうまくいっていないのか。
 
Kirill Belousov:
が、何が期待され、何が具体的にうまくいっていないのか?

サブウィンドウで座標変換を 行い、価格を取得することを想定。

メインウィンドウで動作、サブウィンドウではプリントからわかるように動作しない。

また、この関数はサブウィンドウの番号を "0"、すなわちメインウィンドウの番号に置き換えます。

Преобразует координаты  X и Y графика в значения время и цена.
bool  ChartXYToTimePrice(
   long           chart_id,     // идентификатор графика
   int            x,            // координата X на графике
   int            y,            // координата Y на графике
   int&           sub_window,   // номер подокна
   datetime&      time,         // время на графике
   double&        price         // цена на графике
   );
 

コンパイルエラー

int f() { return 1; }
void OnStart() export
{
        for   ( int i = f();           ;) {} //(1) нормально
        for   (            ;int i = f();) {} //(2) 'i' - unexpected token
        while (             int i = f() ) {} //(3) 'i' - unexpected token
}
 
Vitaly Muzichenko:

サブウィンドウで座標変換を行い、価格を取得することを想定。

メインウィンドウで動作、サブウィンドウではプリントからわかるように動作しない。

また、サブウィンドウの番号を "0"、すなわちメインサブウィンドウに置き換えます。

機能ヘルプより: X、Y - 座標はメインチャートウィンドウの 左上から カウントされます。

x=5、y=34もメインウィンドウを指すので、出力ウィンドウ=0となる。

メインウィンドウの高さ分だけYを増やして、別ウィンドウで「終了」してみる

 
A100:

コンパイルエラー

は、条件チェックではなく、while(...)の中で宣言して代入してもよいのでしょうか?
 
Kirill Belousov:

関数ヘルプより:XとYは、メイングラフウィンドウの 左上隅 から参照する座標です。

x=5, y=34もメインウィンドウを指しているので、出力はwindow=0となります。

メインウィンドウの高さ分だけYを増やして、別のウィンドウで「終了」してみる

これは全く答えになっていませんし、アウトプットにもなっていません。

サブウィンドウの番号を指定しますが、それは3でも4でも構いません。では、座標はどのように指定するのでしょうか?

機能には明らかな誤りがあります。

 
Vitaly Muzichenko:

これはまったく答えになっていませんし、解決策にもなっていません。

サブウィンドウの番号を指定しますが、それは3でも4でも構いません。では、座標はどのように指定するのでしょうか。

機能には明らかな誤りがあります。

サブウィンドウの番号は指定しないが、この関数は(これは入力パラメータではなく、出力パラメータである) - 指定したIDのチャートのどのサブウィンドウが価格チャートであるかを教えてくれ、そのチャート上の指定したX、Y座標にどの価格と時間が対応するかを教えてくれる。
 
Kirill Belousov:
条件チェックではなく、while(...)の中で宣言して代入してもよいのでしょうか?

開発者に確認させる。C++はコンパイルできますが、(2)(3)は古いコンパイラではエラーになるかもしれません。