gpt4 book ai didi

R:回测交易策略。 quantmod 和 R 的初学者

转载 作者:行者123 更新时间:2023-12-04 10:08:16 25 4
gpt4 key购买 nike

我对 R 非常陌生,并试图回测我已经在 WealthLab 中编写的策略。

一些我不明白的东西(而且它显然不起作用:)

  • 我没有很好地将收盘价转化为向量……或某种向量,但它从结构开始,我真的不明白这个函数的作用。这就是为什么我的 series[,1] 调用可能不起作用的原因。
  • n <- nrow(series) 也不起作用,但我需要它用于循环

  • 所以我想如果我得到这两个问题的回答,我的策略应该有效......我非常感谢任何帮助......即使有其他语言的编程经验,R似乎也很复杂
    #rm(list = ls(all = TRUE))

    #import data, default is yahoo
    require(quantmod)
    series <- getSymbols('AAPL',from='2013-01-01')
    #generate HLOC series
    close <- Cl(AAPL)
    open <- Op(AAPL)
    low <-Lo(AAPL)
    high <- Hi(AAPL)

    #setting parameters
    lookback <- 24 #24 days ago
    startMoney <- 10000


    #Empty our time series for position and returns
    f <- function(x) 0 * x

    position <- apply(series[,1],FUN=f)
    colnames(position)="long_short"

    returns <- apply(series[,1],FUN=f)
    colnames(returns)="Returns"

    trades = returns
    colnames(trades)="Trades"

    amount = returns
    colnames(amount) = "DollarAmount"
    amt[seq(1,lookback)] = startMoney


    #Calculate all the necessary values in a loop with our trading strategy
    n <- nrow(series)

    for(i in seq(lookback+1,n)){
    #get the return
    if(position[i-1] == 1){
    #we were long
    returns[i] = close[i]/close[i-1] - 1
    } else if(position[i-1] == -1){
    #we were short
    returns[i] = close[i-1]/close[i] - 1
    }


    #long/short position
    if(open[i-lookback]<open[i] && low[i-1] < open[i]){
    #go long
    position[i] = 1
    } else if(open[i-lookback]>open[i] && high[i-1] > open[i]){
    # go short
    position[i] = -1
    } else {
    position[i] = position[i-1]
    }

    #mark a trade if we did one
    if(position[i] != position[i-1]) trades[i] = 1

    #Calculate the dollar amount
    amount[i] = amount[i-1]*exp(returns[i])
    if(trades[i]) amount[i] = amount[i] - 2
    }

    最佳答案

    从第二个问题开始

    > s <- getSymbols('SPY')
    > nrow(s)
    NULL
    > class(s)
    [1] "character"
    > s.data <- get(s)
    > class(s.data)
    [1] "xts" "zoo"
    > nrow(s.data)
    [1] 1635

    所以如果你想处理实际的 xts您需要使用的对象 get .

    关于你的第一个问题 - 我认为你真的不需要将数据作为向量提取 - xts object 是一个按日期索引的数组,它很容易使用。
    如果您仍然想获取可以使用的数据
    closing.prices <- coredata(Cl(s))

    现在,为了让您开始对策略进行简单的回溯测试,我建议您按照以下步骤进行工作

    定义您的策略。
    2. 创建一个数组或向您的 xts 对象添加一列,代表您每天的位置。 1 为多头,0 为 headless 寸,-1 为空头(稍后您可以使用数字进行杠杆)。
    3. 将每天的返回乘以头寸,您将得到您的策略返回向量。
    4. 检查结果 - 我的建议是 PerformanceAnalytics .

    简单策略 - 收盘价高于 SMA20 时买入,低于 SMA20 时卖出
    library(quantmod)
    library(PerformanceAnalytics)

    s <- get(getSymbols('SPY'))["2012::"]
    s$sma20 <- SMA(Cl(s) , 20)
    s$position <- ifelse(Cl(s) > s$sma20 , 1 , -1)
    myReturn <- lag(s$position) * dailyReturn(s)
    charts.PerformanceSummary(cbind(dailyReturn(s),myReturn))

    这就是你会得到的

    enter image description here

    关于R:回测交易策略。 quantmod 和 R 的初学者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16964341/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com