下列函数处理MT4窗口数据。
HideTestIndicators() – 隐藏测试指标
Period() – 获取图表时段
RefreshRates() – 刷新数据
Symbol() – 获取图表货币对名称
WindowBarsPerChart() – 获取图表中柱体总数
WindowExpertName() – 获取图表上程序名称
WindowFind() – 搜索图表上指标
WindowFirstVisibleBar() – 获取图表上第一个显示的柱体
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;pos<total;pos++)
{
// 因为此时可能平仓或删除定单,检测选择结果!
if(OrderSelect(pos, SELECT_BY_POS)==false) continue;
if(OrderType()>OP_SELL || OrderSymbol()!=Symbol()) continue;
// 执行过程...
}
WindowBarsPerChart() – 获取图表中柱体总数
int WindowBarsPerChart()
返回当前窗口图表可见柱体(K线)总数。
示例:
// 对于可见柱工作。
int bars_count=WindowBarsPerChart();
int bar=WindowFirstVisibleBar();
for(int i=0; i<bars_count; i++,bar--)
{
// ...
}
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()
本函数在当前图表窗口中返回第1个显示的柱体(K线)。必须考虑到价格柱子的逆序编号,即从最后个价格到第个价格排列。在价格数组中当前柱子是最新的,索引为0,最老的柱子索引为 Bars-1。如果第一个显示的柱子编号为2或更高,但少于图表中能显示的柱子总数,这就意味着图表窗口没有完全填满,离窗口侧边还有空白。
示例:
// 可见柱的工作
int bars_count=WindowBarsPerChart();
int bar=WindowFirstVisibleBar();
for(int i=0; i<bars_count; i++,bar--)
{
// ...
}
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 - 图表子窗口索引。
示例:
int win_handle=WindowHandle("USDX",PERIOD_H1);
if(win_handle!=0)
Print("发现带有USDX,H1 的窗口。数组将会被立即复制。");
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() 函数。
屏幕快照保存在MQL4\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<TradesTotal())
{
//---- 使用 WindowScreenShot 进行检测
if(!WindowScreenShot("shots\\tester"+ExtShotsCounter+".gif",640,480))
lasterror=GetLastError();
else ExtShotsCounter++;
ExtTradesCounter=TradesTotal();
}
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());
|