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

当复制未知数量数据时,推荐使用动态数组为目标数组,因为如果要求数据账户少于(或多于)目标数值的长度,函数试图重新分配内存以完全适应要求数据。
如果知道所需复制的数据数量,为了阻止内存过多分配,最好使用 静态分配缓冲区 。
无论目标数组- as_series=true 或者 as_series=false的属性是什么,数据就会复制,以至于最旧的数组元素会在记忆内存开始中放置。有3个变量函数可供调用。
调用第一位置和要求元素的数量
int CopyTickVolume(
string symbol_name, // 交易品种名称
ENUM_TIMEFRAMES timeframe, // 周期
int start_pos, // 启动位置
int count, // 复制的数据计算
long volume_array[] // 订单号交易量的目标数组
);调用起始位置日期和要求元素数量
int CopyTickVolume(
string symbol_name, // 交易品种名称
ENUM_TIMEFRAMES timeframe, // 周期
datetime start_time, // 启动日期和时间
int count, // 复制的数据计算
long volume_array[] // 订单号交易量的目标数组
);调用起始位置和要求时间间隔的日期末尾
int CopyTickVolume(
string symbol_name, // 交易品种名称
ENUM_TIMEFRAMES timeframe, // 周期
datetime start_time, // 开始日期和时间
datetime stop_time, // 结束日期和时间
long volume_array[] // 订单号交易量的目标数组
);参量
- symbol_name
[in] 交易品种名称。
- timeframe
[in] 周期。
- start_pos
[in] 复制的第一元素开始位置。
- count
[in] 复制数据点。
- start_time
[in] 复制第一元素起始时间。
- stop_time
[in] 字节时间,复制最后元素相一致。
- volume_array[]
[out] 长整型 类型数组
返回值
返回数组中元素数量或者错误情况下-1。
注释
如果要求的数据的全部间隔没有在可行数据的服务器中,函数返回-1,如果外部数据 TERMINAL_MAXBARS (图表中的最大字节量)是要求的,函数也会返回-1。
当向指标要求数据,如果要求的时序列没有建立或者需要从服务器上下载,函数很快会返回-1,但是下载/建立的过程将会开始。
当EA交易或脚本要求数据时,来自服务器的下载会开始,如果终端本地没有这些数据,要求建立的时序列就会开始,如果数据可以从本地历史建立但尚未准备好。函数在超时期满时,会返回一定数量的准备好的数据,但是历史下载会继续,在下一个类似要求函数中会返回更多数据。
当通过起始日期和所需的元素数量请求数据时,只有日期小于(早于)或等于指定日期的数据。这意味着,任何柱的开盘时间的返回值(交易量,点差,指标缓冲区,开盘价,最高价,最低价,收盘价或开盘时间)始终少于或等于指定的值。
当在日期指定范围内要求数据,只有间隔中的数据才能返回,间隔建立并指到秒。这表示,任意字节的开始时间,返回的值(成交量,传播,指标缓冲区的值,开仓价,最高阶,最低价,收盘价或者开仓时间)是间隔要求范围内的。
因此,如果当前日期是星期六,想要复制指定的一周的时间表start_time=Last_Tuesday 和stop_time=Last_Friday,函数的返回值是0,因为每周开盘时间是星期日,但是一周字节不能分成特殊的间隔。
如果需要返回与当前未完成字节相类似的值,可以调用指定的 start_pos=0 和 count=1第一种形式。
示例:
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots 1
//---- 订单号交易量图
#property indicator_label1 "TickVolume"
#property indicator_type1 DRAW_HISTOGRAM
#property indicator_color1 C'143,188,139'
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//--- 输入参量
input int bars=3000;
//--- 指标缓冲区
double TickVolumeBuffer[];
//+------------------------------------------------------------------+
//| 自定义指标初始化函数 |
//+------------------------------------------------------------------+
void OnInit()
{
//--- 指标缓冲区绘图
SetIndexBuffer(0,TickVolumeBuffer,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)
{
long timeseries[];
ArraySetAsSeries(timeseries,true);
int prices=CopyTickVolume(Symbol(),0,0,bars,timeseries);
for(int i=0;i<rates_total-prices;i++) TickVolumeBuffer[i]=0.0;
for(int i=0;i<prices;i++) TickVolumeBuffer[rates_total-1-i]=timeseries[prices-1-i];
Print("We have received the following number of TickVolume values: "+prices);
}
else
{
long timeseries[];
int prices=CopyTickVolume(Symbol(),0,0,1,timeseries);
TickVolumeBuffer[rates_total-1]=timeseries[0];
}
//--- 为下次调用返回prev_calculated值
return(rates_total);
}请见对象绑定方法部分请求数据历史记录的详细示例。该部分可用的脚本显示了如何获得最近1000柱上指标iFractals 的值和如何显示过去10的上下分形图。类似的技术可以用于所有丢失数据的指标并通常使用以下类型绘制: