错误、漏洞、问题 - 页 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)行]在过时的编译器中可能导致错误。