23 MQL4图表窗口使用函数

一组用于图标窗口设定的函数。

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

22.2 Period(时间周期)

int Period(    )

返回使用 周期 (图表周期)的分钟总数。

示例:

Print(“时间周期 “, Period());

22.3 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;

}

}

22.4 Symbol(货币对)

string Symbol(    )

带有当前货币对名称返回字串符文本。

示例:

int total=OrdersTotal();

for(int pos=0;pos<total;pos++)

{

// 因为此时可能平单或删除定单,检测选择结果!

if(OrderSelect(pos, SELECT_BY_POS)==false) continue;

if(OrderType()>OP_SELL || OrderSymbol()!=Symbol()) continue;

// 执行过程…

}

22.5 WindowBarsPerChart(图标可见K线)

在图表上函数返回可见柱总数。

示例:

// 对于可见柱工作。

int bars_count=WindowBarsPerChart();

int bar=WindowFirstVisibleBar();

for(int i=0; i<bars_count; i++,bar–)

{

// …

}

22.6 WindowExpertName(EA名字)

string WindowExpertName(    )

从调用函数返回MQL4程序中独立执行智能交易,脚本,客户指标和数据库的名称。

示例:

string name=WindowExpertName();

GlobalVariablesDeleteAll(name);

22.7 WindowFind(查找窗口)

int WindowFind(    string name)

如果发现指标 名称,函数返回包含特殊指标的窗口索引,否则返回 -1。
注解: 如果当init()函数运行时,客户指标搜索到本身,则WindowFind()函数返回 -1 。

参量:

name   – 指标简称。

示例:

int win_idx=WindowFind(“MACD(12,26,9)”);

22.8 WindowFirstVisibleBar(第一个可见K柱)

int WindowFirstVisibleBar(    )

在当前图表窗口函数返回第一个可见柱。必须考虑到价格柱的逆序编号,即从最后一 价格数组中的最后一个指示为0。最老得柱被索引为柱数-1。如果第一个柱的编码为2 或少于图表中可见柱的总数,意味着图表窗口没有被完整填充。

示例:

// 可见柱的工作


int bars_count=WindowBarsPerChart();


int bar=WindowFirstVisibleBar();

for(int i=0; i<bars_count; i++,bar–)

{

// …

}

22.9 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 的窗口。数组将会被立即复制。”);

22.10 WindowIsVisible(窗口是否可见)

bool WindowIsVisible(    int index)

如果图表在子窗口中可见,返回TRUE,否则返回FALSE。 子图表窗口可以隐藏于指标的可见属性位置。

参量:

index      –      图表自窗口索引。

示例:

int maywin=WindowFind(“MyMACD”);

if(maywin>-1 && WindowIsVisible(maywin)==true)

Print(“MyMACD窗口可见”);

else

Print(” MyMACD窗口未发现或不可见”);

22.11 WindowOnDropped(被删除EA所在窗口)

int WindowOnDropped(    )

返回智能交易,客户指标和脚本的绑定窗口索引。 只有在智能交易、客户指标或脚本应用鼠标的帮助下,绑定的值是准确的。
注解:对于客户指标初始化(调用 init()函数),此索引不被定义。
返回的索引被窗口编码(0为主菜单图表,指标子窗口的开始数字为1 )。 在运行期间客户指标可以创建子窗口,子窗口的编码不同于。
参见 WindowXOnDropped(), WindowYOnDropped()

示例:

if(WindowOnDropped()!=0)

{

Print(“指标’MyIndicator’必须被主图表窗口接受!”);

return(false);


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

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

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

}

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

22.16 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      –      I第一个可见柱的屏幕映像。如果价格值设定为 0 ,当前的第一个可见柱 将被除去。如果价格值为负值, 结束图的映像将会产生。

chart_scale      –      对于屏幕映像水平的图标度。 可以在范围从0到5之间。 如果没有值或者为负值,当前图表将被应用。

chart_mode      –      图表显示模式。可以是以下价格值: ICHART_BAR (0 是柱的次序), CHART_CANDLE (1 是蜡烛柱的次序),CHART_LINE (2 是收盘价格线)。如果没有价格值或者为负值,图表会以当前模式显示。

示例:

int lasterror=0;

//—-测试者平仓或多个仓

if(IsTesting() && ExtTradesCounter<TradesTotal())

{

//—- 使WindowScreenShot 进行检测

if(!WindowScreenShot(“shots\\tester”+ExtShotsCounter+”.gif”,640,480))

lasterror=GetLastError();

else ExtShotsCounter++;

ExtTradesCounter=TradesTotal();

}

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

}

22.18 WindowsTotal(窗口数量)

int WindowsTotal(    )

返回在图表中指标窗口数(包括主图表)。

示例:

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

22.19 WindowXOnDropped

int WindowXOnDropped(    )

当以映像点X轴图表窗口的客户区域智能交易或脚本下滑时,返回价格值。 只有在智能交易、客户指标或脚本应用鼠标(“Drag’n’Drop”) 的情况下,绑定的值是准确的。
参见 WindowYOnDropped(), WindowOnDropped()

示例:

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

22.20 WindowYOnDropped

int WindowYOnDropped(    )

当以映像点Y轴图表窗口的客户区域智能交易或脚本下滑时,返回价格值。 只有在智能交易、客户指标或脚本应用鼠标(“Drag’n’Drop”)的帮助下,绑定的值是准确的。
参见 WindowXOnDropped(), WindowPriceOnDropped(), WindowOnDropped()

示例:

Print” 被获取智能交易到窗口的点x=”,WindowXOnDropped(),” y=”,WindowYOnDropped());