[原创]总结几个编写ea中碰到的问题 及解决方案
总结几个编写ea中碰到的问题 及解决方案1 所有数组必须 分配索引 否则指标不予执行 因数组=0 解决 setindexbuffer(索引,数组)
2 创建物件object 必须提前清除 objectdelete()
3 如何获得 所画的横线 竖线 趋势线
//+------------------------------------------------------------------+
//| 风险控制指标.mq4 |
//| Copyright ?2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright ?2008, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
extern bool 竖线定位开关=true;
extern bool 横线定位开关=true;
extern bool 趋势线定位开关=true;
extern bool 显示开关=true;
//extern int 手数文字间距=80;
extern int 划线文字X位置=200;
extern int 划线文字Y位置=10;
extern int 划线字体大小=10;
extern color 文字颜色=Yellow;
datetime VlineTimeArray;
double HlineArrayPrice;
double TrendArrayPrice;
int VlineBar;
double HlineBar;
double 价格;
int 起始位置;
double 最高止损价格;
double 最低止损价格;
double 趋势线止损价格;
double 止损价格;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
自动获取物件();
//--------------------------
止损价格=0;
最高止损价格=0;
最低止损价格=0;
趋势线止损价格=0;
if(竖线定位开关)
{
最高止损价格=NormalizeDouble(High[VlineBar],Digits);
最低止损价格=NormalizeDouble(Low[VlineBar],Digits);
}
//----------------------------
if(横线定位开关)
{
止损价格=NormalizeDouble(HlineBar,Digits);
}
//----
if(趋势线定位开关)
{
趋势线止损价格= NormalizeDouble(TrendArrayPrice[0],Digits);
}
//----
_Show("竖线对应高点价格",High[VlineBar],Digits,划线文字X位置,划线文字Y位置+80,文字颜色);
_Show("竖线对应低点价格",Low[VlineBar],Digits,划线文字X位置,划线文字Y位置+100,文字颜色);
//-----
return(0);
}
//+------------------------------------------------------------------+
//===========================================================
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);//pric
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); //FileSize Time
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("竖线对应时间",TimeToStr(VlineTimeArray[0]),划线文字X位置,划线文字Y位置);
_Show("竖线位置",VlineBar,0,划线文字X位置,划线文字Y位置+20,文字颜色);
_Show("横线对应价格",HlineArrayPrice[0],4,划线文字X位置,划线文字Y位置+40,文字颜色);
_Show("趋势线对应最后柱价格",TrendArrayPrice[0],4,划线文字X位置,划线文字Y位置+60,文字颜色);
}
if(!显示开关)
{
// ObjectDelete("OrderNum");
ObjectDelete("竖线对应时间");
ObjectDelete("竖线位置");
ObjectDelete("横线对应价格");
ObjectDelete("趋势线对应最后柱价格");
}
}
//======================================================================================
//======================================================================================
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)
{
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);
}
//========================================================================================
发表于:2008-09-30 15:20只看该作者
2楼
很想学自动下单,能指导一下吗?
交学费也行。
韬客社区www.talkfx.co
发表于:2008-09-30 15:30只看该作者
3楼
真是专业啊。。。。。:o
金银猪头钱罐.......