CopySpread

函数在特定量中获得指定交易品种周期的特定点差价值数据到spread_array数据中。元素注释的命令是从现在到过去,例如,从当前位置0开始表示当前字节。

CopySpread

当复制未知数量数据时,推荐使用动态数组为目标数组,因为如果要求数据账户少于(或多于)目标数值的长度,函数试图重新分配内存以完全适应要求数据。

如果知道所需复制的数据数量,为了阻止内存过多分配,最好使用静态分配缓冲区

无论目标数组- as_series=true 或者 as_series=false的属性是什么,数据就会复制,以至于最旧的数组元素会在记忆内存开始中放置。有3个变量函数可供调用。

调用第一位置和要求元素的数量

int  CopySpread(
   string           symbol_name,      // 交易品种名称
   ENUM_TIMEFRAMES  timeframe,        // 周期
   int              start_pos,        // 启动位置
   int              count,            // 复制的数据计算
   int              spread_array[]    // 点差值的目标数组
   );

调用起始位置日期和要求元素数量

int  CopySpread(
   string           symbol_name,      // 交易品种名称
   ENUM_TIMEFRAMES  timeframe,        // 周期
   datetime         start_time,       // 启动日期和时间
   int              count,            // 复制的数据计算
   int              spread_array[]    // 点差值的目标数组
   );

调用起始位置和要求时间间隔的日期末尾

int  CopySpread(
   string           symbol_name,      // 交易品种名称
   ENUM_TIMEFRAMES  timeframe,        // 周期
   datetime         start_time,       // 启动日期和时间
   datetime         stop_time,        // 结束日期和时间
   int              spread_array[]    // 点差值的目标数组
   );

参量

symbol_name

[in]  交易品种名称。

timeframe

[in]  周期。

start_pos

[in]  复制第一元素起始位置。

count

[in] 复制数据点。

start_time

[in]  复制第一元素起始位置。

stop_time

[in]  字节时间,复制最后元素相一致。

spread_array[]

[out] 整型 类型数组

返回值

返回数组中元素数量或者错误情况下-1。

注释

如果要求的数据的全部间隔没有在可行数据的服务器中,函数返回-1,如果外部数据TERMINAL_MAXBARS(图表中的最大字节量)是要求的,函数也会返回-1。

当向指标要求数据,如果要求的时序列没有建立或者需要从服务器上下载,函数很快会返回-1,但是下载/建立的过程将会开始。

当EA交易或脚本要求数据时,来自服务器的下载会开始,如果终端本地没有这些数据,要求建立的时序列就会开始,如果数据可以从本地历史建立但尚未准备好。函数在超时期满时,会返回一定数量的准备好的数据,但是历史下载会继续,在下一个类似要求函数中会返回更多数据。

当通过起始日期和所需的元素数量请求数据时,只有日期小于(早于)或等于指定日期的数据。这意味着,任何柱的开盘时间的返回值(交易量,点差,指标缓冲区,开盘价,最高价,最低价,收盘价或开盘时间)始终少于或等于指定的值。

当在日期指定范围内要求数据,只有间隔中的数据才能返回,间隔建立并指到秒。这表示,任意字节的开始时间,返回的值(成交量,传播,指标缓冲区的值,开仓价,最高阶,最低价,收盘价或者开仓时间)是间隔要求范围内的。

因此,如果当前日期是星期六,想要复制指定的一周的时间表 start_time=Last_Tuesdaystop_time=Last_Friday ,函数的返回值是0,因为每周开盘时间是星期日,但是一周字节不能分成特殊的间隔。

如果需要返回与当前未完成字节相类似的值,可以调用指定的 start_pos=0 和 count=1第一种形式。

示例:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//---- 点差图
#property indicator_label1  "Spread"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- 输入参量
input int      bars=3000;
//--- 指标缓冲区
double         SpreadBuffer[];
//+------------------------------------------------------------------+
//| 自定义指标初始化函数                                                |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- 指标缓冲区绘图
   SetIndexBuffer(0,SpreadBuffer,INDICATOR_DATA);
   IndicatorSetInteger(INDICATOR_DIGITS,0);
//---
  }
//+------------------------------------------------------------------+
//| 自定义指标重复函数                                                  |
//+------------------------------------------------------------------+
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[])
  {
//---
   if(prev_calculated==0)
     {
      int spread_int[];
      ArraySetAsSeries(spread_int,true);
      int spreads=CopySpread(Symbol(),0,0,bars,spread_int);
      Print("We have received the following number of Spread values: ",spreads);
      for (int i=0;i<spreads;i++) 
      {
      SpreadBuffer[rates_total-1-i]=spread_int[i];
      if(i<=30) Print("spread["+i+"] = ",spread_int[i]);
      }
     }
   else
     {
      double Ask,Bid;
      Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
      Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
      Comment("Ask = ",Ask,"  Bid = ",Bid);
      SpreadBuffer[rates_total-1]=(Ask-Bid)/Point();
     }
//--- 为下次调用返回prev_calculated值
   return(rates_total);
  }

请见对象绑定方法部分请求数据历史记录的详细示例。该部分可用的脚本显示了如何获得最近1000柱上指标iFractals 的值和如何显示过去10的上下分形图。类似的技术可以用于所有丢失数据的指标并通常使用以下类型绘制: