MQL4图表窗口函数详解(上)
HideTestIndicators() – 隐藏测试指标
Period() – 获取图表周期
RefreshRates() – 刷新报价数据
Symbol() – 获取当前货币对名称
WindowBarsPerChart() – 获取图表中可见K线总数
WindowExpertName() – 获取图表上运行的智能交易程序名称
WindowFind() – 搜索图表窗口中的指标
WindowFirstVisibleBar() – 获取图表中首个可见K线的索引
WindowHandle() – 获取图表窗口句柄
WindowIsVisible() – 检查图表子窗口是否可见
WindowOnDropped() – 获取鼠标释放点所在窗口索引
WindowPriceMax() – 获取窗口纵坐标价格最大值
WindowPriceMin() – 获取窗口纵坐标价格最小值
WindowPriceOnDropped() – 获取鼠标释放位置对应价格
WindowRedraw() – 强制重绘当前图表
WindowScreenShot() – 保存当前窗口图表快照
WindowTimeOnDropped() – 获取鼠标释放位置对应时间
WindowsTotal() – 获取指标窗口总数
WindowXOnDropped() – 获取鼠标释放位置的X轴像素偏移
WindowYOnDropped() – 获取鼠标释放位置的Y轴像素偏移
HideTestIndicators() – 详细说明
void HideTestIndicators(bool hide) 此函数用于为智能交易系统设置一个隐藏指标的标志。在回测完成后打开相应图表时,被标记过的指标不会显示在测试图表中。每个调用过的指标将首先用当前的隐藏标志进行标记。
需要特别注意的是,只有那些直接由智能交易系统调用的指标才能够在测试图表中绘制出来。
参数:
hide - 若需要隐藏指标则设为TRUE,否则设为FALSE。示例:
HideTestIndicators(true); MaCurrent=iMA(NULL,0,56,0,MODE_EMA,PRICE_CLOSE,0); MaPrevious=iMA(NULL,0,56,0,MODE_EMA,PRICE_CLOSE,1); HideTestIndicators(false);
Period() – 详细说明
int Period() 返回当前图表所用时间周期的分钟总数。
示例:
Print("当前周期 ", Period());
RefreshRates() – 详细说明
bool RefreshRates() 刷新预定义变量和序列数组中的行情数据。当智能交易计算时间较长时,此函数可以自动更新数据。如果数据被更新,返回TRUE,否则返回FALSE。数据未更新的唯一原因可能是它们已经是当前客户端的最新数据。
智能交易系统和脚本只处理各自历史数据的副本。在智能交易或脚本首次启动时,当前货币对的数据会被复制。每次智能交易或脚本运行时,会更新最初得到的副本。在运行过程中,可能会收到新的行情数据,而现有数据可能不再是最新的。
示例:
int ticket; while(true) { ticket=OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0,"expert comment",255,0,CLR_NONE); if(ticket<=0) { int error=GetLastError(); //---- 资金不足 if(error==134) break; //---- 等待10秒 Sleep(10000); //---- 刷新价格数据 RefreshRates(); break; } else { OrderSelect(ticket,SELECT_BY_TICKET); OrderPrint(); break; } }
Symbol() – 详细说明
string Symbol() 返回当前图表窗口的货币对名称。
示例:
int total=OrdersTotal(); for(int pos=0;posSymbol()!=Symbol()) continue; // 执行过程... }
WindowBarsPerChart() – 详细说明
int WindowBarsPerChart() 返回当前窗口图表中可见的K线(柱体)总数。
示例:
// 对可见柱体进行操作。int bars_count=WindowBarsPerChart(); int bar=WindowFirstVisibleBar(); for(int i=0; i
WindowExpertName() – 详细说明
string WindowExpertName() 根据MQL4程序的调用方式,返回智能交易、脚本、自定义指标或库的名称。
示例:
string name=WindowExpertName(); GlobalVariablesDeleteAll(name);
WindowFind() – 详细说明
int WindowFind(string name) 如果找到指定名称的指标,该函数返回包含该指标的窗口索引,否则返回-1。
参数:
name - 指标名称。示例:
int win_idx=WindowFind("MACD(12,26,9)");
WindowFirstVisibleBar() – 详细说明
int WindowFirstVisibleBar() 本函数返回当前图表窗口中第一个可见的K线(柱体)索引。需要理解价格柱的逆序编号规则:即从最后一个价格到第一个价格排列。在价格数组中,当前柱(最新)索引为0,最老的柱索引为 Bars-1。如果第一个可见柱的索引为2或更高(但小于图表可显示的柱总数),则说明图表窗口并没有被完全填满,其左侧可能留有空白区域。
示例:
// 对可见柱体进行操作 int bars_count=WindowBarsPerChart(); int bar=WindowFirstVisibleBar(); for(int i=0; i
WindowHandle() – 详细说明
int WindowHandle(string symbol, int timeframe) 返回包含特定图表数据的系统窗口句柄。如果在函数调用时图表尚未打开,则返回0。
参数:
symbol - 货币对名称。timeframe - 图表周期,可以是任意时间周期枚举值,0表示使用当前图表的周期。示例:
int win_handle=WindowHandle("USDX",PERIOD_H1); if(win_handle!=0) Print("发现带有USDX,H1的窗口。数据将会被立即复制。");
WindowIsVisible() – 详细说明
bool WindowIsVisible(int index) 如果图表子窗口可见,返回TRUE,否则返回FALSE。由于指标的可视属性可以放置于图表子窗口中,因此图表子窗口可以被隐藏。
参数:
index - 图表子窗口索引。示例:
if(WindowIsVisible(win_idx)) Print("子窗口可见");
