为什么画不出矩形

 

为什么我这个代码画不出来矩形?

//+------------------------------------------------------------------+
//|                                                        调试EA2.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
input string          InpName="Rectangle"; // 矩形名称
input int             InpDate1=40;         // 第1个点的日期,%
input int             InpPrice1=40;        // 第1个点的价格,%
input int             InpDate2=60;         // 第2个点的日期,%
input int             InpPrice2=60;        // 第2个点的价格,%
input color           InpColor=clrRed;     // 矩形颜色
input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // 矩形线的风格
input int             InpWidth=5;          // 矩形线的宽度
input bool            InpFill=true;        // 填充矩形颜色
input bool            InpBack=false;       // 背景矩形
input bool            InpSelection=true;   // 突出移动
input bool            InpHidden=false;      // 隐藏在对象列表
input long            InpZOrder=0;         // 鼠标单击优先
//+------------------------------------------------------------------+
//| EA初始化函数                                                      |
//+------------------------------------------------------------------+
int OnInit()
  {
  return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,"",0,-1);//删除当前图表所有对象
   EventKillTimer();//反初始化销毁计时器
   Comment("");//清除左上角注释
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   
   if(RectangleCreate(0,InpName,0,InpDate1,InpPrice1,InpDate2,InpPrice2,InpColor,
       InpStyle,InpWidth,InpFill,InpBack,InpSelection,InpHidden,InpZOrder))
     {
      return;
     }
      

  }

bool RectangleCreate(const long            chart_ID=0,        // 图表 ID
                     const string          name="Rectangle",  // 矩形名称
                     const int             sub_window=0,      // 子窗口指数  
                     datetime              time1=0,           // 第一个点的时间
                     double                price1=0,          // 第一个点的价格
                     datetime              time2=0,           // 第二个点的时间
                     double                price2=0,          // 第二个点的价格
                     const color           clr=clrRed,        // 矩形颜色
                     const ENUM_LINE_STYLE style=STYLE_SOLID, // 矩形线的风格
                     const int             width=1,           // 矩形线的宽度
                     const bool            fill=false,        // 填充矩形颜色
                     const bool            back=false,        // 在背景中
                     const bool            selection=true,    // 突出移动
                     const bool            hidden=false,       // 隐藏在对象列表
                     const long            z_order=0)         // 鼠标单击优先
  {
//--- 若未设置则设置定位点的坐标

//--- 重置错误的值
   ResetLastError();
//--- 通过已给的坐标创建矩形 1
   if(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE,sub_window,time1,price1,time2,price2))
      {
      Print(__FUNCTION__,
            ": failed to create a rectangle! Error code = ",GetLastError());
      return(false);
     }
//--- 设置矩形颜色
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- 设置矩形线的风格
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- 设置矩形线的宽度
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- 启用 (true) 或禁用 (false) 填充矩形的模式
   ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- 显示前景 (false) 或背景 (true)
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- 启用 (true) 或禁用 (false) 突出矩形移动的模式
//--- 当使用ObjectCreate函数创建图形对象时,对象不能
//--- 默认下突出并移动。在这个方法中,默认选择参数
//--- true 可以突出移动对象
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- 在对象列表隐藏(true) 或显示 (false) 图形对象名称
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- 设置在图表中优先接收鼠标点击事件
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- 成功执行
   return(true);
  }
//+------------------------------------------------------------------+

通过MQL5社区和服务探索MetaTrader 5的新机遇
通过MQL5社区和服务探索MetaTrader 5的新机遇
  • 2022.10.02
  • www.mql5.com
MQL5:MetaTrader 5客户端内置的交易策略语言。语言允许编写您自己的自动交易系统,技术指标,脚本和函数程序库
 
可能是日期和价格的参数不对
 
Zhi Peng Pei #:
可能是日期和价格的参数不对

那为什么

bool RectangleCreate(const long            chart_ID=0,        // 图表 ID
                     const string          name="Rectangle",  // 矩形名称
                     const int             sub_window=0,      // 子窗口指数  
                     datetime              time1=0,           // 第一个点的时间
                     double                price1=0,          // 第一个点的价格
                     datetime              time2=0,           // 第二个点的时间
                     double                price2=0,          // 第二个点的价格
                     const color           clr=clrRed,        // 矩形颜色
                     const ENUM_LINE_STYLE style=STYLE_SOLID, // 矩形线的风格
                     const int             width=1,           // 矩形线的宽度
                     const bool            fill=false,        // 填充矩形颜色
                     const bool            back=false,        // 在背景中
                     const bool            selection=true,    // 突出移动
                     const bool            hidden=false,       // 隐藏在对象列表
                     const long            z_order=0)         // 鼠标单击优先

这段代码中的time1,time2,price1,price2都必须赋值为0呢?我修改成不赋值只定义,比如datetime time1,datetime time2。调试就报错,提示time1time2没赋值。这是为什么?

 
那是初始賦值 調用自定義時可以修改的
 
Hung Wen Lin #:
那是初始賦值 調用自定義時可以修改的
可是按照语法规则,这里不赋值也没错呀,为啥我把参数的赋值去掉就报错?不符合语法规范啊!!
原因: