我有一个像这样的结构:
struct ohlc{
double open,high,low,close;
};
我的应用程序的一部分使用了这些集合。有时带有时间戳。我的应用程序的另一部分使用需要双精度数组的第三方(封闭)库,例如 close[] 或 open[] 等。
返回 open[]、close[] 等双数组的最合适的容器和方法是什么。目前,我使用向量并遍历整个集合来创建数组。有没有更有效的方法。
我什至可能对我当前使用的结构完全错误?我所拥有的是出价/要价的价格信息。我尝试维护 M1、M5、M15 和 H1 蜡烛棒的集合,即 OHLC 数据。通常我只需要 100 小时的数据。随着新一分钟的价格出现,我可以删除最旧的一分钟,从而随时保留 100 小时的数据。由于 H1、M15、M5、M1 都可以从带有时间戳的询价/买入价的基础数据中创建,出于性能原因,我是否还需要持有独立的 H1、M15 等。我问这是因为它是重复数据吗?
编辑:我目前的方法对于我通常的目的来说很好,但现在我正在“回测”,我在我的代码中抛出了数百万的买入/卖出价格,并且需要它尽可能高效。回溯测试目前可能需要数小时才能执行
我从我的结构集合中返回如下:
std::vector<double> Series::EODSeries::open( const_iterator iter, unsigned long num ) const
{
vector<double> v;
if( iter == end() )
return v;
// reverse iterator init skips the first element in collection. We must manually insert the current element.
v.insert(v.begin(), iter->second.open);
unsigned i = 1;
for( const_reverse_iterator rev_iter(iter); i < num && rev_iter != rend(); ++rev_iter, ++i )
v.insert(v.begin(), rev_iter->second.open);
return v;
}