窗体函数
void HideTestIndicators(bool 隐藏或显示)
隐藏测试指标
(供EA调用的隐藏指标标志。在智能交易测试完成,打开了相应的图表,标出过的指标将不会出现在测试图表中。每个调用过的指标将首先用当前隐藏的标志标记。
特别要注意到,只有那些直接从智能交易调用的指标才可以在测试图表中画出。
参数:
hide - 如果需要隐藏指标为TRUE,否则为FALSE.
示例:
HideTestIndicators(true);
现Ma= iMA(NULL,0,56,0,MODE_EMA,PRICE_CLOSE,0);
前Ma= iMA(NULL,0,56,0,MODE_EMA,PRICE_CLOSE,1);
HideTestIndicators(false);
int Period()
当前窗口时框的分钟数。
示例:
Print("当前时框: ", Period());
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 错码= GetLastError();
//---- 资金不足
if(错码==134)
break;
//---- 等待 10 秒钟
Sleep(10000);
//---- 刷新价格数据
RefreshRates();
break;
}
else{
OrderSelect(ticket,SELECT_BY_TICKET);
OrderPrint();
break;
}
}
string Symbol()
现图表货币对名
示例:
for(int pos=0; pos<OrdersTotal(); pos++){
// 因为此时可能平仓或删除定单,检测选择结果!
if(OrderSelect(pos, SELECT_BY_POS)==false) continue;
if(OrderType()>OP_SELL || OrderSymbol()!=Symbol()) continue;
// 执行过程...
}
int WindowBarsPerChart()
现图中可见K线的总数。
示例:
// 对于可见柱工作。
int 窗口可见棒数= WindowBarsPerChart();
int bar= WindowFirstVisibleBar();
for(int i=0; i<bars_count; i++,bar--){
// ...
}
string WindowExpertName()
在图表上的EA、脚本、自定义指标和库的名称
示例:
string name=WindowExpertName();
GlobalVariablesDeleteAll(name);
int WindowFind(string 指标名)
找到指定指标所在的窗口索引
若未找到则返回-1。
示例:
int 指标所在窗口= WindowFind("MACD(12,26,9)");
int WindowFirstVisibleBar()
现图表上的首根可见的K线。
因为K线是逆序编号,即从最后个价格到第个价格排列。在价格数组中当前柱子是最新的,索引为0,最早以前的的K线索引是 Bars-1。(比如:如果第一个显示的K线编号为2以上或更高,但少于图表中能显示的柱子总数,这就意味着图表窗口没有完全填满,离窗口侧边还有空白。)
示例:
// 可见柱的工作
int 可见棒总数= WindowBarsPerChart();
int bar= WindowFirstVisibleBar();
for(int i=0; i<可见棒总数; i++,bar--)
{
// ...
}
int WindowHandle(string 货币对名, int 时框)
获取图表句柄
包含特定图表的系统窗口句柄。如果图表在函数调用时还没有打开,返回为0。
示例:
int win_handle= WindowHandle("USDX",PERIOD_H1);
if(win_handle!=0)
Print("己找到带有USDX,的一小时时框窗口。数组将会被立即复制。");
bool WindowIsVisible(int 子窗口索引)
图表是否可见
由于指标的可视属性可以放置在图表子窗口里,图表子窗口能被隐藏。
示例:
int win_handle= WindowHandle("USDX",PERIOD_H1);
if(win_handle!=0)
Print("发现带有USDX,H1 的窗口。数组将会被立即复制。");
int WindowOnDropped()
应用了智能交易、自定义指标和脚本的窗口索引
(只有智能交易、自定义指标或脚本被鼠标拖到窗口上,这个值才是有效的。)
注:对于那些被初始化函数调用的自定义指标(通过init()函数调用),此索引没有被定义。
返回的索引就是运行自定义指标的窗口编号(0一图表主菜单,指标子窗口从1开始编号)。在自定义指标运行期间,它可以自己创建新的子窗口,并且这个子窗口的编号和那些真正用鼠标把指标拖过去应用的窗口是不同的。
示例:
int deinit()
{
ObjectsDeleteAll(WindowOnDropped());
return(0);
}
if(WindowOnDropped()!=0){
Print("指标 '[i] MyIndicator' 必须应用到主图表窗口!");
return(false);
}
double WindowPriceMax(void 窗口索引)
获取图表窗口纵坐标刻度最高位值
返回当前图表指定的子窗口纵坐标刻度的最大值(0-图表主窗口,指标子窗口编号从1开始)。如果子窗口索引没有指定,将返回主图表窗口价格刻度的最大值。
参数:
index - 图表子窗口索引(0-图表主窗口)。
示例:
double 窗口最高价= WindowPriceMax();
double 窗口最低价= WindowPriceMin();
datetime 窗口左棒时= Time[WindowFirstVisibleBar()];
int 窗口棒范围= WindowFirstVisibleBar()-WindowBarsPerChart();
if(窗口棒范围<0)
窗口棒范围= 0;
datetime 窗口右棒时= Time[窗口棒范围]+Period()*60;
//--
ObjectCreate("Padding_rect", OBJ_RECTANGLE, 0, 窗口左棒时, 窗口最高价, 窗口右棒时, 窗口最低价);
ObjectSet("Padding_rect",OBJPROP_BACK, true);
ObjectSet("Padding_rect",OBJPROP_COLOR, Blue);
WindowRedraw();
double WindowPriceMin(void 窗口索引)
获取图表窗口纵坐标刻度最低位值
返回当前图表指定的子窗口纵坐标刻度的最小值(0-图表主窗口,指标子窗口编号从1开始)。如果子窗口索引没有指定,将返回主图表窗口价格刻度的最小值。
参数:
index - 图表子窗口索引(0-图表主窗口)。
示例:
//----------在图表窗口绘方框子----------+
double 窗口最高价= WindowPriceMax();
double 窗口最低价= WindowPriceMin();
datetime 窗口左棒时= Time[WindowFirstVisibleBar()];
int 窗口棒范围= WindowFirstVisibleBar()-WindowBarsPerChart();
if(窗口棒范围<0)
窗口棒范围= 0;
datetime 窗口右棒时= Time[窗口棒范围]+Period()*60;
//--
ObjectCreate("Padding_rect", OBJ_RECTANGLE, 0, 窗口左棒时, 窗口最高价, 窗口右棒时, 窗口最低价);
ObjectSet("Padding_rect", OBJPROP_BACK, true);
ObjectSet("Padding_rect", OBJPROP_COLOR, Blue);
WindowRedraw();
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);
}
void WindowRedraw()
强制重绘当前图表。
(在货币对属性改变之后,通常会应用本函数。)
示例:
//--设置货币对新属性
ObjectMove(object_name1, 0, Time[i], 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();
bool WindowScreenShot(string 保存名, int 屏宽度, int 屏高度, void 屏始时棒, void chart_scale, void 显值模式)
窗口图表快照
以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<TradesTotal()){
//--使用 WindowScreenShot 进行检测
if(WindowScreenShot("shots\tester"+ExtShotsCounter+".gif",640,480)==false)
lasterror= GetLastError();
else
ExtShotsCounter++;
ExtTradesCounter= TradesTotal();
}
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);
}
int WindowsTotal()
在图表中指标窗口个数(包括主图表)。
示例:
Print("窗口数 = ", WindowsTotal());
int WindowXOnDropped()
x时轴下滑像素值
在图表窗口的客户区域点,应用了智能交易或脚本,当鼠标拖动时,返回X轴上的下滑点像素值。当以映像点x轴智能交易或脚本下滑时,返回价格值。
只有在智能交易或脚本应用鼠标技术(”拖曳”)的情况下,这个值是准确的。
示例:
Print("智能交易下滑点 x=",WindowXOnDropped()," y=",WindowYOnDropped());
int WindowYOnDropped()
y价轴下滑像素值
在图表窗口的客户区域点,应用了智能交易或脚本,当鼠标拖动时,返回Y轴上的下滑点像素值。当以映像点Y轴智能交易或脚本下滑时,返回价格值。
只有在智能交易或脚本应用鼠标技术(”拖曳”)的情况下,这个值是准确的。
示例:
Print("智能交易下滑点 x=",WindowXOnDropped()," y=",WindowYOnDropped());