IndicatorSetDouble

函数建立了类似指标属性值,指标属性应该是双精度类型,有2个变量函数可以使用。

调用属性的指示标识符。

bool  IndicatorSetDouble(
   int     prop_id,           // 标识符
   double  prop_value         // 将被设置的值
   );

调用指示标识符和属性修饰语。

bool  IndicatorSetDouble(
   int     prop_id,           // 标识符
   int     prop_modifier,     // 修饰符 
   double  prop_value         // 将被设置的值
   )

参量

prop_id

[in] 值可以是 ENUM_CUSTOMIND_PROPERTY_DOUBLE 值中的一个。

prop_modifier

[in]  规定属性的修饰语,只有水平指示需要修饰语。水平编号从0开始。它表示若要为第二水平设置属性您需要指定1(1少于使用编译程序指令时)。

prop_value

[in]  属性值。

返回值

如果成功,返回 true,否则 - false

注意

使用#property指令时属性(修饰符)的编号从1(一)开始,而函数使用从0(零)开始编号。如果水平编号设置错误,那么指标展示可能会不同于预想。

例如,在单独子窗口的指标第一水平值可以通过两种方式设置:

  • property indicator_level1  50 - 值1用于指定水平编号,
  • IndicatorSetDouble(INDICATOR_LEVELVALUE, 0, 50) - 0 用于指定第一水平。

例如: 颠倒指标窗口最大最小值和水平线所在水平值的指标。

Example of using the IndicatorSetDouble() function

#property indicator_separate_window
//--- 设置指标窗口的最大最小值
#property indicator_minimum  0
#property indicator_maximum  100
//--- 在单独指标窗口展示三条水平线
#property indicator_level1 25
#property indicator_level2 50
#property indicator_level3 75
//--- 设置水平线的粗细
#property indicator_levelwidth 1
//--- 设置水平线的样式
#property indicator_levelstyle STYLE_DOT
//+------------------------------------------------------------------+
//| 自定义指标初始化函数                                                |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 设置水平线的描述
   IndicatorSetString(INDICATOR_LEVELTEXT,0,"First Level (index 0)");
   IndicatorSetString(INDICATOR_LEVELTEXT,1,"Second Level (index 1)");
   IndicatorSetString(INDICATOR_LEVELTEXT,2,"Third Level (index 2)");
//--- 设置指标缩略名
   IndicatorSetString(INDICATOR_SHORTNAME,"IndicatorSetDouble() Demo");
//--- 设置每个水平的颜色
   IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,clrBlue);
   IndicatorSetInteger(INDICATOR_LEVELCOLOR,1,clrGreen);
   IndicatorSetInteger(INDICATOR_LEVELCOLOR,2,clrRed);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 自定义指标迭代函数                                                 |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   static int tick_counter=0;
   static double level1=25,level2=50,level3=75;
   static double max=100,min=0, shift=100;
//--- 计算订单号
   tick_counter++;
//--- 每10个订单号颠倒一次水平
   if(tick_counter%10==0)
     {
      //--- 水平值的颠倒符号
      level1=-level1;
      level2=-level2;
      level3=-level3;
      //--- 最大最小值的颠倒符号
      max-=shift;
      min-=shift;
      //--- 颠倒替换值
      shift=-shift;
      //--- 设置新的水平值
      IndicatorSetDouble(INDICATOR_LEVELVALUE,0,level1);
      IndicatorSetDouble(INDICATOR_LEVELVALUE,1,level2);
      IndicatorSetDouble(INDICATOR_LEVELVALUE,2,level3);
      //--- 在指标窗口设置新的最大最小值
      Print("Set up max = ",max,",   min = ",min);
      IndicatorSetDouble(INDICATOR_MAXIMUM,max);
      IndicatorSetDouble(INDICATOR_MINIMUM,min);
     }
//--- 返回prev_calculated值以便下次调用
   return(rates_total);
  }

另见

指标类型示例, 指标属性和函数间的连接, 绘画风格