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());
