r - Quantstrat 以百分比为单位的动态订单规模
问题描述
我想设置的订单大小不是以手数或美元为单位的绝对值,而是以百分比为单位。例如,我设置 ordersize <- 0.3,然后将必要的手数计算为当前净值的 30%。我应该使用osMaxPos / osMaxDollar还是以某种方式编写自定义尺寸函数?
add.rule(
strategy.st, name = 'ruleSignal',
label = 'EnterLONG', type = 'enter',
arguments = list(
sigcol = signal$long$enter$label, sigval = TRUE,
replace = TRUE, orderset = 'ocolong', orderqty = 1,
ordertype = 'market', orderside = 'long'
)
)
add.rule(
strategy.st, name = 'ruleSignal',
label = 'ExitLONG', type = 'exit',
arguments = list(
sigcol = signal$long$exit$label, sigval = TRUE,
replace = TRUE, orderset = 'ocolong', orderqty = 'all',
ordertype = 'market', orderside = 'long'
)
)
解决方案
对于那些像我一样兴奋的人,这里有一个解决方案:
我在这里找到了创建自定义订单大小功能的完美开端,Tim Trice 引用了 Ilya Kipnis 博客中的评论部分。我还发现需要更新投资组合才能在Joshua Ulrich 的回答中获得实际权益。
leverage <- 10 # 1:10
tradeSize <- 0.3 # 30%
osFixedPercent <- function(timestamp, orderqty, portfolio, symbol, ruletype, ...) {
if(!exists("tradeSize")) stop("You must set trade size")
updatePortf(portfolio)
portfolio <- getPortfolio(portfolio)
equity <- initEq + sum(portfolio$summary$Period.Realized.PL)
ClosePrice <- as.numeric(mktdata[timestamp,]$close)
maxPos <- equity * tradeSize
initialMargin <- ClosePrice / leverage
orderqty <- sign(orderqty) * floor(maxPos / initialMargin)
return(orderqty)
}
推荐阅读
- node.js - 无法使用 expo 构建项目(反应原生和节点)
- javascript - Sharepoint Slider Webpart 未显示
- ionic4 - 路线更改时不显示背景图像
- jira - JIRA:如何找到在未测试项目的情况下关闭项目的用户
- python - 根据值的大小打印字典
- php - 如何使用 PHP(SOAP Web 服务)发送和接收 xml
- sql - 从json中选择变量到具有现有记录的表的空列中
- dart - 从另一个类 Flutter 调用事件的函数
- python - 如何使用 Python+aiohttp 获取 HTTP 403 响应的正文?
- android - 解析颜色时出现 NumberFormatException