CustomTicksAdd

添加MqlTick类型的数组数据到自定义交易品种的价格历史。自定义交易品种一定要在市场报价窗口来选择

int  CustomTicksAdd(
   const string     symbol,             // 交易品种名称
   const MqlTick&   ticks[],            // 应该应用于自定义交易品种的报价数据数组
   uint             count=WHOLE_ARRAY   // 即将使用的ticks[]数组元素的数量
   );

参数

交易品种

[in]  自定义交易品种的名称。

ticks[]

[in]   MqlTick类型的报价数据数组按照从早期到最近的顺序排列,例如ticks[k].time_msc <= ticks[n].time_msc,if k<n。

count=WHOLE_ARRAY

[in]  即将用于添加的ticks[]数组元素的数量。WHOLE_ARRAY意味着所有ticks[]数组元素都应被使用。

返回值

添加报价的数量,错误情况下为-1。

进一步注释

CustomTicksAdd函数只能用于在市场报价窗口打开的自定义交易品种。如果没有在市场报价窗口选择交易品种,您应该使用CustomTicksReplace添加报价。

CustomTicksAdd函数允许按照在交易商服务器上交付的模式传递报价。数据发送至市场报价来代替直接写入报价数据库。然后程序端将来自市场报价的价格保存到数据库。如果函数调用期间传递的数据量过于庞大,函数处理会发生变化以减少资源使用率。如果传递超过256个报价,数据将被分为两个部分。第一部分,即数据量大的部分直接写入报价数据库(如同CustomTicksReplace函数的操作)。第二部分包含128个报价,被传递到市场报价窗口,程序端在这里将报价保存到数据库。

MqlTick结构有两个时间值字段:time (以秒表示的报价时间)和 time_msc (以毫秒表示的报价时间),从1970年1月1日开始计算。添加报价的这些字段按照以下顺序进行处理:

  1. 如果ticks[k].time_msc!=0,我们用它来填写ticks[k].time字段,例如为报价设置 ticks[k].time=ticks[k].time_msc/1000(整除)
  2. 如果ticks[k].time_msc==0 并且 ticks[k].time!=0,那么将乘以1000来获得毫秒表示的时间,例如ticks[k].time_msc=ticks[k].time*1000
  3. 如果ticks[k].time_msc==0和ticks[k].time==0,那么将调用CustomTicksAdd函数时当前交易服务器的毫秒时间写入这些字段。

如果ticks[k].bid,ticks[k].ask,ticks[k].last或ticks[k].volume的数值大于零,那么将适当的标识组合写入ticks[k].flags 字段:

  • TICK_FLAG_BID – 报价已更改卖价
  • TICK_FLAG_ASK  – 报价已更改买价
  • TICK_FLAG_LAST – 报价已更改最后交易价
  • TICK_FLAG_VOLUME – 报价已更改交易量

如果字段的值小于或等于零,对应的标识将不写入ticks[k].flags字段。

 

自定义交易品种历史记录不添加TICK_FLAG_BUY and TICK_FLAG_SELL标识。

 

另见

CustomRatesDeleteCustomRatesUpdateCustomTicksReplaceCopyTicksCopyTicksRange