R:Guy Yollin的Quantstrat示例。有必要吗?这些金融工具储存了什么?

R:Guy Yollin的Quantstrat示例。有必要吗?这些金融工具储存了什么?,r,quantstrat,blotter,R,Quantstrat,Blotter,您好,我正在处理此代码(此代码有效且可复制) 如果(!exists('.blotter')).blotter首先,直接回答两点: 指标不是战略所必需的,唯一的硬性要求是您至少需要一条创建订单的规则,或者在订单槽中至少需要一条创建交易的规则 strategy对象仅包含策略的规范,仅此而已,请参见下文 接下来,解释发生了什么: quantstrat广泛使用延迟执行以允许代码重用。策略对象是策略规范的存储位置。它可以通过使用portfolions=参数应用于一个或多个公文包(由initPortf()创

您好,我正在处理此代码(此代码有效且可复制)


如果(!exists('.blotter')).blotter首先,直接回答两点:

  • 指标不是战略所必需的,唯一的硬性要求是您至少需要一条创建订单的规则,或者在
    订单
    槽中至少需要一条创建交易的规则

  • strategy
    对象仅包含策略的规范,仅此而已,请参见下文

  • 接下来,解释发生了什么:

    quantstrat
    广泛使用延迟执行以允许代码重用。
    策略
    对象是策略规范的存储位置。它可以通过使用
    portfolions=
    参数应用于一个或多个公文包(由
    initPortf()
    创建)

    策略规范只是一个仓库,用来存放您以后如何应用策略。在调用
    applyStrategy(…)
    之前,不会计算任何内容。这允许使用有用的属性,例如使用相同的策略对象来测试多个不同的参数集,或者在不改变策略规范的情况下应用不同的投资组合结构和成分

    策略对象本身不会被
    applyStrategy
    更改。在
    applyStrategy
    内部,将创建一个名为
    mktdata
    的特殊内部对象,该对象将通过执行策略规范中包含的指标、信号和规则进行修改

    默认情况下,
    mktdata
    对象是通过从
    .GlobalEnv
    或用户指定的其他环境检索包含历史数据的对象来构造的。将为公文包中的每个符号创建其中一个对象,并在
    applyStrategy
    的功能范围内进行维护

    应用指示器和信号时,这些函数最常见的模式是返回与mktdata时间序列长度相同的向量,或返回与mktdata时间序列具有相同索引的时间序列对象。如果遵循此模式,这些列将添加到mktdata对象中,并可供以后的指示器、信号和规则函数使用。指示器和信号被假定为始终不依赖于路径,而规则在默认情况下依赖于路径

    示例信号函数,如
    sigcrosover
    sigsthreshold
    ,利用此模式访问和比较mktdata中存在的列
    ruleSignal
    ,一个示例规则,查找信号具有特定值的点,然后根据该信息创建订单

    外部参考:


    嗨,Brian,我是否可以计算R之外的指标和信号并存储数据,以便quantstrat可以简单地使用该数据集并应用规则。这样,我就不依赖R TTR指标等。如果是,我的OHCLV数据中哪些列是计算策略所必需的?我在应用程序中使用nodejs调用OHCLV数据,添加必要的指示器和信号。我需要R应用规则并创建中可用的输出quantstrat@SushantaDeb:是的,可以完成,详情请参见下面的链接谢谢@usct01
    if (!exists('.blotter')) .blotter <- new.env()
    if (!exists('.strategy')) .strategy <- new.env()
    if (!exists('.instrument')) .instrument <- new.env()
    currency("USD")
    stock("SPY",currency="USD",multiplier=1)
    ls(envir=FinancialInstrument:::.instrument)
    
    
    initDate <- '1997-12-31'
    startDate <- '1998-01-01'
    endDate <- '2013-07-31'
    initEq <- 1e6
    Sys.setenv(TZ="UTC")
    getSymbols('SPY', from=startDate, to=endDate, adjust=T)
    SPY=to.monthly(SPY, indexAt='endof')
    SPY$SMA10m <- SMA(Cl(SPY), 10)
    
    # inz portfolio, account
    qs.strategy <- "qsFaber"
    rm.strat(qs.strategy) # remove strategy etc. if this is a re-run
    initPortf(qs.strategy,'SPY', initDate=initDate)
    initAcct(qs.strategy,portfolios=qs.strategy, initDate=initDate, initEq=initEq)
    
    
    initOrders(portfolio=qs.strategy,initDate=initDate)
    # instantiate a new strategy object
    strategy(qs.strategy,store=TRUE)
    add.indicator(strategy = qs.strategy, name = "SMA",
                  arguments = list(x = quote(Cl(mktdata)), n=10), label="SMA10")
    add.signal(qs.strategy,name="sigCrossover",
               arguments = list(columns=c("Close","SMA10"),relationship="gt"),
               label="Cl.gt.SMA")
    add.signal(qs.strategy,name="sigCrossover",
               arguments = list(columns=c("Close","SMA10"),relationship="lt"),
               label="Cl.lt.SMA")
    
    add.rule(qs.strategy, name='ruleSignal',
             arguments = list(sigcol="Cl.gt.SMA", sigval=TRUE, orderqty=900,
                              ordertype='market', orderside='long', pricemethod='market'),
             type='enter', path.dep=TRUE)
    add.rule(qs.strategy, name='ruleSignal',
             arguments = list(sigcol="Cl.lt.SMA", sigval=TRUE, orderqty='all',
                              ordertype='market', orderside='long', pricemethod='market'),
             type='exit', path.dep=TRUE)
    
    
    out <- applyStrategy(strategy=qs.strategy , portfolios=qs.strategy)
    updatePortf(qs.strategy)
    updateAcct(qs.strategy)
    updateEndEq(qs.strategy)
    
    myTheme<-chart_theme()
    myTheme$col$dn.col<-'lightblue'
    myTheme$col$dn.border <- 'lightgray'
    myTheme$col$up.border <- 'lightgray'
    # plot performance
    chart.Posn(qs.strategy, Symbol = 'SPY', Dates = '1998::',theme=myTheme)
    plot(add_SMA(n=10,col=4, on=1, lwd=2))