使用图表示例

本节包含图表属性工作的示例。每个属性显示一到两个完整的函数。这些函数允许设置/接收属性的值。这些函数在自定义mql5应用程序中可以被使用"as is"。

下面的截图举例说明地展示了如何改变图表属性表现的图形面板。点击下一步可以设置新的适当属性的值和查看图表窗口的变化。

chart_properties_panel

面板的源代码位于 下面

图表属性和使用它们的样本函数

  • CHART_IS_OBJECT 定义对象是否是真实图表或是 图形对象

//+------------------------------------------------------------------+
//| 定义对象是否是图表。如果它是                                          |
//| 图形对象,则结果为true。如果它是真实                                   |
//| 图表,则结果变量为false值。                                           |
//+------------------------------------------------------------------+
bool ChartIsObject(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 获得图表属性
   if(!ChartGetInteger(chart_ID,CHART_IS_OBJECT,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      //--- 返回 false
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }

 

  • CHART_BRING_TO_TOP 显示所有其他图表的顶部的图表。

//+----------------------------------------------------------------------+
//| 发送命令到程序端展示所有其他图表上面的图表。                                |
//+----------------------------------------------------------------------+
bool ChartBringToTop(const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 显示所有其他图表的顶部的图表
   if(!ChartSetInteger(chart_ID,CHART_BRING_TO_TOP,0,true))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_MOUSE_SCROLL 使用鼠标左键滚动图表的属性。

//+--------------------------------------------------------------------------+
//| 该函数定义了使用鼠标左键滚动图表是否                                          |
//| 被启用。                                                                   |
//+--------------------------------------------------------------------------+
bool ChartMouseScrollGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_MOUSE_SCROLL,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+--------------------------------------------------------------------+
//| 该函数启用/禁用使用鼠标左键滚动图表。                                    |
//+--------------------------------------------------------------------+
bool ChartMouseScrollSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_MOUSE_SCROLL,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_EVENT_MOUSE_MOVE 是发送有关移动事件和鼠标点击mql5应用程序 (CHARTEVENT_MOUSE_MOVE)的信息的属性。

//+------------------------------------------------------------------+
//| 检查有关移动事件和鼠标点击的信息                                      |
//| 被发送到图表上的所有mql5应用程序                                     |
//+------------------------------------------------------------------+
bool ChartEventMouseMoveGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_EVENT_MOUSE_MOVE,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+------------------------------------------------------------------------------+
//| 该函数启用/禁用发送信息模式,有关移动                                              |
//| 事件和在图表上鼠标点击mql5应用程序。                                              |
//+------------------------------------------------------------------------------+
bool ChartEventMouseMoveSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_EVENT_MOUSE_MOVE,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_EVENT_OBJECT_CREATE 是发送有关创建图形对象事件到mql5应用程序 (CHARTEVENT_OBJECT_CREATE)的信息的属性。

//+---------------------------------------------------------------------+
//| 检查是否有关创建图形对象事件的信息                                       |
//| 被发送到图表上的所有mql5应用程序                                        |
//+---------------------------------------------------------------------+
bool ChartEventObjectCreateGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_EVENT_OBJECT_CREATE,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+--------------------------------------------------------------------------+
//| 该函数启用/禁用发送信息模式,有关                                             |
//| 图形对象创建事件到图表上所有的mql5应用程序。                                   |
//+--------------------------------------------------------------------------+
bool ChartEventObjectCreateSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_EVENT_OBJECT_CREATE,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_EVENT_OBJECT_DELETE 是发送有关图表对象删除事件到mql5应用程序(CHARTEVENT_OBJECT_DELETE)的信息的属性。

//+---------------------------------------------------------------------+
//| 检查有关图形对象删除事件的信息                                          |
//| 被发送到图表上的所有mql5应用程序                                        |
//+---------------------------------------------------------------------+
bool ChartEventObjectDeleteGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_EVENT_OBJECT_DELETE,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+--------------------------------------------------------------------------+
//| 该函数启用/禁用发送信息模式,有关                                             |
//| 发送至所有mql5应用程序的图形对象删除事件的信息。                                |
//+--------------------------------------------------------------------------+
bool ChartEventObjectDeleteSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_EVENT_OBJECT_DELETE,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_MODE 图表类型(蜡烛图,柱形图或线型图)。

//+------------------------------------------------------------------+
//| 获得图表展示类型(蜡烛图,柱形图或                                     |
//| 线型图)。                                                          |
//+------------------------------------------------------------------+
ENUM_CHART_MODE ChartModeGet(const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long result=WRONG_VALUE;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_MODE,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((ENUM_CHART_MODE)result);
  }
//+------------------------------------------------------------------+
//| 设置图表显示类型(蜡烛图,柱形图或                                     |
//| 线型图)。                                                          |
//+------------------------------------------------------------------+
bool ChartModeSet(const long value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_MODE,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_FOREGROUND在前台显示价格图表的属性。

//+------------------------------------------------------------------+
//| 该函数定义是否价格图表显示在                                         |
//| 前台。                                                             |
//+------------------------------------------------------------------+
bool ChartForegroundGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_FOREGROUND,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+---------------------------------------------------------------------------+
//| 函数启用/禁用价格图表展示模式在                                               |
//| 前台。                                                                     |
//+---------------------------------------------------------------------------+
bool ChartForegroundSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_FOREGROUND,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_SHIFT 从右边缘移动价格图表的模式。

//+------------------------------------------------------------------------------------+
//| 函数定义是否从右边缘移动价格图表的模式                                                   |
//| 被启用。                                                                             |
//+------------------------------------------------------------------------------------+
bool ChartShiftGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_SHIFT,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+--------------------------------------------------------------------------+
//| 函数启用/禁用价格图表展示模式                                                |
//| 从右边缘开始移动。                                                          |
//+--------------------------------------------------------------------------+
bool ChartShiftSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_SHIFT,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_AUTOSCROLL 自动移动到图表右边缘的模式。

//+---------------------------------------------------------------------+
//| 函数定义了新报价进入时是否启用                                          |
//| 图表向右的自动滚动模式。                                                |
//+---------------------------------------------------------------------+
bool ChartAutoscrollGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_AUTOSCROLL,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+------------------------------------------------------------------+
//| 该函数启用/禁用新报价进入时,图表向右的                                |
//| 自动滚动模式。                                                      |
//+------------------------------------------------------------------+
bool ChartAutoscrollSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_AUTOSCROLL,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_SCALE 图表比例属性。

//+------------------------------------------------------------------+
//| 获得图表比例(从0到5)。                                              |
//+------------------------------------------------------------------+
int ChartScaleGet(const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long result=-1;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_SCALE,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((int)result);
  }
//+------------------------------------------------------------------+
//| 设置图表比例(从0到5)。                                              |
//+------------------------------------------------------------------+
bool ChartScaleSet(const long value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_SCALE,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_SCALEFIX 固定图表比例模式。

//+------------------------------------------------------------------+
//| 函数定义了是否启用固定比例模式。                                      |
//+------------------------------------------------------------------+
bool ChartScaleFixGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_SCALEFIX,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+------------------------------------------------------------------+
//| 函数启用/禁用固定比例模式。                                          |
//+------------------------------------------------------------------+
bool ChartScaleFixSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_SCALEFIX,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_SCALEFIX_11 1:1 图表比例模式。

//+------------------------------------------------------------------+
//| 该函数定义了是否启用“1:1”比例。                                      |
//+------------------------------------------------------------------+
bool ChartScaleFix11Get(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_SCALEFIX_11,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+------------------------------------------------------------------+
//| 函数启用/禁用“1:1”比例模式                                          |
//+------------------------------------------------------------------+
bool ChartScaleFix11Set(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_SCALEFIX_11,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_SCALE_PT_PER_BAR 指定每柱图表比例点数。

//+------------------------------------------------------------------------------+
//| 函数定义了是否启用指定每柱图表比例点数的                                           |
//| 模式。                                                                         |
//+------------------------------------------------------------------------------+
bool ChartScalePerBarGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_SCALE_PT_PER_BAR,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+------------------------------------------------------------------------------------+
//| 函数启用/禁用指定每柱图表比例点数的                                                     |
//| 模式。                                                                               |
//+------------------------------------------------------------------------------------+
bool ChartScalePerBarSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_SCALE_PT_PER_BAR,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_SHOW_OHLC 在左上角展示OHLC值的属性。

//+------------------------------------------------------------------+
//| 函数定义了是否启用在左上角展示OHLC值                                  |
//| 的模式。                                                           |
//+------------------------------------------------------------------+
bool ChartShowOHLCGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_SHOW_OHLC,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+--------------------------------------------------------------------------+
//| 该函数启用/禁用在图表左上角显示OHLC值                                         |
//| 的模式。                                                                   |
//+--------------------------------------------------------------------------+
bool ChartShowOHLCSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_SHOW_OHLC,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_SHOW_BID_LINE 图表水平线显示卖价值的属性。

//+-----------------------------------------------------------------------------+
//| 函数定义了在图表展示卖价值的模式是否                                             |
//| 被启用。                                                                      |
//+-----------------------------------------------------------------------------+
bool ChartShowBidLineGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_SHOW_BID_LINE,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+--------------------------------------------------------------------+
//| 该函数启用/禁用在图表上展示卖价行的模式。                                |
//+--------------------------------------------------------------------+
bool ChartShowBidLineSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_SHOW_BID_LINE,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_SHOW_ASK_LINE 图表水平线显示买价值的属性。

//+-----------------------------------------------------------------------+
//| 函数定义了是否启用在图表上展示买价值线的模式。                               |
//+-----------------------------------------------------------------------+
bool ChartShowAskLineGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_SHOW_ASK_LINE,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+-----------------------------------------------------------------------+
//| 该函数启用/禁用在图表上显示买价行的模式。                                   |
//+-----------------------------------------------------------------------+
bool ChartShowAskLineSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_SHOW_ASK_LINE,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_SHOW_LAST_LINE图表水平线显示最近值的属性。

//+---------------------------------------------------------------------------------+
//| 该函数定义了是否启用显示最近执行的交易的价格行模式。                                    |
//+---------------------------------------------------------------------------------+
bool ChartShowLastLineGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_SHOW_LAST_LINE,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+--------------------------------------------------------------------------------------+
//| 函数启用/禁用显示最近执行的交易的价格行模式。                                               |
//+--------------------------------------------------------------------------------------+
bool ChartShowLastLineSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_SHOW_LAST_LINE,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_SHOW_PERIOD_SEP在相邻周期间展示垂直分隔符的属性。

//+------------------------------------------------------------------+
//| 该函数定义了是否启用在相邻周期间                                      |
//| 展示垂直分隔符的模式。                                               |
//+------------------------------------------------------------------+
bool ChartShowPeriodSeparatorGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_SHOW_PERIOD_SEP,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+------------------------------------------------------------------+
//|该函数启用/禁用在相邻周期间                                           |
//| 展示垂直分隔符的模式。                                               |
//+------------------------------------------------------------------+
bool ChartShowPeriodSepapatorSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_SHOW_PERIOD_SEP,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_SHOW_GRID 展示图表网格的属性。

//+------------------------------------------------------------------+
//| 该函数定义了是否展示图表网格。                                        |
//+------------------------------------------------------------------+
bool ChartShowGridGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_SHOW_GRID,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+------------------------------------------------------------------+
//| 该函数启用/禁用图表网格。                                            |
//+------------------------------------------------------------------+
bool ChartShowGridSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_SHOW_GRID,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_SHOW_VOLUMES 在图表上展示交易量的属性。

//+------------------------------------------------------------------------+
//| 该函数定义了是否在图表上展示交易量(不                                       |
//| 显示,显示订单交易量,显示实际交易量)。                                       |
//+------------------------------------------------------------------------+
ENUM_CHART_VOLUME_MODE ChartShowVolumesGet(const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long result=WRONG_VALUE;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_SHOW_VOLUMES,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((ENUM_CHART_VOLUME_MODE)result);
  }
//+------------------------------------------------------------------+
//| 该函数设置在图表上显示交易量的模式。                                   |
//+------------------------------------------------------------------+
bool ChartShowVolumesSet(const long value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_SHOW_VOLUMES,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_SHOW_OBJECT_DESCR 图形对象弹出描述的属性。

//+-------------------------------------------------------------------+
//| 函数定义了悬停鼠标时是否显示                                          |
//| 图形对象的弹出描述 。                                                 |
//+-------------------------------------------------------------------+
bool ChartShowObjectDescriptionGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_SHOW_OBJECT_DESCR,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+--------------------------------------------------------------------------+
//| 该函数启用/禁用鼠标悬停时                                                    |
//| 显示图形对象弹出描述的模式。                                                  |
//+--------------------------------------------------------------------------+
bool ChartShowObjectDescriptionSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_SHOW_OBJECT_DESCR,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_VISIBLE_BARS 定义图表上可用于展示的柱的数量。

//+-----------------------------------------------------------------------+
//| 函数接收图表窗口中                                                      |
//| 显示的柱数(可见)。                                                       |
//+-----------------------------------------------------------------------+
int ChartVisibleBars(const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long result=-1;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_VISIBLE_BARS,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((int)result);
  }

 

  • CHART_WINDOWS_TOTAL 定义包括指标子窗口的图表窗口总数。

//+--------------------------------------------------------------------------+
//| 该函数获得所有图表窗口的总数包括指标                                          |
//| 子窗口。                                                                   |
//+--------------------------------------------------------------------------+
int ChartWindowsTotal(const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long result=-1;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_WINDOWS_TOTAL,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((int)result);
  }

 

  • CHART_WINDOW_IS_VISIBLE 定义子窗口的可视性。

//+------------------------------------------------------------------+
//| 该函数定义了当前图表窗口或子窗口是否                                  |
//| 可见。                                                            |
//+------------------------------------------------------------------+
bool ChartWindowsIsVisible(bool &result,const long chart_ID=0,const int sub_window=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_WINDOW_IS_VISIBLE,sub_window,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }

 

  • CHART_WINDOW_HANDLE 返回图表句柄。

//+------------------------------------------------------------------+
//| 函数获取图表句柄                                                   |
//+------------------------------------------------------------------+
int ChartWindowsHandle(const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long result=-1;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_WINDOW_HANDLE,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((int)result);
  }

 

  • CHART_WINDOW_YDISTANCE 定义指标子窗口上边框和图表主窗口上边框之间的像素距离。

//+------------------------------------------------------------------+
//| 该函数获得子窗口上边框和                                            |
//| 图表主窗口上边框之间的像素距离。                                      |
//+------------------------------------------------------------------+
int ChartWindowsYDistance(const long chart_ID=0,const int sub_window=0)
  {
//--- 准备变量获得属性值
   long result=-1;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_WINDOW_YDISTANCE,sub_window,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((int)result);
  }

 

  • CHART_FIRST_VISIBLE_BAR 返回图表上最先可见的柱的数量(与 时间序列相关的柱)。

//+----------------------------------------------------------------------------+
//| 该函数接收图表上最先可见的柱数。                                                |
//| 像在时间序列一样执行索引,最近的柱指数更小。                                      |
//+----------------------------------------------------------------------------+
int ChartFirstVisibleBar(const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long result=-1;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_FIRST_VISIBLE_BAR,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((int)result);
  }

 

  • CHART_WIDTH_IN_BARS 返回图表柱形宽度。

//+------------------------------------------------------------------+
//| 函数接收图表柱形宽度。                                               |
//+------------------------------------------------------------------+
int ChartWidthInBars(const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long result=-1;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_WIDTH_IN_BARS,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((int)result);
  }

 

  • CHART_WIDTH_IN_PIXELS 返回图表像素宽度。

//+------------------------------------------------------------------+
//| 函数接收图表像素宽度。                                               |
//+------------------------------------------------------------------+
int ChartWidthInPixels(const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long result=-1;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_WIDTH_IN_PIXELS,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((int)result);
  }

 

  • CHART_HEIGHT_IN_PIXELS 图表像素高度的属性。

//+------------------------------------------------------------------+
//| 该函数接收图表的像素高度值。                                         |
//+------------------------------------------------------------------+
int ChartHeightInPixelsGet(const long chart_ID=0,const int sub_window=0)
  {
//--- 准备变量获得属性值
   long result=-1;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_HEIGHT_IN_PIXELS,sub_window,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((int)result);
  }
//+------------------------------------------------------------------+
//| 该函数设置了图表的像素高度值。                                        |
//+------------------------------------------------------------------+
bool ChartHeightInPixelsSet(const int value,const long chart_ID=0,const int sub_window=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_HEIGHT_IN_PIXELS,sub_window,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_COLOR_BACKGROUND - 图表背景色。

//+------------------------------------------------------------------+
//| 该函数接收图表背景色。                                               |
//+------------------------------------------------------------------+
color ChartBackColorGet(const long chart_ID=0)
  {
//--- 准备变量接收颜色
   long result=clrNONE;
//--- 重置错误的值
   ResetLastError();
//--- 接收图表背景色
   if(!ChartGetInteger(chart_ID,CHART_COLOR_BACKGROUND,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((color)result);
  }
//+------------------------------------------------------------------+
//| 该函数设置图表背景色。                                               |
//+------------------------------------------------------------------+
bool ChartBackColorSet(const color clr,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置图表背景色
   if(!ChartSetInteger(chart_ID,CHART_COLOR_BACKGROUND,clr))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_COLOR_FOREGROUND坐标轴,比例尺和OHLC线的颜色。

//+------------------------------------------------------------------+
//| 该函数接收坐标轴,比例尺和OHLC线的颜色。                               |
//+------------------------------------------------------------------+
color ChartForeColorGet(const long chart_ID=0)
  {
//--- 准备变量接收颜色
   long result=clrNONE;
//--- 重置错误的值
   ResetLastError();
//--- 接收坐标轴,比例尺和OHLC线的颜色
   if(!ChartGetInteger(chart_ID,CHART_COLOR_FOREGROUND,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((color)result);
  }
//+------------------------------------------------------------------+
//| 该函数设置坐标轴,比例尺和OHLC线的颜色。                               |
//+------------------------------------------------------------------+
bool ChartForeColorSet(const color clr,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置坐标轴,比例尺和OHLC线的颜色
   if(!ChartSetInteger(chart_ID,CHART_COLOR_FOREGROUND,clr))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_COLOR_GRID 图表网格颜色。

//+------------------------------------------------------------------+
//| 这个函数接收图表网格颜色。                                           |
//+------------------------------------------------------------------+
color ChartGridColorGet(const long chart_ID=0)
  {
//--- 准备变量接收颜色
   long result=clrNONE;
//--- 重置错误的值
   ResetLastError();
//---接收图表网格颜色
   if(!ChartGetInteger(chart_ID,CHART_COLOR_GRID,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((color)result);
  }
//+------------------------------------------------------------------+
//| 函数设置图表网格颜色。                                               |
//+------------------------------------------------------------------+
bool ChartGridColorSet(const color clr,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置图表网格颜色
   if(!ChartSetInteger(chart_ID,CHART_COLOR_GRID,clr))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_COLOR_VOLUME - 交易量和持仓水平的颜色。

//+------------------------------------------------------------------+
//| 该函数接收交易量和市场入场水平                                       |
//| 的颜色。                                                           |
//+------------------------------------------------------------------+
color ChartVolumeColorGet(const long chart_ID=0)
  {
//--- 准备变量接收颜色
   long result=clrNONE;
//--- 重置错误的值
   ResetLastError();
//--- 接收交易量和市场入场水平的颜色
   if(!ChartGetInteger(chart_ID,CHART_COLOR_VOLUME,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((color)result);
  }
//+------------------------------------------------------------------+
//| 该函数设置交易量和市场入场水平                                       |
//| 的颜色。                                                           |
//+------------------------------------------------------------------+
bool ChartVolumeColorSet(const color clr,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置交易量和市场入场水平的颜色
   if(!ChartSetInteger(chart_ID,CHART_COLOR_VOLUME,clr))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_COLOR_CHART_UP上柱,柱影和牛市蜡烛图主体边缘的颜色。

//+------------------------------------------------------------------+
//| 这个函数接收下柱,柱影和熊市蜡烛图主体边缘                              |
//| 的颜色。                                                           |
//+------------------------------------------------------------------+
color ChartUpColorGet(const long chart_ID=0)
  {
//--- 准备变量接收颜色
   long result=clrNONE;
//--- 重置错误的值
   ResetLastError();
//--- 接收上柱,柱影和牛市蜡烛图主体边缘的颜色
   if(!ChartGetInteger(chart_ID,CHART_COLOR_CHART_UP,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((color)result);
  }
//+------------------------------------------------------------------+
//| 这个函数设置上柱,柱影和牛市蜡烛图主体边缘                              |
//| 的颜色。                                                           |
//+------------------------------------------------------------------+
bool ChartUpColorSet(const color clr,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置上柱,柱影和牛市蜡烛图主体边缘的颜色
   if(!ChartSetInteger(chart_ID,CHART_COLOR_CHART_UP,clr))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_COLOR_CHART_DOWN 下柱,柱影和熊市蜡烛图主体边缘的颜色。

//+------------------------------------------------------------------+
//| 这个函数接收下柱,柱影和熊市蜡烛图主体边缘                              |
//| 的颜色。                                                           |
//+------------------------------------------------------------------+
color ChartDownColorGet(const long chart_ID=0)
  {
//--- 准备变量接收颜色
   long result=clrNONE;
//--- 重置错误的值
   ResetLastError();
//--- 接收下柱,柱影和熊市蜡烛图主体边缘的颜色
   if(!ChartGetInteger(chart_ID,CHART_COLOR_CHART_DOWN,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((color)result);
  }
//+------------------------------------------------------------------+
//| 这个函数设置下柱,柱影和熊市蜡烛图主体边缘                              |
//| 的颜色。                                                           |
//+------------------------------------------------------------------+
bool ChartDownColorSet(const color clr,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置下柱,柱影和熊市蜡烛图主体边缘的颜色
   if(!ChartSetInteger(chart_ID,CHART_COLOR_CHART_DOWN,clr))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_COLOR_CHART_LINE 图表线和Doji蜡烛图的颜色。

//+------------------------------------------------------------------------+
//| 该函数接收图表线和Doji蜡烛图的颜色。                                        |
//+------------------------------------------------------------------------+
color ChartLineColorGet(const long chart_ID=0)
  {
//--- 准备变量接收颜色
   long result=clrNONE;
//--- 重置错误的值
   ResetLastError();
//--- 接收图表线和Doji蜡烛图的颜色
   if(!ChartGetInteger(chart_ID,CHART_COLOR_CHART_LINE,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((color)result);
  }
//+------------------------------------------------------------------+
//| 该函数设置图表线和Doji蜡烛图的颜色。                                  |
//+------------------------------------------------------------------+
bool ChartLineColorSet(const color clr,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置图表线和Doji蜡烛图的颜色
   if(!ChartSetInteger(chart_ID,CHART_COLOR_CHART_LINE,clr))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_COLOR_CANDLE_BULL 牛市蜡烛图主体的颜色。

//+------------------------------------------------------------------+
//| 该函数接收牛市蜡烛图主体的颜色。                                      |
//+------------------------------------------------------------------+
color ChartBullColorGet(const long chart_ID=0)
  {
//--- 准备变量接收颜色
   long result=clrNONE;
//--- 重置错误的值
   ResetLastError();
//--- 接收牛市蜡烛图主体的颜色
   if(!ChartGetInteger(chart_ID,CHART_COLOR_CANDLE_BULL,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((color)result);
  }
//+------------------------------------------------------------------+
//| 该函数设置牛市蜡烛图主体的颜色。                                      |
//+------------------------------------------------------------------+
bool ChartBullColorSet(const color clr,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置牛市蜡烛图主体的颜色。
   if(!ChartSetInteger(chart_ID,CHART_COLOR_CANDLE_BULL,clr))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_COLOR_CANDLE_BEAR 熊市蜡烛图主体的颜色。

//+------------------------------------------------------------------+
//| 该函数接收熊市蜡烛图主体的颜色。                                      |
//+------------------------------------------------------------------+
color ChartBearColorGet(const long chart_ID=0)
  {
//--- 准备变量接收颜色
   long result=clrNONE;
//--- 重置错误的值
   ResetLastError();
//--- 接收熊市蜡烛图主体的颜色
   if(!ChartGetInteger(chart_ID,CHART_COLOR_CANDLE_BEAR,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((color)result);
  }
//+------------------------------------------------------------------+
//| 该函数设置熊市蜡烛图主体的颜色。                                      |
//+------------------------------------------------------------------+
bool ChartBearColorSet(const color clr,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置熊市蜡烛图主体的颜色
   if(!ChartSetInteger(chart_ID,CHART_COLOR_CANDLE_BEAR,clr))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_COLOR_BID 卖价线的颜色。

//+------------------------------------------------------------------+
//| 函数接收卖价线的颜色。                                               |
//+------------------------------------------------------------------+
color ChartBidColorGet(const long chart_ID=0)
  {
//--- 准备变量接收颜色
   long result=clrNONE;
//--- 重置错误的值
   ResetLastError();
//--- 接收卖价线的颜色
   if(!ChartGetInteger(chart_ID,CHART_COLOR_BID,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((color)result);
  }
//+------------------------------------------------------------------+
//| 该函数设置卖价线的颜色。                                             |
//+------------------------------------------------------------------+
bool ChartBidColorSet(const color clr,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置卖价线的颜色
   if(!ChartSetInteger(chart_ID,CHART_COLOR_BID,clr))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_COLOR_ASK 买价线的颜色。

//+------------------------------------------------------------------+
//| 该函数接收买价线的颜色。                                             |
//+------------------------------------------------------------------+
color ChartAskColorGet(const long chart_ID=0)
  {
//--- 准备变量接收颜色
   long result=clrNONE;
//--- 重置错误的值
   ResetLastError();
//--- 接收买价线的颜色
   if(!ChartGetInteger(chart_ID,CHART_COLOR_ASK,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((color)result);
  }
//+------------------------------------------------------------------+
//| 该函数设置买价线的颜色。                                             |
//+------------------------------------------------------------------+
bool ChartAskColorSet(const color clr,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置买价线的颜色
   if(!ChartSetInteger(chart_ID,CHART_COLOR_ASK,clr))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_COLOR_LAST 最近交易的价格线的颜色(收盘价)。

//+----------------------------------------------------------------------+
//| 这个函数接收最近交易的价格线的颜色。                                       |
//+----------------------------------------------------------------------+
color ChartLastColorGet(const long chart_ID=0)
  {
//--- 准备变量接收颜色
   long result=clrNONE;
//--- 重置错误的值
   ResetLastError();
//--- 接收最近交易的价格线的颜色(收盘价)
   if(!ChartGetInteger(chart_ID,CHART_COLOR_LAST,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((color)result);
  }
//+------------------------------------------------------------------+
//| 这个函数设置最近交易的价格线                                         |
//| 的颜色。                                                           |
//+------------------------------------------------------------------+
bool ChartLastColorSet(const color clr,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置最近交易的价格线的颜色(收盘价)
   if(!ChartSetInteger(chart_ID,CHART_COLOR_LAST,clr))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_COLOR_STOP_LEVEL 止损订单水平颜色(止损和获利)。

//+--------------------------------------------------------------------+
//| 这个函数接收止损和获利水平的颜色。                                      |
//+--------------------------------------------------------------------+
color ChartStopLevelColorGet(const long chart_ID=0)
  {
//--- 准备变量接收颜色
   long result=clrNONE;
//--- 重置错误的值
   ResetLastError();
//--- 接收止损订单水平的颜色(止损和获利)
   if(!ChartGetInteger(chart_ID,CHART_COLOR_STOP_LEVEL,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return((color)result);
  }
//+------------------------------------------------------------------+
//| 该函数设置止损和获利水平的颜色。                                      |
//+------------------------------------------------------------------+
bool ChartStopLevelColorSet(const color clr,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置止损订单水平的颜色(止损和获利)
   if(!ChartSetInteger(chart_ID,CHART_COLOR_STOP_LEVEL,clr))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_SHOW_TRADE_LEVELS 在图表上显示交易水平的属性(持仓水平,止损,获利和挂单水平)。

//+---------------------------------------------------------------------+
//| 这个函数定义是否在图表上显示交易水平。                                    |
//+---------------------------------------------------------------------+
bool ChartShowTradeLevelsGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_SHOW_TRADE_LEVELS,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+------------------------------------------------------------------+
//| 该函数启用/禁用交易水平显示模式。                                     |
//+------------------------------------------------------------------+
bool ChartShowTradeLevelsSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_SHOW_TRADE_LEVELS,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_DRAG_TRADE_LEVELS 启用使用鼠标在图表上拖拽交易水平的能力的属性

//+---------------------------------------------------------------------------+
//| 这个函数定义是否允许使用鼠标在图表上拖拽交易                                    |
//| 水平。                                                                     |
//+---------------------------------------------------------------------------+
bool ChartDragTradeLevelsGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_DRAG_TRADE_LEVELS,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+------------------------------------------------------------------+
//| 该函数启用/禁用使用鼠标在图表上拖拽交易水平                            |
//| 的模式。                                                           |
//+------------------------------------------------------------------+
bool ChartDragTradeLevelsSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_DRAG_TRADE_LEVELS,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_SHOW_DATE_SCALE 在图表上显示时间比例的属性。

//+--------------------------------------------------------------------+
//| 该函数定义是否在图表上显示时间比例。                                     |
//+--------------------------------------------------------------------+
bool ChartShowDateScaleGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_SHOW_DATE_SCALE,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+-----------------------------------------------------------------------------+
//| 该函数启用/禁用在图表上显示时间比例的模式。                                        |
//+-----------------------------------------------------------------------------+
bool ChartShowDateScaleSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_SHOW_DATE_SCALE,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_SHOW_PRICE_SCALE 在图表上显示价格比例的属性。

//+--------------------------------------------------------------------+
//| 该函数定义是否在图表上显示价格比例。                                     |
//+--------------------------------------------------------------------+
bool ChartShowPriceScaleGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量获得属性值
   long value;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_SHOW_PRICE_SCALE,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+----------------------------------------------------------------------------+
//| 该函数启用/禁用在图表上显示价格比例的模式。                                      |
//+----------------------------------------------------------------------------+
bool ChartShowPriceScaleSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_SHOW_PRICE_SCALE,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_SHOW_ONE_CLICK 在图表上显示"一键交易"的属性。

//+------------------------------------------------------------------+
//| 检查"单击交易" 面板是否显示在图表上                                   |
//+------------------------------------------------------------------+
bool ChartShowOneClickPanelGet(bool &result,const long chart_ID=0)
  {
//--- 准备变量以获得属性值
   long value;
//--- 重置错误值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_SHOW_ONE_CLICK,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在内存中存储图表属性的值
   result=value;
//--- 成功执行
   return(true);
  }
//+------------------------------------------------------------------+
//| 启用/禁用显示"单击交易" 面板                                        |
//| 在图表上                                                          |
//+------------------------------------------------------------------+
bool ChartShowOneClickPanelSet(const bool value,const long chart_ID=0)
  {
//--- 重置错误值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetInteger(chart_ID,CHART_SHOW_ONE_CLICK,0,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_SHIFT_SIZE 从右侧边界开始的零柱的百分比值转换大小。

//+---------------------------------------------------------------------------+
//| 该函数接收从图表右侧边界开始的零柱的                                           |
//| 百分比值 转换大小(从10%直到50%)。                                             |
//+---------------------------------------------------------------------------+
double ChartShiftSizeGet(const long chart_ID=0)
  {
//--- 准备变量获得结果
   double result=EMPTY_VALUE;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetDouble(chart_ID,CHART_SHIFT_SIZE,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return(result);
  }
//+--------------------------------------------------------------------------------------+
//| 这个函数设置从图表右侧边界开始的零柱的                                                    |
//| 百分比值转换大小(从10%直到50%)。要启用该转换                                               |
//| 模式,CHART_SHIFT 属性值应该设置为                                                       |
//| true。                                                                                |
//+--------------------------------------------------------------------------------------+
bool ChartShiftSizeSet(const double value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetDouble(chart_ID,CHART_SHIFT_SIZE,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_FIXED_POSITION 图表从左边界以百分比值固定位置。

//+--------------------------------------------------------------------------+
//| 这个函数接收从左边界以百分比值                                               |
//| 固定位置的图表的位置。                                                       |
//+--------------------------------------------------------------------------+
double ChartFixedPositionGet(const long chart_ID=0)
  {
//--- 准备变量获得结果
   double result=EMPTY_VALUE;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetDouble(chart_ID,CHART_FIXED_POSITION,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return(result);
  }
//+---------------------------------------------------------------------+
//| 这个函数设置从左边界以百分比值                                          |
//| 固定位置的图表的位置。若要查看固定位置                                    |
//| 图表的位置, CHART_AUTOSCROLL                                         |
//| 属性值应该设置为false。                                                |
//+---------------------------------------------------------------------+
bool ChartFixedPositionSet(const double value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetDouble(chart_ID,CHART_FIXED_POSITION,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_FIXED_MAX 表格的固定最大值属性。

//+------------------------------------------------------------------+
//| 这个函数接收图表的固定最大值。                                        |
//+------------------------------------------------------------------+
double ChartFixedMaxGet(const long chart_ID=0)
  {
//--- 准备变量获得结果
   double result=EMPTY_VALUE;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetDouble(chart_ID,CHART_FIXED_MAX,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return(result);
  }
//+------------------------------------------------------------------+
//| 这个函数设置图表的固定最大值。                                        |
//| 要改变属性的值,                                                    |
//| CHART_SCALEFIX 属性值应该提前设置为                                 |
//| true。                                                            |
//+------------------------------------------------------------------+
bool ChartFixedMaxSet(const double value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetDouble(chart_ID,CHART_FIXED_MAX,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_FIXED_MIN 图表固定最小值的属性。

//+------------------------------------------------------------------+
//| 这个函数接收图表的固定最小值。                                        |
//+------------------------------------------------------------------+
double ChartFixedMinGet(const long chart_ID=0)
  {
//--- 准备变量获得结果
   double result=EMPTY_VALUE;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetDouble(chart_ID,CHART_FIXED_MIN,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return(result);
  }
//+------------------------------------------------------------------+
//| 这个函数设置图表的固定最小值。                                        |
//| 要改变属性的值,                                                    |
//| CHART_SCALEFIX 属性值应该提前设置为                                 |
//| true。                                                            |
//+------------------------------------------------------------------+
bool ChartFixedMinSet(const double value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetDouble(chart_ID,CHART_FIXED_MIN,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_POINTS_PER_BAR 每柱比例尺的点数值。

//+---------------------------------------------------------------------------+
//| 这个函数接收每柱图表比例尺的点数值。                                            |
//+---------------------------------------------------------------------------+
double ChartPointsPerBarGet(const long chart_ID=0)
  {
//--- 准备变量获得结果
   double result=EMPTY_VALUE;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetDouble(chart_ID,CHART_POINTS_PER_BAR,0,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return(result);
  }
//+----------------------------------------------------------------------+
//| 这个函数设置每柱的图表比例尺的点数值。                                     |
//| 要查看这个属性值的变化结果,                                              |
//| 这个                                                                  |
//| CHART_SCALE_PT_PER_BAR 属性值应该提前设置为true。                        |
//+----------------------------------------------------------------------+
bool ChartPointsPerBarSet(const double value,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetDouble(chart_ID,CHART_POINTS_PER_BAR,value))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_PRICE_MIN 返回图表的最小值。

//+---------------------------------------------------------------------------------+
//| 这个函数接收主窗口或子窗口的图表最小值。                                              |
//+---------------------------------------------------------------------------------+
double ChartPriceMin(const long chart_ID=0,const int sub_window=0)
  {
//--- 准备变量获得结果
   double result=EMPTY_VALUE;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetDouble(chart_ID,CHART_PRICE_MIN,sub_window,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return(result);
  }

 

  • CHART_PRICE_MAX 返回图表的最大值。

//+--------------------------------------------------------------------------------+
//| 这个函数接收主窗口或子窗口的图表最大值。                                             |
//+--------------------------------------------------------------------------------+
double ChartPriceMax(const long chart_ID=0,const int sub_window=0)
  {
//--- 准备变量获得结果
   double result=EMPTY_VALUE;
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetDouble(chart_ID,CHART_PRICE_MAX,sub_window,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性值
   return(result);
  }

 

  • CHART_COMMENT 图表评论。

//+----------------------------------------------------------------------+
//| 这个函数接收图表左上角的评论。                                            |
//+----------------------------------------------------------------------+
bool ChartCommentGet(string &result,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetString(chart_ID,CHART_COMMENT,result))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }
//+------------------------------------------------------------------+
//| 这个函数设置图表左上角的评论。                                        |
//+------------------------------------------------------------------+
bool ChartCommentSet(const string str,const long chart_ID=0)
  {
//--- 重置错误的值
   ResetLastError();
//--- 设置属性值
   if(!ChartSetString(chart_ID,CHART_COMMENT,str))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 成功执行
   return(true);
  }

 

  • CHART_IS_MAXIMIZED - 图表窗口最大化。

//+------------------------------------------------------------------+
//| 定义如果当前图表窗口最大化                                           |
//+------------------------------------------------------------------+
bool ChartWindowsIsMaximized(bool &result,const long chart_ID=0)
  {
//--- 准备接收属性值的变量
   long value;
//--- 重置错误值
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_IS_MAXIMIZED))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在变量中存储图表属性值
   result=value;
//--- 成功执行
   return(true);
  }
  

 

  • CHART_IS_MINIMIZED 图表窗口最小化

//+------------------------------------------------------------------+
//| 定义如果当前图表窗口最小化                                           |
//+------------------------------------------------------------------+
bool ChartWindowsIsMinimized(bool &result,const long chart_ID=0)
  {
//--- 准备接收属性值的变量
   long value;
//--- 重置错误值 
   ResetLastError();
//--- 接收属性值
   if(!ChartGetInteger(chart_ID,CHART_IS_MINIMIZED))
     {
      //--- 在EA日志显示错误信息
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- 在变量中存储图表属性值
   result=value;
//--- 成功执行
   return(true);
  }
  

 

图表属性面板

//--- 连接控制元素的程序库
#include <ChartObjects\ChartObjectsTxtControls.mqh>
//--- 预定义常量
#define X_PROPERTY_NAME_1    10  //第一列属性名的x坐标
#define X_PROPERTY_VALUE_1   225 //第一列属性值的 x 坐标
#define X_PROPERTY_NAME_2    345 // 第二和第三列的属性名的x坐标
#define X_PROPERTY_VALUE_2   550 // 第二和第三列的属性值的x坐标
#define X_BUTTON_1           285 // 第一列按钮的x坐标
#define X_BUTTON_2           700 //第二列按钮的 x 坐标
#define Y_PROPERTY_1         30  // 第一和第二列开始的y 坐标
#define Y_PROPERTY_2         286 // 第三列开始的y坐标
#define Y_DISTANCE           16  // y 轴的行间距
#define LAST_PROPERTY_NUMBER 111 // 最近图形的属性号
//--- 输入参数
input color InpFirstColor=clrDodgerBlue// 奇数行的颜色
input color InpSecondColor=clrGoldenrod// 偶数行的颜色
//--- 变量和数组
CChartObjectLabel  ExtLabelsName[];  // 显示属性名的标签
CChartObjectLabel  ExtLabelsValue[]; // 显示属性值的标签
CChartObjectButton ExtButtons[];     // 按钮
int                ExtNumbers[];     // 属性指数
string             ExtNames[];       // 属性名称
uchar              ExtDataTypes[];   // 属性数据类型(整型,双精度,字符串)
uint               ExtGroupTypes[];  // 存储有关属性归属于一个组的数据的数组
uchar              ExtDrawTypes[];   // 存储有关属性显示类型的数据的数组
double             ExtMaxValue[];    // 面板工作时最大可能的属性值
double             ExtMinValue[];    // 面板工作时最小可能的属性值
double             ExtStep[];        // 更改属性的步骤
int                ExtCount;         // 所有属性的总数
color              ExtColors[2];     // 用于显示行的颜色的数组
string             ExtComments[2];   // 评论数组 (用于CHART_COMMENT 属性)
//+------------------------------------------------------------------+
//| 自定义指标初始化函数                                                |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 在图表上显示评论
   Comment("SomeComment");
//--- 数组中存储颜色以便过后能够在它们之间切换
   ExtColors[0]=InpFirstColor;
   ExtColors[1]=InpSecondColor;
//--- 数组中存储评论以便过后在它们之间切换
   ExtComments[0]="FirstComment";
   ExtComments[1]="SecondComment";
//--- 准备并显示管理图表属性的控制面板
   if(!PrepareControls())
      return(INIT_FAILED);
//--- 成功执行
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| EA的去初始化函数                                                   |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- 在图表上移除评论
   Comment("");
  }
//+------------------------------------------------------------------+
//| 图表事件处理程序                                                   |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- 检查点击图表对象的事件
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      //--- 用分隔符分开对象名称
      string obj_name[];
      StringSplit(sparam,'_',obj_name);
      //--- 检查对象是否是个按钮
      if(obj_name[0]=="Button")
        {
         //--- 接收按钮指数
         int index=(int)StringToInteger(obj_name[1]);
         //--- 不按按钮
         ExtButtons[index].State(false);
         //--- 根据类型设置新的属性值
         if(ExtDataTypes[index]=='I')
            ChangeIntegerProperty(index);
         if(ExtDataTypes[index]=='D')
            ChangeDoubleProperty(index);
         if(ExtDataTypes[index]=='S')
            ChangeStringProperty(index);
        }
     }
//--- 重画属性值
   RedrawProperties();
   ChartRedraw();
  }
//+------------------------------------------------------------------+
//| 改变图表的整型属性                                                  |
//+------------------------------------------------------------------+
void ChangeIntegerProperty(const int index)
  {
//--- 接收当前属性值
   long value=ChartGetInteger(0,(ENUM_CHART_PROPERTY_INTEGER)ExtNumbers[index]);
//--- 定义以下属性值
   switch(ExtDrawTypes[index])
     {
      case 'C':
         value=GetNextColor((color)value);
         break;
      default:
         value=(long)GetNextValue((double)value,index);
         break;
     }
//--- 设置新的属性值
   ChartSetInteger(0,(ENUM_CHART_PROPERTY_INTEGER)ExtNumbers[index],0,value);
  }
//+------------------------------------------------------------------+
//| 改变图表的双精度属性                                                |
//+------------------------------------------------------------------+
void ChangeDoubleProperty(const int index)
  {
//--- 接收当前属性值
   double value=ChartGetDouble(0,(ENUM_CHART_PROPERTY_DOUBLE)ExtNumbers[index]);
//--- 定义以下属性值
   value=GetNextValue(value,index);
//--- 设置新的属性值
   ChartSetDouble(0,(ENUM_CHART_PROPERTY_DOUBLE)ExtNumbers[index],value);
  }
//+------------------------------------------------------------------+
//| 改变图表的字符串属性                                                |
//+------------------------------------------------------------------+
void ChangeStringProperty(const int index)
  {
//--- 用于 ExtComments数组内转换的静态变量
   static uint comment_index=1;
//--- 改变接收另一个评论的指数
   comment_index=1-comment_index;
//--- 设置新的属性值
   ChartSetString(0,(ENUM_CHART_PROPERTY_STRING)ExtNumbers[index],ExtComments[comment_index]);
  }
//+------------------------------------------------------------------+
//| 定义下一个属性值                                                   |
//+------------------------------------------------------------------+
double GetNextValue(const double value,const int index)
  {
   if(value+ExtStep[index]<=ExtMaxValue[index])
      return(value+ExtStep[index]);
   else
      return(ExtMinValue[index]);
  }
//+------------------------------------------------------------------+
//| 接收颜色类型属性的下一个颜色                                         |
//+------------------------------------------------------------------+
color GetNextColor(const color clr)
  {
//--- 返回以下颜色值
   switch(clr)
     {
      case clrWhitereturn(clrRed);
      case clrRed:   return(clrGreen);
      case clrGreenreturn(clrBlue);
      case clrBlue:  return(clrBlack);
      default:       return(clrWhite);
     }
  }
//+------------------------------------------------------------------+
//| 重画属性值                                                        |
//+------------------------------------------------------------------+
void RedrawProperties(void)
  {
//--- 属性值文本
   string text;
   long   value;
//--- 循环的属性数量
   for(int i=0;i<ExtCount;i++)
     {
      text="";
      switch(ExtDataTypes[i])
        {
         case 'I':
            //--- 接收当前属性值
            if(!ChartGetInteger(0,(ENUM_CHART_PROPERTY_INTEGER)ExtNumbers[i],0,value))
            break;
            //--- 整型属性文本
            switch(ExtDrawTypes[i])
              {
               //--- 颜色属性
               case 'C':
                  text=(string)((color)value);
                  break;
                  //--- 布尔属性
               case 'B':
                  text=(string)((bool)value);
                  break;
                  //--- ENUM_CHART_MODE 枚举属性
               case 'M':
                  text=EnumToString((ENUM_CHART_MODE)value);
                  break;
                  //--- ENUM_CHART_VOLUME_MODE 枚举属性
               case 'V':
                  text=EnumToString((ENUM_CHART_VOLUME_MODE)value);
                  break;
                  //--- int 类型号
               default:
                  text=IntegerToString(value);
                  break;
              }
            break;
         case 'D':
            //--- 双精度属性文本
            text=DoubleToString(ChartGetDouble(0,(ENUM_CHART_PROPERTY_DOUBLE)ExtNumbers[i]),4);
            break;
         case 'S':
            //--- 字符串属性文本
            text=ChartGetString(0,(ENUM_CHART_PROPERTY_STRING)ExtNumbers[i]);
            break;
        }
      //--- 显示属性值
      ExtLabelsValue[i].Description(text);
     }
  }
//+------------------------------------------------------------------+
//| 创建管理图表属性面板                                                |
//+------------------------------------------------------------------+
bool PrepareControls(void)
  {
//--- 为数组存储分配内存
   MemoryAllocation(LAST_PROPERTY_NUMBER+1);
//--- 变量
   int i=0;     // 循环变量
   int col_1=0; // 第一列的属性数
   int col_2=0; // 第二列的属性数
   int col_3=0; // 第三列的属性数
//--- 当前属性数 - 0
   ExtCount=0;
//--- 在循环中查找属性
   while(i<=LAST_PROPERTY_NUMBER)
     {
      //--- 存储当前属性数
      ExtNumbers[ExtCount]=i;
      //--- 增加循环变量值
      i++;
      //--- 检查是否有这个数的属性
      if(CheckNumber(ExtNumbers[ExtCount],ExtNames[ExtCount],ExtDataTypes[ExtCount],ExtGroupTypes[ExtCount],ExtDrawTypes[ExtCount]))
        {
         //--- 创建属性的控制元素
         switch(ExtGroupTypes[ExtCount])
           {
            case 1:
               //--- 创建属性标签和按钮
               if(!ShowProperty(ExtCount,0,X_PROPERTY_NAME_1,X_PROPERTY_VALUE_1,X_BUTTON_1,Y_PROPERTY_1+col_1*Y_DISTANCE,true))
               return(false);
               //--- 第一列的元素数已经增加
               col_1++;
               break;
            case 2:
               //--- 创建属性标签和按钮
               if(!ShowProperty(ExtCount,1,X_PROPERTY_NAME_2,X_PROPERTY_VALUE_2,X_BUTTON_2,Y_PROPERTY_1+col_2*Y_DISTANCE,true))
               return(false);
               //--- 第二列的元素数已经增加
               col_2++;
               break;
            case 3:
               //--- 只创建属性标签
               if(!ShowProperty(ExtCount,2,X_PROPERTY_NAME_2,X_PROPERTY_VALUE_2,0,Y_PROPERTY_2+col_3*Y_DISTANCE,false))
               return(false);
               //--- 第三列的元素数已经增加
               col_3++;
               break;
           }
         //--- 定义最大最小属性值和步骤
         GetMaxMinStep(ExtNumbers[ExtCount],ExtMaxValue[ExtCount],ExtMinValue[ExtCount],ExtStep[ExtCount]);
         //--- 增加属性数量
         ExtCount++;
        }
     }
//--- 释放数组不用的内存
   MemoryAllocation(ExtCount);
//--- 重画属性值
   RedrawProperties();
   ChartRedraw();
//--- 成功执行
   return(true);
  }
//+------------------------------------------------------------------+
//| 为数组分配内存                                                     |
//+------------------------------------------------------------------+
void MemoryAllocation(const int size)
  {
   ArrayResize(ExtLabelsName,size);
   ArrayResize(ExtLabelsValue,size);
   ArrayResize(ExtButtons,size);
   ArrayResize(ExtNumbers,size);
   ArrayResize(ExtNames,size);
   ArrayResize(ExtDataTypes,size);
   ArrayResize(ExtGroupTypes,size);
   ArrayResize(ExtDrawTypes,size);
   ArrayResize(ExtMaxValue,size);
   ArrayResize(ExtMinValue,size);
   ArrayResize(ExtStep,size);
  }
//+------------------------------------------------------------------+
//| 检查是否属性指数属于                                                |
//| ENUM_CHART_PROPERTIES 枚举                                        |
//+------------------------------------------------------------------+
bool CheckNumber(const int ind,string &name,uchar &data_type,uint &group_type,uchar &draw_type)
  {
//--- 检查属性是否是整型类型的属性
   ResetLastError();
   name=EnumToString((ENUM_CHART_PROPERTY_INTEGER)ind);
   if(_LastError==0)
     {
      data_type='I';                      // 来自 ENUM_CHART_PROPERTY_INTEGER 枚举的属性
      GetTypes(ind,group_type,draw_type); // 定义属性显示参数
      return(true);
     }
//--- 检查属性是否是双精度类型
   ResetLastError();
   name=EnumToString((ENUM_CHART_PROPERTY_DOUBLE)ind);
   if(_LastError==0)
     {
      data_type='D';                      // 来自 ENUM_CHART_PROPERTY_DOUBLE 枚举的属性
      GetTypes(ind,group_type,draw_type); // 定义属性显示参数
      return(true);
     }
//--- 检查属性是否是字符串类型
   ResetLastError();
   name=EnumToString((ENUM_CHART_PROPERTY_STRING)ind);
   if(_LastError==0)
     {
      data_type='S';                      // 来自 ENUM_CHART_PROPERTY_STRING 枚举的属性
      GetTypes(ind,group_type,draw_type); // 定义属性显示参数
      return(true);
     }
//--- 属性不属于任何枚举
   return(false);
  }
//+------------------------------------------------------------------+
//| 定义属性应该存储的组,                                               |
//| 以及其展示类型                                                     |
//+------------------------------------------------------------------+
void GetTypes(const int property_number,uint &group_type,uchar &draw_type)
  {
//--- 检查属性是否属于第三组
//--- 第三组属性显示在从CHART_BRING_TO_TOP开始的第二列
   if(CheckThirdGroup(property_number,group_type,draw_type))
      return;
//--- 检查属性是否属于第二组
//--- 第二组属性显示在第二列的开头
   if(CheckSecondGroup(property_number,group_type,draw_type))
      return;
//--- 如果您在这里找到了自己,属性属于第一组(第一列)
   CheckFirstGroup(property_number,group_type,draw_type);
  }
//+----------------------------------------------------------------------+
//| 这个函数检查属性是否属于第三组并                                          |
//| 在肯定回答时定义显示类型                                                 |
//+----------------------------------------------------------------------+
bool CheckThirdGroup(const int property_number,uint &group_type,uchar &draw_type)
  {
//--- 检查属性是否属于第三组
   switch(property_number)
     {
      //--- 布尔属性
      case CHART_IS_OBJECT:
      case CHART_WINDOW_IS_VISIBLE:
         draw_type='B';
         break;
         //--- 整型属性
      case CHART_VISIBLE_BARS:
      case CHART_WINDOWS_TOTAL:
      case CHART_WINDOW_HANDLE:
      case CHART_WINDOW_YDISTANCE:
      case CHART_FIRST_VISIBLE_BAR:
      case CHART_WIDTH_IN_BARS:
      case CHART_WIDTH_IN_PIXELS:
         draw_type='I';
         break;
         //--- 双精度属性
      case CHART_PRICE_MIN:
      case CHART_PRICE_MAX:
         draw_type='D';
         break;
         //--- 实际上,这个属性实在所有其他的上面显示图表的命令
         //--- 无需应用这个面板,因为窗口会始终保持
         //--- 在其他的上面,在我们使用之前
      case CHART_BRING_TO_TOP:
         draw_type=' ';
         break;
         //--- 属性不属于第三组
      default:
         return(false);
     }
//--- 属性属于第三组
   group_type=3;
   return(true);
  }
//+----------------------------------------------------------------------+
//| 这个函数检查属性是否属于第二组并                                          |
//| 在肯定回答时定义显示类型                                                 |
//+----------------------------------------------------------------------+
bool CheckSecondGroup(const int property_number,uint &group_type,uchar &draw_type)
  {
//--- 检查属性是否属于第二组
   switch(property_number)
     {
      //--- ENUM_CHART_MODE 类型属性
      case CHART_MODE:
         draw_type='M';
         break;
         //--- ENUM_CHART_VOLUME_MODE 类型属性
      case CHART_SHOW_VOLUMES:
         draw_type='V';
         break;
         //--- 字符串属性
      case CHART_COMMENT:
         draw_type='S';
         break;
         //--- 颜色属性
      case CHART_COLOR_BACKGROUND:
      case CHART_COLOR_FOREGROUND:
      case CHART_COLOR_GRID:
      case CHART_COLOR_VOLUME:
      case CHART_COLOR_CHART_UP:
      case CHART_COLOR_CHART_DOWN:
      case CHART_COLOR_CHART_LINE:
      case CHART_COLOR_CANDLE_BULL:
      case CHART_COLOR_CANDLE_BEAR:
      case CHART_COLOR_BID:
      case CHART_COLOR_ASK:
      case CHART_COLOR_LAST:
      case CHART_COLOR_STOP_LEVEL:
         draw_type='C';
         break;
         //--- 属性不属于第二组
      default:
         return(false);
     }
//--- 属性属于第二组
   group_type=2;
   return(true);
  }
//+-----------------------------------------------------------------------+
//| 这个函数被调用只有在已知                                                  |
//| 属性不属于第二和第三属性组时才可以                                         |
//+-----------------------------------------------------------------------+
void CheckFirstGroup(const int property_number,uint &group_type,uchar &draw_type)
  {
//--- 属性属于第一组
   group_type=1;
//--- 定义属性显示类型
   switch(property_number)
     {
      //--- 整型属性
      case CHART_SCALE:
      case CHART_HEIGHT_IN_PIXELS:
         draw_type='I';
         return;
         //--- 双精度属性
      case CHART_SHIFT_SIZE:
      case CHART_FIXED_POSITION:
      case CHART_FIXED_MAX:
      case CHART_FIXED_MIN:
      case CHART_POINTS_PER_BAR:
         draw_type='D';
         return;
         //--- 只保留布尔属性
      default:
         draw_type='B';
         return;
     }
  }
//+------------------------------------------------------------------+
//| 创建属性标签和按钮                                                  |
//+------------------------------------------------------------------+
bool ShowProperty(const int ind,const int type,const int x1,const int x2,
                  const int xb,const int y,const bool btn)
  {
//--- 用于ExtColors颜色数组内转换的静态数组
   static uint color_index[3]={1,1,1};
//--- 改变指数,接收另一个颜色
   color_index[type]=1-color_index[type];
//--- 显示属性的标签和按钮 (如果 btn=true) 
   if(!LabelCreate(ExtLabelsName[ind],"name_"+(string)ind,ExtNames[ind],ExtColors[color_index[type]],x1,y))
      return(false);
   if(!LabelCreate(ExtLabelsValue[ind],"value_"+(string)ind,"",ExtColors[color_index[type]],x2,y))
      return(false);
   if(btn && !ButtonCreate(ExtButtons[ind],(string)ind,xb,y+1))
      return(false);
//--- 成功执行
   return(true);
  }
//+------------------------------------------------------------------+
//| 创建标签                                                          |
//+------------------------------------------------------------------+
bool LabelCreate(CChartObjectLabel &lbl,const string name,const string text,
                 const color clr,const int x,const int y)
  {
   if(!lbl.Create(0,"Label_"+name,0,x,y)) return(false);
   if(!lbl.Description(text))             return(false);
   if(!lbl.FontSize(10))                  return(false);
   if(!lbl.Color(clr))                    return(false);
//--- 成功执行
   return(true);
  }
//+------------------------------------------------------------------+
//| 创建按钮                                                          |
//+------------------------------------------------------------------+
bool ButtonCreate(CChartObjectButton &btn,const string name,
                  const int x,const int y)
  {
   if(!btn.Create(0,"Button_"+name,0,x,y,50,15)) return(false);
   if(!btn.Description("Next"))                  return(false);
   if(!btn.FontSize(10))                         return(false);
   if(!btn.Color(clrBlack))                      return(false);
   if(!btn.BackColor(clrWhite))                  return(false);
   if(!btn.BorderColor(clrBlack))                return(false);
//--- 成功执行
   return(true);
  }
//+------------------------------------------------------------------+
//| 定义最大和最小属性值和步骤                                           |
//+------------------------------------------------------------------+
void GetMaxMinStep(const int property_number,double &max,double &min,double &step)
  {
   double value;
//--- 根据属性类型设置值
   switch(property_number)
     {
      case CHART_SCALE:
         max=5;
         min=0;
         step=1;
         break;
      case CHART_MODE:
      case CHART_SHOW_VOLUMES:
         max=2;
         min=0;
         step=1;
         break;
      case CHART_SHIFT_SIZE:
         max=50;
         min=10;
         step=2.5;
         break;
      case CHART_FIXED_POSITION:
         max=90;
         min=0;
         step=15;
         break;
      case CHART_POINTS_PER_BAR:
         max=19;
         min=1;
         step=3;
         break;
      case CHART_FIXED_MAX:
         value=ChartGetDouble(0,CHART_FIXED_MAX);
         max=value*1.25;
         min=value;
         step=value/32;
         break;
      case CHART_FIXED_MIN:
         value=ChartGetDouble(0,CHART_FIXED_MIN);
         max=value;
         min=value*0.75;
         step=value/32;
         break;
      case CHART_HEIGHT_IN_PIXELS:
         max=700;
         min=520;
         step=30;
         break;
         //--- 默认值
      default:
         max=1;
         min=0;
         step=1;
     }
  }