MQL4窗口数据处理函数详解:从基础到进阶

HideTestIndicators() – 用于隐藏测试指标

Period() – 获取当前图表的时间周期

RefreshRates() – 刷新行情数据

Symbol() – 获取当前图表交易的货币对名称

WindowBarsPerChart() – 获取图表窗口中可见的柱体总数

WindowExpertName() – 获取当前图表上运行的程序名称

WindowFind() – 搜索图表上的指标窗口

WindowFirstVisibleBar() – 获取图表上第一个可见的柱体索引

WindowHandle() – 获取图表窗口的句柄

WindowIsVisible() – 判断图表窗口是否可见

WindowOnDropped() – 获取鼠标拖放操作对应的窗口索引

WindowPriceMax() – 获取窗口纵坐标刻度的最大值

WindowPriceMin() – 获取窗口纵坐标刻度的最小值

WindowPriceOnDropped() – 获取鼠标拖放时对应的价格

WindowRedraw() – 强制重绘当前图表

WindowScreenShot() – 保存当前图表窗口的快照图像

WindowTimeOnDropped() – 获取鼠标拖放时对应的时间

WindowsTotal() – 获取图表中指标窗口的总数

WindowXOnDropped() – 获取鼠标拖放时在X轴上的像素位置

WindowYOnDropped() – 获取鼠标拖放时在Y轴上的像素位置

WindowOnDropped() – 获取窗口索引

int WindowOnDropped()函数返回应用了智能交易、自定义指标或脚本的窗口索引。只有通过鼠标拖放操作将相应程序应用到窗口时,此返回值才有效。

注意:对于通过初始化函数(如init()函数)调用的自定义指标,该索引值可能未被定义。

返回的索引代表运行自定义指标的窗口编号(0表示主图表窗口,指标子窗口从1开始编号)。在自定义指标运行期间,它可以自行创建新的子窗口,这些新窗口的编号与通过鼠标拖放应用指标时的窗口编号可能不同。

相关函数参考 WindowXOnDropped() 和 WindowYOnDropped()。

示例:

if(WindowOnDropped()!=0) { Print("指标'MyIndicator'必须应用到主图表窗口!"); return(false); }

WindowPriceMax() – 获取窗口纵坐标刻度最大值

double WindowPriceMax(void index)函数返回当前图表指定子窗口纵坐标刻度的最大值(0表示主图表窗口,指标子窗口从1开始编号)。如果未指定子窗口索引,则返回主图表窗口价格刻度的最大值。

相关函数参考 WindowPriceMin()、WindowFirstVisibleBar() 和 WindowBarsPerChart()。

参数:

index - 图表子窗口索引(0表示主图表窗口)。

示例:

double top=WindowPriceMax();double bottom=WindowPriceMin();datetime left=Time[WindowFirstVisibleBar()];int right_bound=WindowFirstVisibleBar()-WindowBarsPerChart();if(right_bound<0) right_bound=0;datetime right=Time[right_bound]+Period()*60;//----ObjectCreate("Padding_rect",OBJ_RECTANGLE,0,left,top,right,bottom);ObjectSet("Padding_rect",OBJPROP_BACK,true);ObjectSet("Padding_rect",OBJPROP_COLOR,Blue);WindowRedraw();

WindowPriceMin() – 获取窗口纵坐标刻度最小值

double WindowPriceMin(void index)函数返回当前图表指定子窗口纵坐标刻度的最小值(0表示主图表窗口,指标子窗口从1开始编号)。如果未指定子窗口索引,则返回主图表窗口价格刻度的最小值。

相关函数参考 WindowPriceMax()、WindowFirstVisibleBar() 和 WindowBarsPerChart()。

参数:

index - 图表子窗口索引(0表示主图表窗口)。

示例:

double top=WindowPriceMax();double bottom=WindowPriceMin();datetime left=Time[WindowFirstVisibleBar()];int right_bound=WindowFirstVisibleBar()-WindowBarsPerChart();if(right_bound<0) right_bound=0;datetime right=Time[right_bound]+Period()*60;//----ObjectCreate("Padding_rect",OBJ_RECTANGLE,0,left,top,right,bottom);ObjectSet("Padding_rect",OBJPROP_BACK,true);ObjectSet("Padding_rect",OBJPROP_COLOR,Blue);WindowRedraw();

WindowPriceOnDropped() – 获取鼠标拖放时的价格

double WindowPriceOnDropped()函数返回智能交易或脚本被拖放到图表窗口时对应的价格。只有通过鼠标拖放操作应用智能交易、自定义指标或脚本时,此值才有效。

注意:对于自定义指标,此值可能不准确。

示例:

double drop_price=WindowPriceOnDropped(); datetime drop_time=WindowTimeOnDropped(); //---- 可能未指定 (zero) if(drop_time>0) { ObjectCreate("价格下滑水平", OBJ_HLINE, 0, drop_price); ObjectCreate("下滑时间", OBJ_VLINE, 0, drop_time); }

WindowRedraw() – 重绘当前图表

void WindowRedraw()函数用于强制重画当前图表。在修改图表对象的属性后,通常需要调用此函数来更新显示。

示例:

//---- 设置货币对新属性 ObjectMove(object_name1, 0, Time[index], price); ObjectSet(object_name1, OBJPROP_ANGLE, angle*2); ObjectSet(object_name1, OBJPROP_FONTSIZE, fontsize); ObjectSet(line_name, OBJPROP_TIME2, time2); ObjectSet(line_name, OBJPROP_ANGLE, line_angle); //---- 现在重画 WindowRedraw();

WindowScreenShot() – 窗口图表快照

bool WindowScreenShot(string filename, int size_x, int size_y, void start_bar, void chart_scale, void chart_mode)函数以GIF文件格式保存当前图表图像。如果操作失败,返回FALSE;如需获取详细错误信息,可调用 GetLastError() 函数。

屏幕快照将保存在 terminal_dir/experts/files(测试模式下为 terminal_dir/tester/files)目录或其子目录中。

参数:

filename - 保存屏幕快照的文件名称。 size_x - 屏幕宽度(像素)。 size_y - 屏幕高度(像素)。 start_bar - 屏幕快照中第一个可见的柱子。如果设置为0,将捕获当前窗口的可见柱体;如果未设置或为负值,将捕获图表末尾的图像。 chart_scale - 屏幕快照图表的水平刻度。取值范围为0到5;如果未设置或设为负值,将使用当前图表的刻度。 chart_mode - 图表显示模式,可选值:CHART_BAR(柱状图)、CHART_CANDLE(K线图)、CHART_LINE(收盘价线图);如果未设置或设为负值,将采用当前模式。

示例:

int lasterror=0; //----测试模式下平仓 if(IsTesting() && ExtTradesCounter

WindowTimeOnDropped() – 获取鼠标拖放时的时间

datetime WindowTimeOnDropped()函数返回智能交易或脚本被拖放到图表窗口时对应的时间。只有通过鼠标拖放操作应用智能交易、自定义指标或脚本时,此值才有效。

注意:对于自定义指标,此值可能不准确。

示例:

double drop_price=WindowPriceOnDropped(); datetime drop_time=WindowTimeOnDropped(); //---- 可能未指定 (zero) if(drop_time>0) { ObjectCreate("Dropped price line", OBJ_HLINE, 0, drop_price); ObjectCreate("Dropped time line", OBJ_VLINE, 0, drop_time); }

WindowsTotal() – 获取指标窗口数

int WindowsTotal()函数返回图表中指标窗口的总数(包括主图表窗口)。

示例:

Print("窗口数 = ", WindowsTotal());

WindowXOnDropped() – x轴下滑像素值

int WindowXOnDropped()函数返回智能交易或脚本被拖放到图表窗口时,鼠标在X轴上的像素位置。当智能交易或脚本被拖放时,此值代表以图像点计算的X轴坐标。

只有通过鼠标拖放操作应用智能交易或脚本时,此值才准确。

相关函数参考 WindowYOnDropped() 和 WindowOnDropped()。

示例:

Print("智能交易下滑点 x=",WindowXOnDropped()," y=",WindowYOnDropped());

WindowYOnDropped() – y轴下滑像素值

int WindowYOnDropped()函数返回智能交易或脚本被拖放到图表窗口时,鼠标在Y轴上的像素位置。当智能交易或脚本被拖放时,此值代表以图像点计算的Y轴坐标。

只有通过鼠标拖放操作应用智能交易或脚本时,此值才准确。

相关函数参考 WindowXOnDropped()、WindowPriceOnDropped() 和 WindowOnDropped()。

示例:

Print("智能交易下滑点 x=",WindowXOnDropped()," y=",WindowYOnDropped());