//+------------------------------------------------------------------+
//| 脚本程序启动函数 |
//+------------------------------------------------------------------+
void OnStart()
{
//--- 辅助数组
double high[],low[],price1,price2;
datetime time[],time1,time2;
//--- 复制开盘价 - 最新的100柱就足够
int copied=CopyHigh(Symbol(),0,0,100,high);
if(copied<=0)
{
Print("Failed to copy the values of the High price series");
return;
}
//--- 复制收盘价 - 最新100柱就足够
copied=CopyLow(Symbol(),0,0,100,low);
if(copied<=0)
{
Print("Failed to copy the values of the Low price series");
return;
}
//--- 复制最新100柱的开盘时间
copied=CopyTime(Symbol(),0,0,100,time);
if(copied<=0)
{
Print("Failed to copy the values of the price series of Time");
return;
}
//--- 如访问时间序列一样组织访问复制的数据-反向
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
ArraySetAsSeries(time,true);
//--- 斐波纳契物件的第一定位点的坐标
price1=high[70];
time1=time[70];
//--- 斐波纳契物件的第二定位点的坐标
price2=low[50];
time2=time[50];
//--- 创建斐波纳契物件的时间
bool created=ObjectCreate(0,"Fibo",OBJ_FIBO,0,time1,price1,time2,price2);
if(created) // 如果物件成功创建
{
//--- 设置斐波纳契色阶调整颜色
ObjectSetInteger(0,"Fibo",OBJPROP_LEVELCOLOR,Blue);
//--- 另外,有多少斐波纳契色阶?
int levels=ObjectGetInteger(0,"Fibo",OBJPROP_LEVELS);
Print("Fibo levels before = ",levels);
//---输出到日志 => 水平号:水平值描述
for(int i=0;i<levels;i++)
{
Print(i,": ",ObjectGetDouble(0,"Fibo",OBJPROP_LEVELVALUE,i),
" ",ObjectGetString(0,"Fibo",OBJPROP_LEVELTEXT,i));
}
//--- 增加每单元的水平面数量
bool modified=ObjectSetInteger(0,"Fibo",OBJPROP_LEVELS,levels+1);
if(!modified) // 更改水平面数量失败
{
Print("Failed to change the number of levels of Fibo, error ",GetLastError());
}
//--- 只是通知
Print("Fibo levels after = ",ObjectGetInteger(0,"Fibo",OBJPROP_LEVELS));
//--- 为新创建的水平面设置一个值
bool added=ObjectSetDouble(0,"Fibo",OBJPROP_LEVELVALUE,levels,133);
if(added) // 为水平面管理并设置一个值
{
Print("Successfully set one more Fibo level");
//--- 还不要忘记设置水平面描述
ObjectSetString(0,"Fibo",OBJPROP_LEVELTEXT,levels,"my level");
ChartRedraw(0);
//--- 在斐波纳契物件中获得水平面数量的实际值
levels=ObjectGetInteger(0,"Fibo",OBJPROP_LEVELS);
Print("Fibo levels after adding = ",levels);
//--- 再次输出所有水平-只是为了证实
for(int i=0;i<levels;i++)
{
Print(i,":",ObjectGetDouble(0,"Fibo",OBJPROP_LEVELVALUE,i),
" ",ObjectGetString(0,"Fibo",OBJPROP_LEVELTEXT,i));
}
}
else // 如果在斐波纳契物件中增加水平面数量则会失败
{
Print("Failed to set one more Fibo level. Error ",GetLastError());
}
}
}
|