我希望特定资产(符号)的最大允许位置是资本(初始分配+ PL)和指标的函数。我尝试过替换osMaxPos
。我在顶部添加了这个,其中初始值是硬编码的,ddQ是我的指标,
updatePortf(portfolio, symbol, Dates=paste('::',as.Date(timestamp),sep=''))
cumPL <- sum(getPortfolio(portfolio)$symbols[[symbol]]$posPL$Net.Trading.PL)
print(paste0("expFluct", data$ddQ[timestamp]*2))
maxPosVal <- (10e6+cumPL) * data$ddQ[timestamp]*2
print(paste0("maxPosVal = ", maxPosVal))
addPosLimit(portfolio,
symbol=symbol,
timestamp = first(index(data)),
maxpos = maxPosVal
)
这可行,但由于我的投资组合在每次通话时都被标记,因此需要执行日内策略,大约2年的1分钟数据从几分钟到几小时。有人能指出一种更有效的方法吗?感谢。
答案 0 :(得分:6)
请改用重新平衡规则,例如rulePctEquity
。
见
demo('macdRebalancing')
举个例子。
大多数真实投资组合不会在每笔交易中重新平衡,因为这不是特别实用,尤其是在日内数据上。
rulePctEquity
确实致电updatePortf
,但在实践中,通常会在每次新观察时调整您的交易规模。
它与您的示例不同,标记整个投资组合,并查看总权益,而不仅仅是在一个工具中累积的P&amp; L.
如果您想更频繁地调整,或者想要在单个乐器中根据P&amp; L进行调整,那么您根本不需要updatePortf
。如果您只想在单个乐器中使用初始分配加上P&amp; L,那么您应该从Txns
表中对该乐器的实现P&amp; L求和,并根据您的开放时间差来计算未实现的P&amp; L位置和当前市场价格。在大多数情况下,这比调用updatePortf
快几百倍。