【问题标题】:Quantstrat dynamic order sizing in percentsQuantstrat 以百分比为单位的动态订单规模
【发布时间】:2019-06-01 15:28:45
【问题描述】:

我想设置订单大小不是以手数或美元为单位的绝对值,而是以百分比为单位。例如。我设置 ordersize 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'
  )
)

【问题讨论】:

    标签: r quantstrat


    【解决方案1】:

    对于那些像我一样兴奋的人,这里有一个解决方案:

    我在创建自定义订单大小函数here 时找到了一个完美的开端,Tim Trice 在 Ilya Kipnis 的博客中引用了 comments section。我还发现需要更新投资组合才能在Joshua Ulrich's answer 中获得实际权益。

    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)
    }
    

    【讨论】:

      猜你喜欢
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      • 2015-09-22
      • 1970-01-01
      • 2011-02-23
      相关资源
      最近更新 更多