计算持仓成本,有没有高效的方法
如下代码所示,order表的字段id是订单号,price是价格,amount下单数量(+买入,-卖出),当amount为正时,持仓成本=cumsum(amount*price)/cumsum(amount),当amount为负(卖出时),引用之前计算好的持仓成本。当全卖出即空仓后,持仓成本需要重新算。下面是我的DolphinDB database代码:
id = take(1..9,1000000)
price = take(101..109,1000000)
amount =take( 1 2 3 -2 -1 -3 1 2 3,1000000)
order = table(id, price, amount)
def avg_price(price, amount){
hold = 0.0;
cost = 0.0;
avg_price = 0.0;
avg_prices = array(double);
for ( r in table(price,amount) ) {
hold += r.amount;
if ( r.amount > 0 ) {
cost += r.amount * r.price;
avg_price = iif(hold > 0, cost/hold, 0);
} else {
cost += r.amount * avg_price;
}
avg_prices.push!(avg_price)
}
return avg_prices;
}
select *, iif (amount < 0, amount*(avg_price - price), 0) as profit
from (
select *, avg_price(price, amount) as avg_price
from order
)
这个方法效率比较低,100万行数据,执行一次要3-4秒,请问有什么办法改进?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
DolphinDB database 从1.01版本开始支持即时编译JIT(https://github.com/dolphindb/... )。JIT又译及时编译或实时编译,是动态编译的一种形式,可提高程序运行效率。上面函数可写成JIT函数如下:
对上述函数进行测试,用JIT版本比非JIT大约快200倍。