加载中…
个人资料
yml6363
yml6363
  • 博客等级:
  • 博客积分:0
  • 博客访问:793,185
  • 关注人气:526
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

外汇MT4编程:一种获得画线数值的编写方法

(2012-09-06 22:43:45)
标签:

杂谈

分类: MT4编程

外汇MT4编程:

 

一种获得画线数值的编写方法

 

(网摘)

非本人杰作,相信会对一些朋友有用
如何获得 所画的横线 竖线 趋势线  横竖线 趋势线的价格相信用来做 半自动EA 或指标比较实用

 

 外汇MT4编程:一种获得画线数值的编写方法

 

 

//下面这个函数 可以获得 最后一根横线的价格HlineBar 竖线的位置VlineBar 趋势线最后对应的价格 TrendArrayPrice[0],
实际上是TrendArrayPrice[] VlineTimeArray[] HlineArrayPrice[] 如果设置为全局数组可以把屏幕上的横线 竖线 趋势线都获得 改变数组的下标就可以了
//===========================================================

int 自动获取物件()
{
RefreshRates();
int VlineCount=0;
int HlineCount=0;  
int TrendCount=0;   
int obj_total = ObjectsTotal();
ArrayResize(VlineTimeArray, obj_total);
ArrayResize(HlineArrayPrice, obj_total);  
ArrayResize(TrendArrayPrice, obj_total);  
VlineTimeArray[0]=NULL;  
HlineArrayPrice[0]=NULL;   
TrendArrayPrice[0]=NULL;  
string name,text;  
int i, j;
for(i = 0; i < obj_total; i++)  
{
name = ObjectName(i);  
if(ObjectType(name) == OBJ_VLINE)
{
VlineTimeArray[VlineCount]=ObjectGet(name,OBJPROP_TIME1);
VlineCount++;
}

if(ObjectType(name) == OBJ_HLINE)
{
HlineArrayPrice[HlineCount]=ObjectGet(name,OBJPROP_PRICE1);
HlineCount++;
}
if(ObjectType(name)==OBJ_TREND) //ObjectGetValueByShift
{
TrendArrayPrice[TrendCount]=ObjectGetValueByShift(name,0);
TrendCount++;
}
}//for(i = 0; i < obj_total; i++)

VlineBar=iBarShift(Symbol(),0,VlineTimeArray[0],true);
HlineBar=HlineArrayPrice[0];
if(显示开关)
{
//_Show("OrderNum",订单号,0,200,0);
_ShowStr("VlineTime",TimeToStr(VlineTimeArray[0]),划线文字X位置,划线文字Y位置);
_Show("VlinePostion",VlineBar,0,划线文字X位置,划线文字Y位置+20,文字颜色);
_Show("HlinePrice",HlineArrayPrice[0],4,划线文字X位置,划线文字Y位置+40,文字颜色);  
_Show("TrendLinePrice",TrendArrayPrice[0],4,划线文字X位置,划线文字Y位置+60,文字颜色);
 
if(!显示开关)
{
// ObjectDelete("OrderNum");
ObjectDelete("VlineTime");
ObjectDelete("VlinePostion");
ObjectDelete("HlinePrice");
ObjectDelete("TrendLinePrice");  
}

 
//======================================================================================  

4 在屏幕上显示自定义文字

_show() 可以用来 显示 整形 double 数据
_showStr() 可以用来显示字符串

可以见3 中的使用方法
//======================================================================================
void _Show(string Str,double dTemp,int dNum,int xOffset,int yOffset,color 文字颜色)
{
string Signal;
Signal=Str+": "+DoubleToStr(dTemp,dNum);
_writetext(Str,Signal,划线文字X位置+xOffset,划线文字Y位置+yOffset,文字颜色,划线字体大小);
}
//----------------------------------
void _ShowStr(string Str,string StrTemp,int xOffset,int yOffset)
{
string Signal;  
Signal=Str+": "+StrTemp;
_writetext(Str,Signal,划线文字X位置+xOffset,划线文字Y位置+yOffset,文字颜色,划线字体大小);
}

void _writetext(string Labelname,string data,int x,int y,color ColorValue,int FontSize)
 
RefreshRates();
ObjectDelete(Labelname);
ObjectCreate(Labelname, OBJ_LABEL, 0, 0, 0);   
ObjectSetText(Labelname, data, FontSize, "Arial", ColorValue);  
ObjectSet(Labelname, OBJPROP_CORNER, 0);
ObjectSet(Labelname, OBJPROP_XDISTANCE, x);  
ObjectSet(Labelname, OBJPROP_YDISTANCE, y);  
}
//========================================================================================

 


//下面这个函数 可以获得 最后一根横线的价格HlineBar 竖线的位置VlineBar 趋势线最后对应的价格 TrendArrayPrice[0],
实际上是TrendArrayPrice[] VlineTimeArray[] HlineArrayPrice[] 如果设置为全局数组可以把屏幕上的横线 竖线 趋势线都获得 改变数组的下标就可以了
//===========================================================
int 自动获取物件()
{
RefreshRates();
int VlineCount=0;
int HlineCount=0;  
int TrendCount=0;   
int obj_total = ObjectsTotal();
ArrayResize(VlineTimeArray, obj_total);
ArrayResize(HlineArrayPrice, obj_total);  
ArrayResize(TrendArrayPrice, obj_total);  
VlineTimeArray[0]=NULL;  
HlineArrayPrice[0]=NULL;   
TrendArrayPrice[0]=NULL;  
string name,text;  
int i, j;
for(i = 0; i < obj_total; i++)  
{
name = ObjectName(i);  
if(ObjectType(name) == OBJ_VLINE)
{
VlineTimeArray[VlineCount]=ObjectGet(name,OBJPROP_TIME1);
VlineCount++;
}

if(ObjectType(name) == OBJ_HLINE)
{
HlineArrayPrice[HlineCount]=ObjectGet(name,OBJPROP_PRICE1);
HlineCount++;
}
if(ObjectType(name)==OBJ_TREND) //ObjectGetValueByShift
{
TrendArrayPrice[TrendCount]=ObjectGetValueByShift(name,0);
TrendCount++;
}
}//for(i = 0; i < obj_total; i++)

VlineBar=iBarShift(Symbol(),0,VlineTimeArray[0],true);
HlineBar=HlineArrayPrice[0];
if(显示开关)
{
//_Show("OrderNum",订单号,0,200,0);
_ShowStr("VlineTime",TimeToStr(VlineTimeArray[0]),划线文字X位置,划线文字Y位置);
_Show("VlinePostion",VlineBar,0,划线文字X位置,划线文字Y位置+20,文字颜色);
_Show("HlinePrice",HlineArrayPrice[0],4,划线文字X位置,划线文字Y位置+40,文字颜色);  
_Show("TrendLinePrice",TrendArrayPrice[0],4,划线文字X位置,划线文字Y位置+60,文字颜色);
 
if(!显示开关)
{
// ObjectDelete("OrderNum");
ObjectDelete("VlineTime");
ObjectDelete("VlinePostion");
ObjectDelete("HlinePrice");
ObjectDelete("TrendLinePrice");  
}

 
//======================================================================================  

4 在屏幕上显示自定义文字

_show() 可以用来 显示 整形 double 数据
_showStr() 可以用来显示字符串

可以见3 中的使用方法
//======================================================================================
void _Show(string Str,double dTemp,int dNum,int xOffset,int yOffset,color 文字颜色)
{
string Signal;
Signal=Str+": "+DoubleToStr(dTemp,dNum);
_writetext(Str,Signal,划线文字X位置+xOffset,划线文字Y位置+yOffset,文字颜色,划线字体大小);
}
//----------------------------------
void _ShowStr(string Str,string StrTemp,int xOffset,int yOffset)
{
string Signal;  
Signal=Str+": "+StrTemp;
_writetext(Str,Signal,划线文字X位置+xOffset,划线文字Y位置+yOffset,文字颜色,划线字体大小);
}

void _writetext(string Labelname,string data,int x,int y,color ColorValue,int FontSize)
 
RefreshRates();
ObjectDelete(Labelname);
ObjectCreate(Labelname, OBJ_LABEL, 0, 0, 0);   
ObjectSetText(Labelname, data, FontSize, "Arial", ColorValue);  
ObjectSet(Labelname, OBJPROP_CORNER, 0);
ObjectSet(Labelname, OBJPROP_XDISTANCE, x);  
ObjectSet(Labelname, OBJPROP_YDISTANCE, y);  
}
//========================================================================================

 

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有