跳至内容

ChartTimePriceToXY

ChartTimePriceToXY

从表现时间/价格的图表坐标转变到X和Y轴

bool  ChartTimePriceToXY(
   long           chart_id,     // 图表 ID
   int            sub_window,   // 子窗口数量
   datetime       time,         // 图表上的时间轴
   double         price,        // 图表上的价格轴
   int&           x,            // 图表上时间的X轴
   int&           y             // 图表上价格的Y轴
   );

参数

chart_id

[in] 图表 ID。0意味着当前图表。

sub_window

[in] 图表子窗口的数量。0代表主图表窗口。

time

[in] 图表上的时间值,像素值将沿着X轴被接收。起点是窗口/子窗口的左上角。

price

[in] 图表上的价格值,像素值将沿着Y轴被接收。起点是窗口/子窗口的左上角。

x

[out] 变量,将接收X轴的时间转换。

y

[out] 变量,将接收Y轴的价格转换。

返回值

如果成功返回true,否则返回false。若要获得的错误信息,请调用GetLastError()函数。

示例:

#define   BAR_NUMBER    0  // 我们要读取价格和时间的柱的编号

//+------------------------------------------------------------------+
//| 脚本程序起始函数                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 根据 BAR_NUMBER 索引复制一个柱的数据
   MqlRates rates[]={};
   if(CopyRates(_Symbol, _Period, BAR_NUMBER, 1, rates)!=1)
     {
      PrintFormat("CopyRates() failed for bar %d. Error %d", BAR_NUMBER, GetLastError());
      return;
     }

//--- 把取得的价格和时间转换成图表的像素坐标
   int x=0, y=0;
   ResetLastError();
   if(!ChartTimePriceToXY(ChartID(), 0, rates[0].time, rates[0].close, x, y))
     {
      Print("ChartTimePriceToXY() failed. Error ", GetLastError());
      return;
     }

//--- 在日志中打印取得的结果
   PrintFormat("For bar[%d] with opening time %s and price %.*f, the chart coordinates are x: %d, y: %d", BAR_NUMBER, TimeToString(rates[0].time), _Digits, rates[0].close, x, y);

   /*
  结果:
   For bar[0] with opening time 2024.08.09 15:06 and price 1.27378, the chart coordinates are x: 784, y: 240
   */
  }

另见

ChartXYToTimePrice()