KDJ指标择时交易策略分析

knitr::opts_chunk$set(echo = TRUE, 
                      warning = FALSE, 
                      message = FALSE, 
                      fig.pos = 'H', 
                      fig.align = 'center', 
                      fig.width = 6.5, 
                      fig.height = 4, 
                      out.width = "90%", 
                      width = "90%")

引言

技术分析是金融市场中常用的分析方法,其中KDJ指标是一种重要的随机指标,能够反映价格波动的强弱、超买超卖现象以及市场趋势变化。本研究旨在通过R语言实现基于KDJ指标的股票择时交易策略,并通过历史数据回测寻找最佳参数组合。

研究方法

数据获取与处理

我们将使用quantmod包获取股票数据,并使用quantstrat包进行策略回测。首先加载所需的包:

# 加载必要的包
library(quantmod)
library(quantstrat)
library(eTTR)
library(PerformanceAnalytics)
library(ggplot2)
library(dplyr)
library(tibble)
library(scales)
library(gridExtra)
# 加载环境重置函数
source("/Users/matrixspk/My-Sites/r-finance/assets/code/reset_strategy_env.R")
# 加载计算胜率的函数
source("/Users/matrixspk/My-Sites/r-finance/assets/code/calculate_portfolio_win_rates.R")
source("/Users/matrixspk/My-Sites/r-finance/assets/code/generateSimpleSignalChain.R")

接下来,我们获取苹果公司股票的历史数据作为研究对象:

# 设置获取数据的起始和结束日期
initDate <- as.Date("2017-12-31")
startdate.st <- as.Date("2018-01-01")
enddate.st <- as.Date("2023-06-01")
# 获取苹果公司股票数据
getSymbols("AAPL", src = "yahoo", from = startdate.st, to = enddate.st)
## [1] "AAPL"
colnames(AAPL) <- c("Open", "High", "Low", "Close", "Volume", "Adjusted")
# 查看数据结构
head(AAPL)
##               Open    High     Low   Close    Volume Adjusted
## 2018-01-02 42.5400 43.0750 42.3150 43.0650 102223600 40.42682
## 2018-01-03 43.1325 43.6375 42.9900 43.0575 118071600 40.41978
## 2018-01-04 43.1350 43.3675 43.0200 43.2575  89738400 40.60754
## 2018-01-05 43.3600 43.8425 43.2625 43.7500  94640000 41.06986
## 2018-01-08 43.5875 43.9025 43.4825 43.5875  82271200 40.91732
## 2018-01-09 43.6375 43.7650 43.3525 43.5825  86336000 40.91262
summary(AAPL)
##      Index                 Open             High             Low             Close       
##  Min.   :2018-01-02   Min.   : 35.99   Min.   : 36.43   Min.   : 35.50   Min.   : 35.55  
##  1st Qu.:2019-05-10   1st Qu.: 51.97   1st Qu.: 52.32   1st Qu.: 51.67   1st Qu.: 52.03  
##  Median :2020-09-15   Median :114.67   Median :116.07   Median :112.84   Median :114.97  
##  Mean   :2020-09-14   Mean   :102.38   Mean   :103.62   Mean   :101.24   Mean   :102.48  
##  3rd Qu.:2022-01-20   3rd Qu.:146.36   3rd Qu.:148.00   3rd Qu.:145.15   3rd Qu.:146.61  
##  Max.   :2023-05-31   Max.   :182.63   Max.   :182.94   Max.   :179.12   Max.   :182.01  
##      Volume             Adjusted     
##  Min.   : 35195900   Min.   : 33.87  
##  1st Qu.: 76144000   1st Qu.: 49.73  
##  Median : 98135650   Median :111.96  
##  Mean   :112825725   Mean   :100.02  
##  3rd Qu.:133535000   3rd Qu.:143.97  
##  Max.   :426510000   Max.   :178.65

KDJ指标计算原理

KDJ指标由三条曲线组成:K线、D线和J线。其计算基于以下步骤:

  1. 计算未成熟随机值RSV: $$ RSV = \frac{C_t - L_n}{H_n - L_n} \times 100\ $$

    其中,Ct 为当日收盘价,Ln 为n日内最低价,Hn 为n日内最高价。

  2. 计算K值、D值和J值: Kt = α × RSVt + (1 − α) × Kt − 1 Dt = β × Kt + (1 − β) × Dt − 1 Jt = 3 × Kt − 2 × Dt

    通常,α = 1/3,β = 1/3 ,n=9。

交易策略设计

我们将基于KDJ指标设计以下交易策略:

  • 买入信号:当K线从下方上穿D线,并且K值和D值均小于20
  • 卖出信号:当K线从上方下穿D线,并且K值和D值均大于80

下面我们使用quantstrat包实现这个策略:

# 清理历史环境对象
reset_strategy_env()
## 策略环境已重置
# 初始化quantstrat
rm(list = ls(.blotter))
rm(list = ls(.strategy))

# 设置初始参数
currency("USD")
## [1] "USD"
stock("AAPL", currency = "USD", multiplier = 1)
## [1] "AAPL"
initEq.st <- 1000000  # 初始资金
portfolio.st <- "KDJ_Portfolio"
strategy.st <- "KDJ_Strategy"
account.st <- "KDJ_Account"
symbols.st <- "AAPL"

# 初始化投资组合、账户和订单
initPortf(name=portfolio.st, 
          symbols = symbols.st,
          initPosQty = 0)
## [1] "KDJ_Portfolio"
initAcct(name = account.st, 
         portfolios = portfolio.st, 
         initEq = initEq.st)
## [1] "KDJ_Account"
initOrders(portfolio = portfolio.st)
strategy(strategy.st, store = TRUE)

# 添加KDJ指标(修正参数)
add.indicator(strategy.st, 
              name = "KDJ", 
              arguments = list(ohlc = quote(HLC(AAPL)), 
                               n = 9, 
                               m1 = 3,  # eTTR::KDJ的m1参数
                               m2 = 3), # eTTR::KDJ的m2参数
              label = "KDJ_9_3_3")
## [1] "KDJ_Strategy"
# 添加交易信号
# 买入信号
add.signal(strategy.st, 
           name = "sigCrossover", 
           arguments = list(columns = c("K.KDJ_9_3_3", "D.KDJ_9_3_3"), 
                            relationship = "gte"),
           label = "K_gte_D")
## [1] "KDJ_Strategy"
add.signal(strategy.st, 
           name = "sigThreshold", 
           arguments = list(column = "K.KDJ_9_3_3", 
                            threshold = 20, 
                            relationship = "lt", 
                            cross = FALSE),
           label = "K_lt_20")
## [1] "KDJ_Strategy"
add.signal(strategy.st, 
           name = "sigThreshold", 
           arguments = list(column = "D.KDJ_9_3_3", 
                            threshold = 20, 
                            relationship = "lt", 
                            cross = FALSE),
           label = "D_lt_20")
## [1] "KDJ_Strategy"
add.signal("KDJ_Strategy", 
           name = "sigFormula", 
           arguments = list(formula = "K_gte_D & K_lt_20 & D_lt_20",
                            columns = c("K_gte_D", "K_lt_20", "D_lt_20"),
                            cross = FALSE),
           label = "Buy_Signal")
## [1] "KDJ_Strategy"
# 卖出信号
add.signal(strategy.st, 
           name = "sigCrossover", 
           arguments = list(columns = c("K.KDJ_9_3_3", "D.KDJ_9_3_3"), 
                            relationship = "lte"),
           label = "K_lte_D")
## [1] "KDJ_Strategy"
add.signal(strategy.st, 
           name = "sigThreshold", 
           arguments = list(column = "K.KDJ_9_3_3", 
                            threshold = 70, 
                            relationship = "gt", 
                            cross = FALSE),
           label = "K_gt_70")
## [1] "KDJ_Strategy"
add.signal(strategy.st, 
           name = "sigThreshold", 
           arguments = list(column = "D.KDJ_9_3_3", 
                            threshold = 70, 
                            relationship = "gt", 
                            cross = FALSE),
           label = "D_gt_70")
## [1] "KDJ_Strategy"
add.signal("KDJ_Strategy", 
           name = "sigFormula", 
           arguments = list(formula = "K_lte_D & K_gt_70 & D_gt_70",
                            columns = c("K_lte_D", "K_gt_70", "D_gt_70"),
                            cross = FALSE),
           label = "Sell_Signal")
## [1] "KDJ_Strategy"
# 添加交易规则
add.rule(strategy.st, 
         name = "ruleSignal", 
         arguments = list(sigcol = "Buy_Signal", 
                          sigval = TRUE, 
                          orderqty = 10000, 
                          ordertype = "market", 
                          orderside = "long", 
                          replace = FALSE, 
                          prefer = "Close"),
         type = "enter", 
         label = "Enter_Long")
## [1] "KDJ_Strategy"
add.rule(strategy.st, 
         name = "ruleSignal", 
         arguments = list(sigcol = "Sell_Signal", 
                          sigval = TRUE, 
                          orderqty = "all", 
                          ordertype = "market", 
                          orderside = "long", 
                          replace = FALSE, 
                          prefer = "Close"),
         type = "exit", 
         label = "Exit_Long")
## [1] "KDJ_Strategy"
# 添加止损规则
add.rule(strategy.st, 
         name = "ruleSignal",  
         arguments = list(threshold = 0.05, 
                          sigcol = "Buy_Signal", 
                          sigval = TRUE, 
                          orderqty = "all", 
                          ordertype = "stoplimit", 
                          orderside = "long", 
                          replace = FALSE, 
                          prefer = "Close"),
         type = "chain", 
         parent = "Enter_Long", 
         label = "Stop_Loss")
## [1] "KDJ_Strategy"
# 策略回测
tryCatch({
  applyStrategy(strategy = strategy.st, portfolios = portfolio.st, mktdata = AAPL)
  
  # 更新结果
  updatePortf(portfolio.st)
  updateAcct(account.st)
  updateEndEq(account.st)
  
  # 分析回测结果
  port_ret <- PortfReturns(Account = account.st)

  if (nrow(port_ret) > 0) {
    # 计算绩效指标
    sharpe_ratio <- SharpeRatio.annualized(port_ret, Rf = 0.02)
    total_return <- Return.cumulative(port_ret)
    max_drawdown <- maxDrawdown(port_ret)
    
    cat("策略绩效指标:\n")
    cat("夏普比率:", round(sharpe_ratio, 4), "\n")
    cat("总回报率:", round(total_return, 4), "\n")
    cat("最大回撤:", round(max_drawdown, 4), "\n")
    
    # 绘制绩效图表
    charts.PerformanceSummary(port_ret)
  } else {
    cat("警告: 策略未产生任何交易\n")
  }
}, error = function(e) {
  cat("回测失败:", e$message, "\n")
  cat("请检查KDJ指标参数和数据格式\n")
})
## [1] "2018-11-28 00:00:00 AAPL 10000 @ 45.2350006103516"
## [1] "2018-12-27 00:00:00 AAPL 10000 @ 39.0374984741211"
## [1] "2019-02-11 00:00:00 AAPL -20000 @ 42.3574981689453"
## [1] "2022-01-26 00:00:00 AAPL 10000 @ 159.690002441406"
## [1] "2022-02-11 00:00:00 AAPL -10000 @ 168.639999389648"
## [1] "2022-12-30 00:00:00 AAPL 10000 @ 129.929992675781"
## [1] "2023-01-31 00:00:00 AAPL -10000 @ 144.289993286133"
## 策略绩效指标:
## 夏普比率: -10.8848 
## 总回报率: 0.2403 
## 最大回撤: 0.1357

参数优化

KDJ指标的主要参数包括RSV周期(n)、K值平滑因子(k)和D值平滑因子(d)。为了找到最佳参数组合,我们将进行参数网格搜索:

# 设置参数网格
n_values <- c(6, 18, 36, 55)# RSV周期(对应eTTR::KDJ的n参数)
m1_values <- c(2, 3, 4, 5)  # K值平滑因子(对应eTTR::KDJ的m1参数)
m2_values <- c(2, 3, 4, 5)  # D值平滑因子(对应eTTR::KDJ的m2参数)

# 创建参数组合
param_grid <- expand.grid(n = n_values, m1 = m1_values, m2 = m2_values)
n_combinations <- nrow(param_grid)

# 初始化结果存储
results <- data.frame(
  n = numeric(n_combinations),
  m1 = numeric(n_combinations),
  m2 = numeric(n_combinations),
  SharpeRatio = numeric(n_combinations),
  Return = numeric(n_combinations),
  MaxDrawdown = numeric(n_combinations),
  TradeCount = numeric(n_combinations),
  WinRate = numeric(n_combinations)
)

# 循环测试不同参数组合
for (i in 1:n_combinations) {
  cat(paste0("测试参数组合 ", i, "/", n_combinations, ": n=", 
             param_grid$n[i], ", m1=", param_grid$m1[i], ", m2=", param_grid$m2[i], "\n"))
  
  # 重置环境
  reset_strategy_env()
  # 设置初始参数
  initEq.st <- 1000000  # 初始资金
  portfolio.st <- "KDJ_Portfolio"
  strategy.st <- "KDJ_Strategy"
  account.st <- "KDJ_Account"
  symbols.st <- "AAPL"
  
  currency("USD")
  stock(symbols.st, currency = "USD", multiplier = 1)
  
  tryCatch({
    # 初始化投资组合、账户和订单
    initPortf(portfolio.st, symbols = symbols.st)
    initAcct(account.st, portfolios = portfolio.st, initEq = initEq.st)
    initOrders(portfolio = portfolio.st)
    strategy(strategy.st, store = TRUE)
    
    # 添加KDJ指标
    indicator_label <- paste0("KDJ_", param_grid$n[i], "_", param_grid$m1[i], "_", param_grid$m2[i])
    
    add.indicator(strategy.st, 
                  name = "KDJ", 
                  arguments = list(ohlc = quote(HLC(AAPL)), 
                                   n = param_grid$n[i], 
                                   m1 = param_grid$m1[i],  # eTTR::KDJ的m1参数(K值平滑因子)
                                   m2 = param_grid$m2[i]), # eTTR::KDJ的m2参数(D值平滑因子)
                  label = indicator_label)
    
    # 生成指标列名
    k_col <- paste0("K.", indicator_label)
    d_col <- paste0("D.", indicator_label)
    
    # 买入信号
    add.signal(strategy.st, "sigCrossover", 
               list(columns = c(k_col, d_col), relationship = "gte"),
               label = "K_gte_D")
    
    add.signal(strategy.st, "sigThreshold", 
               list(column = k_col, threshold = 20, relationship = "lt"),
               label = "K_lt_20")
    
    add.signal(strategy.st, "sigThreshold", 
               list(column = d_col, threshold = 20, relationship = "lt"),
               label = "D_lt_20")
    
    add.signal(strategy.st, "sigFormula", 
               list(signals = c("K_gte_D", "K_lt_20", "D_lt_20"), 
                    formula = "K_gte_D & K_lt_20 & D_lt_20"),
               label = "Buy_Signal")
    
    # 卖出信号
    add.signal(strategy.st, "sigCrossover", 
               list(columns = c(k_col, d_col), relationship = "lte"),
               label = "K_lte_D")
    
    add.signal(strategy.st, "sigThreshold", 
               list(column = k_col, threshold = 70, relationship = "gt"),
               label = "K_gt_70")
    
    add.signal(strategy.st, "sigThreshold", 
               list(column = d_col, threshold = 70, relationship = "gt"),
               label = "D_gt_70")
    
    add.signal(strategy.st, "sigFormula", 
               list(signals = c("K_lte_D", "K_gt_70", "D_gt_70"),
                    formula = "K_lte_D & K_gt_70 & D_gt_70"),
               label = "Sell_Signal")
    
    # 添加交易规则
    add.rule(strategy.st, "ruleSignal", 
             list(sigcol = "Buy_Signal", sigval = TRUE, 
                  orderqty = 250000, ordertype = "market", 
                  orderside = "long", replace = FALSE),
             type = "enter", label = "Enter_Long")
    
    add.rule(strategy.st, "ruleSignal", 
             list(sigcol = "Sell_Signal", sigval = TRUE, 
                  orderqty = "all", ordertype = "market", 
                  orderside = "long", replace = FALSE),
             type = "exit", label = "Exit_Long")
    
    # 添加止损规则
    add.rule(strategy.st, "ruleSignal", 
             list(threshold = 0.10, 
                  sigcol = "Buy_Signal", 
                  sigval = TRUE,
                  orderqty = "all", 
                  ordertype = "stoplimit", 
                  orderside = "long", 
                  replace = FALSE),
             type = "chain", 
             parent = "Enter_Long", 
             label = "Stop_Loss_10%")
    
    # 运行回测
    out <- applyStrategy(strategy = strategy.st, 
                         portfolios = portfolio.st, 
                         mktdata = AAPL)
    
    # 更新回测结果
    updatePortf(portfolio.st)
    updateAcct(account.st)
    updateEndEq(account.st)
    
    # 获取策略收益
    port_ret <- PortfReturns(Account = account.st)
    
    # 计算评估指标
    if (nrow(port_ret) > 0) {
      sharpe_ratio <- SharpeRatio.annualized(port_ret, Rf = 0.02,scale = 252)
      total_return <- Return.cumulative(port_ret)
      max_drawdown <- maxDrawdown(port_ret)
      
      # 交易分析
      trades <- getTxns(Portfolio = portfolio.st, Symbol = "AAPL")
      trade_count <- nrow(trades)
      
      win_rate_result <- calculate_portfolio_win_rates(tradeStats(portfolio.st))
      win_rate <- as.numeric(win_rate_result[,"Win_Rate"])
      
      # 存储结果
      results[i, ] <- c(param_grid$n[i], param_grid$m1[i], param_grid$m2[i], 
                        sharpe_ratio, total_return, max_drawdown, trade_count, win_rate)
      
      cat(paste0("✅ 测试完成 | Sharpe: ", round(sharpe_ratio, 4), 
                 " | 总收益: ", round(total_return, 4), 
                 " | 最大回撤: ", round(max_drawdown, 4), 
                 " | 交易次数: ", trade_count, 
                 " | 胜率: ", round(win_rate, 2), "\n"))
    } else {
      cat("⚠️ 警告: 无交易记录,可能参数设置过严\n")
    }
  }, error = function(e) {
    cat(paste0("❌ 策略执行失败 | 参数组合 ", i, " | 错误: ", e$message, "\n"))
  })
}
## 测试参数组合 1/64: n=6, m1=2, m2=2
## 策略环境已重置
## [1] "2018-02-01 00:00:00 AAPL 250000 @ 41.9449996948242"
## [1] "2018-02-21 00:00:00 AAPL -250000 @ 42.7675018310547"
## [1] "2018-11-16 00:00:00 AAPL 250000 @ 48.3824996948242"
## [1] "2018-11-27 00:00:00 AAPL 250000 @ 43.560001373291"
## [1] "2019-02-08 00:00:00 AAPL -5e+05 @ 42.6025009155273"
## [1] "2019-05-31 00:00:00 AAPL 250000 @ 43.7675018310547"
## [1] "2019-06-04 00:00:00 AAPL 250000 @ 44.9099998474121"
## [1] "2019-06-14 00:00:00 AAPL -5e+05 @ 48.185001373291"
## [1] "2020-03-02 00:00:00 AAPL 250000 @ 74.7024993896484"
## [1] "2020-03-24 00:00:00 AAPL 250000 @ 61.7200012207031"
## [1] "2020-04-20 00:00:00 AAPL -5e+05 @ 69.2324981689453"
## [1] "2021-09-22 00:00:00 AAPL 250000 @ 145.850006103516"
## [1] "2021-10-25 00:00:00 AAPL -250000 @ 148.639999389648"
## [1] "2022-06-16 00:00:00 AAPL 250000 @ 130.059997558594"
## [1] "2022-06-21 00:00:00 AAPL 250000 @ 135.869995117188"
## [1] "2022-07-12 00:00:00 AAPL -5e+05 @ 145.860000610352"
## [1] "2022-09-02 00:00:00 AAPL 250000 @ 155.809997558594"
## [1] "2022-09-08 00:00:00 AAPL 250000 @ 154.460006713867"
## [1] "2022-10-04 00:00:00 AAPL 250000 @ 146.100006103516"
## [1] "2022-10-27 00:00:00 AAPL -750000 @ 144.800003051758"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -1.0115 | 最大回撤: 1.0115 | 交易次数: 21 | 胜率: 0.71
## 测试参数组合 2/64: n=18, m1=2, m2=2
## 策略环境已重置
## [1] "2018-02-12 00:00:00 AAPL 250000 @ 40.6775016784668"
## [1] "2018-03-02 00:00:00 AAPL -250000 @ 44.0525016784668"
## [1] "2018-04-04 00:00:00 AAPL 250000 @ 42.9025001525879"
## [1] "2018-04-20 00:00:00 AAPL -250000 @ 41.4300003051758"
## [1] "2018-05-01 00:00:00 AAPL 250000 @ 42.2750015258789"
## [1] "2018-05-15 00:00:00 AAPL -250000 @ 46.6100006103516"
## [1] "2018-11-19 00:00:00 AAPL 250000 @ 46.4650001525879"
## [1] "2018-11-27 00:00:00 AAPL 250000 @ 43.560001373291"
## [1] "2018-12-12 00:00:00 AAPL 250000 @ 42.2750015258789"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-02-08 00:00:00 AAPL -1e+06 @ 42.6025009155273"
## [1] "2019-05-31 00:00:00 AAPL 250000 @ 43.7675018310547"
## [1] "2019-06-04 00:00:00 AAPL 250000 @ 44.9099998474121"
## [1] "2019-06-26 00:00:00 AAPL -5e+05 @ 49.9500007629395"
## [1] "2020-09-16 00:00:00 AAPL 250000 @ 112.129997253418"
## [1] "2020-09-22 00:00:00 AAPL 250000 @ 111.809997558594"
## [1] "2020-10-15 00:00:00 AAPL -5e+05 @ 120.709999084473"
## [1] "2021-03-10 00:00:00 AAPL 250000 @ 119.980003356934"
## [1] "2021-04-15 00:00:00 AAPL -250000 @ 134.5"
## [1] "2021-10-04 00:00:00 AAPL 250000 @ 139.139999389648"
## [1] "2021-10-06 00:00:00 AAPL 250000 @ 142"
## [1] "2021-10-26 00:00:00 AAPL -5e+05 @ 149.320007324219"
## [1] "2022-01-25 00:00:00 AAPL 250000 @ 159.779998779297"
## [1] "2022-02-08 00:00:00 AAPL -250000 @ 174.830001831055"
## [1] "2022-05-16 00:00:00 AAPL 250000 @ 145.539993286133"
## [1] "2022-07-19 00:00:00 AAPL -250000 @ 151"
## [1] "2022-09-12 00:00:00 AAPL 250000 @ 163.429992675781"
## [1] "2022-09-20 00:00:00 AAPL 250000 @ 156.899993896484"
## [1] "2022-10-28 00:00:00 AAPL -5e+05 @ 155.740005493164"
## [1] "2022-12-22 00:00:00 AAPL 250000 @ 132.229995727539"
## [1] "2022-12-30 00:00:00 AAPL 250000 @ 129.929992675781"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-01-31 00:00:00 AAPL -750000 @ 144.289993286133"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1352 | 总收益: -1.0279 | 最大回撤: 1.0108 | 交易次数: 34 | 胜率: 0.75
## 测试参数组合 3/64: n=36, m1=2, m2=2
## 策略环境已重置
## [1] "2018-05-01 00:00:00 AAPL 250000 @ 42.2750015258789"
## [1] "2018-05-15 00:00:00 AAPL -250000 @ 46.6100006103516"
## [1] "2018-11-19 00:00:00 AAPL 250000 @ 46.4650001525879"
## [1] "2018-11-27 00:00:00 AAPL 250000 @ 43.560001373291"
## [1] "2018-12-13 00:00:00 AAPL 250000 @ 42.7374992370605"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-02-11 00:00:00 AAPL -1250000 @ 42.3574981689453"
## [1] "2019-06-04 00:00:00 AAPL 250000 @ 44.9099998474121"
## [1] "2019-07-09 00:00:00 AAPL -250000 @ 50.310001373291"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-04-21 00:00:00 AAPL -250000 @ 67.0924987792969"
## [1] "2021-03-10 00:00:00 AAPL 250000 @ 119.980003356934"
## [1] "2021-04-21 00:00:00 AAPL -250000 @ 133.5"
## [1] "2021-06-07 00:00:00 AAPL 250000 @ 125.900001525879"
## [1] "2021-07-07 00:00:00 AAPL -250000 @ 144.570007324219"
## [1] "2021-10-04 00:00:00 AAPL 250000 @ 139.139999389648"
## [1] "2021-10-06 00:00:00 AAPL 250000 @ 142"
## [1] "2021-11-11 00:00:00 AAPL -5e+05 @ 147.869995117188"
## [1] "2022-05-16 00:00:00 AAPL 250000 @ 145.539993286133"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-06-22 00:00:00 AAPL 250000 @ 135.350006103516"
## [1] "2022-07-26 00:00:00 AAPL -750000 @ 151.600006103516"
## [1] "2022-09-20 00:00:00 AAPL 250000 @ 156.899993896484"
## [1] "2022-09-29 00:00:00 AAPL 250000 @ 142.479995727539"
## [1] "2022-10-04 00:00:00 AAPL 250000 @ 146.100006103516"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2022-12-22 00:00:00 AAPL 250000 @ 132.229995727539"
## [1] "2022-12-30 00:00:00 AAPL 250000 @ 129.929992675781"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-07 00:00:00 AAPL -1750000 @ 154.649993896484"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: 41.4412 | 总收益: 3.30279074337661e+25 | 最大回撤: 3126.5533 | 交易次数: 32 | 胜率: 1
## 测试参数组合 4/64: n=55, m1=2, m2=2
## 策略环境已重置
## [1] "2018-11-19 00:00:00 AAPL 250000 @ 46.4650001525879"
## [1] "2018-11-27 00:00:00 AAPL 250000 @ 43.560001373291"
## [1] "2018-12-13 00:00:00 AAPL 250000 @ 42.7374992370605"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-01-16 00:00:00 AAPL 250000 @ 38.7350006103516"
## [1] "2019-01-28 00:00:00 AAPL 250000 @ 39.0750007629395"
## [1] "2019-03-07 00:00:00 AAPL -1750000 @ 43.125"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-07-12 00:00:00 AAPL -250000 @ 50.8250007629395"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-05-18 00:00:00 AAPL -250000 @ 78.7399978637695"
## [1] "2021-03-10 00:00:00 AAPL 250000 @ 119.980003356934"
## [1] "2021-03-30 00:00:00 AAPL 250000 @ 119.900001525879"
## [1] "2021-04-01 00:00:00 AAPL 250000 @ 123"
## [1] "2021-04-23 00:00:00 AAPL -750000 @ 134.320007324219"
## [1] "2021-10-04 00:00:00 AAPL 250000 @ 139.139999389648"
## [1] "2021-10-06 00:00:00 AAPL 250000 @ 142"
## [1] "2021-11-29 00:00:00 AAPL -5e+05 @ 160.240005493164"
## [1] "2022-05-16 00:00:00 AAPL 250000 @ 145.539993286133"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-06-22 00:00:00 AAPL 250000 @ 135.350006103516"
## [1] "2022-08-09 00:00:00 AAPL -750000 @ 164.919998168945"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2022-12-22 00:00:00 AAPL 250000 @ 132.229995727539"
## [1] "2022-12-30 00:00:00 AAPL 250000 @ 129.929992675781"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-10 00:00:00 AAPL -1250000 @ 151.009994506836"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.0517 | 总收益: 126892019.8311 | 最大回撤: 6.8141 | 交易次数: 30 | 胜率: 1
## 测试参数组合 5/64: n=6, m1=3, m2=2
## 策略环境已重置
## [1] "2018-11-27 00:00:00 AAPL 250000 @ 43.560001373291"
## [1] "2019-02-08 00:00:00 AAPL -250000 @ 42.6025009155273"
## [1] "2019-05-31 00:00:00 AAPL 250000 @ 43.7675018310547"
## [1] "2019-06-04 00:00:00 AAPL 250000 @ 44.9099998474121"
## [1] "2019-06-17 00:00:00 AAPL -5e+05 @ 48.4724998474121"
## [1] "2022-09-08 00:00:00 AAPL 250000 @ 154.460006713867"
## [1] "2023-01-19 00:00:00 AAPL -250000 @ 135.270004272461"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -1 | 最大回撤: 1.2291 | 交易次数: 8 | 胜率: 0.33
## 测试参数组合 6/64: n=18, m1=3, m2=2
## 策略环境已重置
## [1] "2018-02-07 00:00:00 AAPL 250000 @ 39.8849983215332"
## [1] "2018-03-02 00:00:00 AAPL -250000 @ 44.0525016784668"
## [1] "2018-04-04 00:00:00 AAPL 250000 @ 42.9025001525879"
## [1] "2018-04-20 00:00:00 AAPL -250000 @ 41.4300003051758"
## [1] "2018-11-19 00:00:00 AAPL 250000 @ 46.4650001525879"
## [1] "2018-11-28 00:00:00 AAPL 250000 @ 45.2350006103516"
## [1] "2018-12-12 00:00:00 AAPL 250000 @ 42.2750015258789"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-02-08 00:00:00 AAPL -1e+06 @ 42.6025009155273"
## [1] "2019-06-04 00:00:00 AAPL 250000 @ 44.9099998474121"
## [1] "2019-06-26 00:00:00 AAPL -250000 @ 49.9500007629395"
## [1] "2020-09-22 00:00:00 AAPL 250000 @ 111.809997558594"
## [1] "2020-10-16 00:00:00 AAPL -250000 @ 119.019996643066"
## [1] "2021-02-24 00:00:00 AAPL 250000 @ 125.349998474121"
## [1] "2021-03-11 00:00:00 AAPL 250000 @ 121.959999084473"
## [1] "2021-04-15 00:00:00 AAPL -5e+05 @ 134.5"
## [1] "2021-10-07 00:00:00 AAPL 250000 @ 143.289993286133"
## [1] "2021-10-28 00:00:00 AAPL -250000 @ 152.570007324219"
## [1] "2022-01-26 00:00:00 AAPL 250000 @ 159.690002441406"
## [1] "2022-02-14 00:00:00 AAPL -250000 @ 168.880004882812"
## [1] "2022-04-29 00:00:00 AAPL 250000 @ 157.649993896484"
## [1] "2022-05-16 00:00:00 AAPL 250000 @ 145.539993286133"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-07-19 00:00:00 AAPL -750000 @ 151"
## [1] "2022-09-12 00:00:00 AAPL 250000 @ 163.429992675781"
## [1] "2022-09-20 00:00:00 AAPL 250000 @ 156.899993896484"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2022-10-28 00:00:00 AAPL -1e+06 @ 155.740005493164"
## [1] "2022-12-22 00:00:00 AAPL 250000 @ 132.229995727539"
## [1] "2023-01-03 00:00:00 AAPL 250000 @ 125.069999694824"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-01-31 00:00:00 AAPL -750000 @ 144.289993286133"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.0869 | 总收益: 1085.4944 | 最大回撤: 2.99 | 交易次数: 34 | 胜率: 0.82
## 测试参数组合 7/64: n=36, m1=3, m2=2
## 策略环境已重置
## [1] "2018-11-19 00:00:00 AAPL 250000 @ 46.4650001525879"
## [1] "2018-11-28 00:00:00 AAPL 250000 @ 45.2350006103516"
## [1] "2018-12-14 00:00:00 AAPL 250000 @ 41.3699989318848"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-02-12 00:00:00 AAPL -1250000 @ 42.7224998474121"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-07-10 00:00:00 AAPL -250000 @ 50.8074989318848"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-05-13 00:00:00 AAPL -250000 @ 76.9124984741211"
## [1] "2021-03-12 00:00:00 AAPL 250000 @ 121.029998779297"
## [1] "2021-04-22 00:00:00 AAPL -250000 @ 131.940002441406"
## [1] "2021-10-07 00:00:00 AAPL 250000 @ 143.289993286133"
## [1] "2021-11-11 00:00:00 AAPL -250000 @ 147.869995117188"
## [1] "2022-05-16 00:00:00 AAPL 250000 @ 145.539993286133"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-06-22 00:00:00 AAPL 250000 @ 135.350006103516"
## [1] "2022-07-26 00:00:00 AAPL -750000 @ 151.600006103516"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2023-01-03 00:00:00 AAPL 250000 @ 125.069999694824"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-10 00:00:00 AAPL -1e+06 @ 151.009994506836"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1004 | 总收益: -0.9874 | 最大回撤: 4.434 | 交易次数: 24 | 胜率: 1
## 测试参数组合 8/64: n=55, m1=3, m2=2
## 策略环境已重置
## [1] "2018-11-19 00:00:00 AAPL 250000 @ 46.4650001525879"
## [1] "2018-11-28 00:00:00 AAPL 250000 @ 45.2350006103516"
## [1] "2018-12-14 00:00:00 AAPL 250000 @ 41.3699989318848"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-01-16 00:00:00 AAPL 250000 @ 38.7350006103516"
## [1] "2019-01-28 00:00:00 AAPL 250000 @ 39.0750007629395"
## [1] "2019-03-08 00:00:00 AAPL -1750000 @ 43.2275009155273"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-08-01 00:00:00 AAPL -250000 @ 52.1074981689453"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-05-28 00:00:00 AAPL -250000 @ 79.5625"
## [1] "2021-03-12 00:00:00 AAPL 250000 @ 121.029998779297"
## [1] "2021-04-01 00:00:00 AAPL 250000 @ 123"
## [1] "2021-05-03 00:00:00 AAPL -5e+05 @ 132.539993286133"
## [1] "2021-10-07 00:00:00 AAPL 250000 @ 143.289993286133"
## [1] "2021-11-29 00:00:00 AAPL -250000 @ 160.240005493164"
## [1] "2022-03-17 00:00:00 AAPL 250000 @ 160.619995117188"
## [1] "2022-04-07 00:00:00 AAPL -250000 @ 172.139999389648"
## [1] "2022-05-17 00:00:00 AAPL 250000 @ 149.240005493164"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-06-22 00:00:00 AAPL 250000 @ 135.350006103516"
## [1] "2022-08-10 00:00:00 AAPL -750000 @ 169.240005493164"
## [1] "2022-10-06 00:00:00 AAPL 250000 @ 145.429992675781"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2022-11-11 00:00:00 AAPL 250000 @ 149.699996948242"
## [1] "2023-01-03 00:00:00 AAPL 250000 @ 125.069999694824"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-13 00:00:00 AAPL -1250000 @ 153.850006103516"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.0429 | 总收益: 1131484107.8157 | 最大回撤: 731.8759 | 交易次数: 30 | 胜率: 1
## 测试参数组合 9/64: n=6, m1=4, m2=2
## 策略环境已重置
## [1] "2018-11-28 00:00:00 AAPL 250000 @ 45.2350006103516"
## [1] "2019-02-08 00:00:00 AAPL -250000 @ 42.6025009155273"
## [1] "2019-06-04 00:00:00 AAPL 250000 @ 44.9099998474121"
## [1] "2019-06-17 00:00:00 AAPL -250000 @ 48.4724998474121"
## [1] "2022-09-08 00:00:00 AAPL 250000 @ 154.460006713867"
## [1] "2023-01-20 00:00:00 AAPL -250000 @ 137.869995117188"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -1 | 最大回撤: 1.0966 | 交易次数: 7 | 胜率: 0.33
## 测试参数组合 10/64: n=18, m1=4, m2=2
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-13 00:00:00 AAPL 250000 @ 42.7374992370605"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-02-08 00:00:00 AAPL -750000 @ 42.6025009155273"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-06-26 00:00:00 AAPL -250000 @ 49.9500007629395"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-04-21 00:00:00 AAPL -250000 @ 67.0924987792969"
## [1] "2020-09-23 00:00:00 AAPL 250000 @ 107.120002746582"
## [1] "2020-09-28 00:00:00 AAPL 250000 @ 114.959999084473"
## [1] "2020-10-19 00:00:00 AAPL -5e+05 @ 115.980003356934"
## [1] "2021-10-07 00:00:00 AAPL 250000 @ 143.289993286133"
## [1] "2021-11-01 00:00:00 AAPL -250000 @ 148.960006713867"
## [1] "2022-04-29 00:00:00 AAPL 250000 @ 157.649993896484"
## [1] "2022-05-03 00:00:00 AAPL 250000 @ 159.479995727539"
## [1] "2022-05-16 00:00:00 AAPL 250000 @ 145.539993286133"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-07-26 00:00:00 AAPL -1e+06 @ 151.600006103516"
## [1] "2022-09-20 00:00:00 AAPL 250000 @ 156.899993896484"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2022-12-22 00:00:00 AAPL 250000 @ 132.229995727539"
## [1] "2023-01-03 00:00:00 AAPL 250000 @ 125.069999694824"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-07 00:00:00 AAPL -1500000 @ 154.649993896484"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -1.63824951922408e+31 | 最大回撤: 537.8647 | 交易次数: 26 | 胜率: 1
## 测试参数组合 11/64: n=36, m1=4, m2=2
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-14 00:00:00 AAPL 250000 @ 41.3699989318848"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-03-07 00:00:00 AAPL -1e+06 @ 43.125"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-07-22 00:00:00 AAPL -250000 @ 51.8050003051758"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-05-14 00:00:00 AAPL -250000 @ 77.3850021362305"
## [1] "2021-03-12 00:00:00 AAPL 250000 @ 121.029998779297"
## [1] "2021-04-23 00:00:00 AAPL -250000 @ 134.320007324219"
## [1] "2021-10-07 00:00:00 AAPL 250000 @ 143.289993286133"
## [1] "2021-11-11 00:00:00 AAPL -250000 @ 147.869995117188"
## [1] "2022-05-18 00:00:00 AAPL 250000 @ 140.820007324219"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-06-23 00:00:00 AAPL 250000 @ 138.270004272461"
## [1] "2022-07-27 00:00:00 AAPL -750000 @ 156.789993286133"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2023-01-03 00:00:00 AAPL 250000 @ 125.069999694824"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-10 00:00:00 AAPL -1e+06 @ 151.009994506836"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -2881.9695 | 最大回撤: 77.341 | 交易次数: 23 | 胜率: 1
## 测试参数组合 12/64: n=55, m1=4, m2=2
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-14 00:00:00 AAPL 250000 @ 41.3699989318848"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-03-08 00:00:00 AAPL -1e+06 @ 43.2275009155273"
## [1] "2019-06-06 00:00:00 AAPL 250000 @ 46.3050003051758"
## [1] "2019-08-01 00:00:00 AAPL -250000 @ 52.1074981689453"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-06-12 00:00:00 AAPL -250000 @ 84.6999969482422"
## [1] "2021-03-12 00:00:00 AAPL 250000 @ 121.029998779297"
## [1] "2021-04-01 00:00:00 AAPL 250000 @ 123"
## [1] "2021-05-03 00:00:00 AAPL -5e+05 @ 132.539993286133"
## [1] "2021-10-08 00:00:00 AAPL 250000 @ 142.899993896484"
## [1] "2021-11-29 00:00:00 AAPL -250000 @ 160.240005493164"
## [1] "2022-05-18 00:00:00 AAPL 250000 @ 140.820007324219"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-06-23 00:00:00 AAPL 250000 @ 138.270004272461"
## [1] "2022-08-19 00:00:00 AAPL -750000 @ 171.520004272461"
## [1] "2022-10-06 00:00:00 AAPL 250000 @ 145.429992675781"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2022-10-18 00:00:00 AAPL 250000 @ 143.75"
## [1] "2022-11-11 00:00:00 AAPL 250000 @ 149.699996948242"
## [1] "2023-01-03 00:00:00 AAPL 250000 @ 125.069999694824"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-22 00:00:00 AAPL -1500000 @ 148.910003662109"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: 14.5922 | 总收益: 5.15945247500254e+22 | 最大回撤: 537.8647 | 交易次数: 26 | 胜率: 1
## 测试参数组合 13/64: n=6, m1=5, m2=2
## 策略环境已重置
## [1] "2018-11-28 00:00:00 AAPL 250000 @ 45.2350006103516"
## [1] "2019-02-08 00:00:00 AAPL -250000 @ 42.6025009155273"
## [1] "2022-09-09 00:00:00 AAPL 250000 @ 157.369995117188"
## [1] "2023-01-31 00:00:00 AAPL -250000 @ 144.289993286133"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -1 | 最大回撤: 1.0252 | 交易次数: 5 | 胜率: 0
## 测试参数组合 14/64: n=18, m1=5, m2=2
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-13 00:00:00 AAPL 250000 @ 42.7374992370605"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-02-11 00:00:00 AAPL -750000 @ 42.3574981689453"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-07-01 00:00:00 AAPL -250000 @ 50.3875007629395"
## [1] "2020-09-28 00:00:00 AAPL 250000 @ 114.959999084473"
## [1] "2020-10-19 00:00:00 AAPL -250000 @ 115.980003356934"
## [1] "2021-10-07 00:00:00 AAPL 250000 @ 143.289993286133"
## [1] "2021-11-02 00:00:00 AAPL -250000 @ 150.020004272461"
## [1] "2022-05-17 00:00:00 AAPL 250000 @ 149.240005493164"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-07-27 00:00:00 AAPL -5e+05 @ 156.789993286133"
## [1] "2022-09-20 00:00:00 AAPL 250000 @ 156.899993896484"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2023-01-03 00:00:00 AAPL 250000 @ 125.069999694824"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-07 00:00:00 AAPL -1250000 @ 154.649993896484"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: 0.3329 | 总收益: 2693125516525510 | 最大回撤: 731.8759 | 交易次数: 20 | 胜率: 1
## 测试参数组合 15/64: n=36, m1=5, m2=2
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-14 00:00:00 AAPL 250000 @ 41.3699989318848"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-03-07 00:00:00 AAPL -1e+06 @ 43.125"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-07-29 00:00:00 AAPL -250000 @ 52.4199981689453"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-05-14 00:00:00 AAPL -250000 @ 77.3850021362305"
## [1] "2021-03-12 00:00:00 AAPL 250000 @ 121.029998779297"
## [1] "2021-04-30 00:00:00 AAPL -250000 @ 131.460006713867"
## [1] "2021-10-08 00:00:00 AAPL 250000 @ 142.899993896484"
## [1] "2021-11-11 00:00:00 AAPL -250000 @ 147.869995117188"
## [1] "2022-05-18 00:00:00 AAPL 250000 @ 140.820007324219"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-06-24 00:00:00 AAPL 250000 @ 141.660003662109"
## [1] "2022-08-10 00:00:00 AAPL -750000 @ 169.240005493164"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-22 00:00:00 AAPL -750000 @ 148.910003662109"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.0977 | 总收益: 4241.9639 | 最大回撤: 77.341 | 交易次数: 22 | 胜率: 1
## 测试参数组合 16/64: n=55, m1=5, m2=2
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-14 00:00:00 AAPL 250000 @ 41.3699989318848"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-03-25 00:00:00 AAPL -1e+06 @ 47.185001373291"
## [1] "2019-06-06 00:00:00 AAPL 250000 @ 46.3050003051758"
## [1] "2019-08-01 00:00:00 AAPL -250000 @ 52.1074981689453"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-06-12 00:00:00 AAPL -250000 @ 84.6999969482422"
## [1] "2021-03-16 00:00:00 AAPL 250000 @ 125.569999694824"
## [1] "2021-04-05 00:00:00 AAPL 250000 @ 125.900001525879"
## [1] "2021-05-05 00:00:00 AAPL -5e+05 @ 128.100006103516"
## [1] "2021-10-08 00:00:00 AAPL 250000 @ 142.899993896484"
## [1] "2021-11-29 00:00:00 AAPL -250000 @ 160.240005493164"
## [1] "2022-05-18 00:00:00 AAPL 250000 @ 140.820007324219"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-06-24 00:00:00 AAPL 250000 @ 141.660003662109"
## [1] "2022-08-22 00:00:00 AAPL -750000 @ 167.570007324219"
## [1] "2022-10-18 00:00:00 AAPL 250000 @ 143.75"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-22 00:00:00 AAPL -5e+05 @ 148.910003662109"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1193 | 总收益: -1 | 最大回撤: 37.159 | 交易次数: 22 | 胜率: 1
## 测试参数组合 17/64: n=6, m1=2, m2=3
## 策略环境已重置
## [1] "2018-11-27 00:00:00 AAPL 250000 @ 43.560001373291"
## [1] "2019-02-08 00:00:00 AAPL -250000 @ 42.6025009155273"
## [1] "2019-05-31 00:00:00 AAPL 250000 @ 43.7675018310547"
## [1] "2019-06-04 00:00:00 AAPL 250000 @ 44.9099998474121"
## [1] "2019-06-17 00:00:00 AAPL -5e+05 @ 48.4724998474121"
## [1] "2022-09-08 00:00:00 AAPL 250000 @ 154.460006713867"
## [1] "2023-01-19 00:00:00 AAPL -250000 @ 135.270004272461"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -1 | 最大回撤: 1.2291 | 交易次数: 8 | 胜率: 0.33
## 测试参数组合 18/64: n=18, m1=2, m2=3
## 策略环境已重置
## [1] "2018-04-04 00:00:00 AAPL 250000 @ 42.9025001525879"
## [1] "2018-04-20 00:00:00 AAPL -250000 @ 41.4300003051758"
## [1] "2018-11-19 00:00:00 AAPL 250000 @ 46.4650001525879"
## [1] "2018-11-28 00:00:00 AAPL 250000 @ 45.2350006103516"
## [1] "2018-12-12 00:00:00 AAPL 250000 @ 42.2750015258789"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-02-08 00:00:00 AAPL -1e+06 @ 42.6025009155273"
## [1] "2019-06-04 00:00:00 AAPL 250000 @ 44.9099998474121"
## [1] "2019-06-26 00:00:00 AAPL -250000 @ 49.9500007629395"
## [1] "2020-09-22 00:00:00 AAPL 250000 @ 111.809997558594"
## [1] "2020-10-16 00:00:00 AAPL -250000 @ 119.019996643066"
## [1] "2021-03-11 00:00:00 AAPL 250000 @ 121.959999084473"
## [1] "2021-04-15 00:00:00 AAPL -250000 @ 134.5"
## [1] "2022-01-26 00:00:00 AAPL 250000 @ 159.690002441406"
## [1] "2022-02-14 00:00:00 AAPL -250000 @ 168.880004882812"
## [1] "2022-05-16 00:00:00 AAPL 250000 @ 145.539993286133"
## [1] "2022-07-19 00:00:00 AAPL -250000 @ 151"
## [1] "2022-09-12 00:00:00 AAPL 250000 @ 163.429992675781"
## [1] "2022-09-20 00:00:00 AAPL 250000 @ 156.899993896484"
## [1] "2022-10-28 00:00:00 AAPL -5e+05 @ 155.740005493164"
## [1] "2022-12-22 00:00:00 AAPL 250000 @ 132.229995727539"
## [1] "2023-01-03 00:00:00 AAPL 250000 @ 125.069999694824"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-01-31 00:00:00 AAPL -750000 @ 144.289993286133"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1471 | 总收益: -1 | 最大回撤: 1.0039 | 交易次数: 25 | 胜率: 0.67
## 测试参数组合 19/64: n=36, m1=2, m2=3
## 策略环境已重置
## [1] "2018-11-19 00:00:00 AAPL 250000 @ 46.4650001525879"
## [1] "2018-11-28 00:00:00 AAPL 250000 @ 45.2350006103516"
## [1] "2018-12-14 00:00:00 AAPL 250000 @ 41.3699989318848"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-02-12 00:00:00 AAPL -1250000 @ 42.7224998474121"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-07-10 00:00:00 AAPL -250000 @ 50.8074989318848"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-05-13 00:00:00 AAPL -250000 @ 76.9124984741211"
## [1] "2021-03-12 00:00:00 AAPL 250000 @ 121.029998779297"
## [1] "2021-04-22 00:00:00 AAPL -250000 @ 131.940002441406"
## [1] "2021-10-07 00:00:00 AAPL 250000 @ 143.289993286133"
## [1] "2021-11-11 00:00:00 AAPL -250000 @ 147.869995117188"
## [1] "2022-05-16 00:00:00 AAPL 250000 @ 145.539993286133"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-06-22 00:00:00 AAPL 250000 @ 135.350006103516"
## [1] "2022-07-26 00:00:00 AAPL -750000 @ 151.600006103516"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2023-01-03 00:00:00 AAPL 250000 @ 125.069999694824"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-10 00:00:00 AAPL -1e+06 @ 151.009994506836"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1004 | 总收益: -0.9874 | 最大回撤: 4.434 | 交易次数: 24 | 胜率: 1
## 测试参数组合 20/64: n=55, m1=2, m2=3
## 策略环境已重置
## [1] "2018-11-19 00:00:00 AAPL 250000 @ 46.4650001525879"
## [1] "2018-11-28 00:00:00 AAPL 250000 @ 45.2350006103516"
## [1] "2018-12-14 00:00:00 AAPL 250000 @ 41.3699989318848"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-01-16 00:00:00 AAPL 250000 @ 38.7350006103516"
## [1] "2019-01-28 00:00:00 AAPL 250000 @ 39.0750007629395"
## [1] "2019-03-08 00:00:00 AAPL -1750000 @ 43.2275009155273"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-08-01 00:00:00 AAPL -250000 @ 52.1074981689453"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-05-28 00:00:00 AAPL -250000 @ 79.5625"
## [1] "2021-03-12 00:00:00 AAPL 250000 @ 121.029998779297"
## [1] "2021-04-01 00:00:00 AAPL 250000 @ 123"
## [1] "2021-05-03 00:00:00 AAPL -5e+05 @ 132.539993286133"
## [1] "2021-10-07 00:00:00 AAPL 250000 @ 143.289993286133"
## [1] "2021-11-29 00:00:00 AAPL -250000 @ 160.240005493164"
## [1] "2022-05-17 00:00:00 AAPL 250000 @ 149.240005493164"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-06-22 00:00:00 AAPL 250000 @ 135.350006103516"
## [1] "2022-08-10 00:00:00 AAPL -750000 @ 169.240005493164"
## [1] "2022-10-06 00:00:00 AAPL 250000 @ 145.429992675781"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2023-01-03 00:00:00 AAPL 250000 @ 125.069999694824"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-13 00:00:00 AAPL -1e+06 @ 153.850006103516"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.0912 | 总收益: -0.9686 | 最大回撤: 8.3985 | 交易次数: 27 | 胜率: 1
## 测试参数组合 21/64: n=6, m1=3, m2=3
## 策略环境已重置
## [1] "2018-11-28 00:00:00 AAPL 250000 @ 45.2350006103516"
## [1] "2019-02-08 00:00:00 AAPL -250000 @ 42.6025009155273"
## [1] "2022-09-08 00:00:00 AAPL 250000 @ 154.460006713867"
## [1] "2023-01-20 00:00:00 AAPL -250000 @ 137.869995117188"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -1 | 最大回撤: 1.0435 | 交易次数: 5 | 胜率: 0
## 测试参数组合 22/64: n=18, m1=3, m2=3
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-13 00:00:00 AAPL 250000 @ 42.7374992370605"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-02-11 00:00:00 AAPL -750000 @ 42.3574981689453"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-06-26 00:00:00 AAPL -250000 @ 49.9500007629395"
## [1] "2020-09-23 00:00:00 AAPL 250000 @ 107.120002746582"
## [1] "2020-09-28 00:00:00 AAPL 250000 @ 114.959999084473"
## [1] "2020-10-19 00:00:00 AAPL -5e+05 @ 115.980003356934"
## [1] "2021-10-07 00:00:00 AAPL 250000 @ 143.289993286133"
## [1] "2021-11-01 00:00:00 AAPL -250000 @ 148.960006713867"
## [1] "2022-04-29 00:00:00 AAPL 250000 @ 157.649993896484"
## [1] "2022-05-03 00:00:00 AAPL 250000 @ 159.479995727539"
## [1] "2022-05-17 00:00:00 AAPL 250000 @ 149.240005493164"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-07-26 00:00:00 AAPL -1e+06 @ 151.600006103516"
## [1] "2022-09-20 00:00:00 AAPL 250000 @ 156.899993896484"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2023-01-03 00:00:00 AAPL 250000 @ 125.069999694824"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-07 00:00:00 AAPL -1250000 @ 154.649993896484"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -8.66122433252946e+30 | 最大回撤: 1530.7447 | 交易次数: 23 | 胜率: 0.83
## 测试参数组合 23/64: n=36, m1=3, m2=3
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-14 00:00:00 AAPL 250000 @ 41.3699989318848"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-03-07 00:00:00 AAPL -1e+06 @ 43.125"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-07-22 00:00:00 AAPL -250000 @ 51.8050003051758"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-05-14 00:00:00 AAPL -250000 @ 77.3850021362305"
## [1] "2021-03-12 00:00:00 AAPL 250000 @ 121.029998779297"
## [1] "2021-04-23 00:00:00 AAPL -250000 @ 134.320007324219"
## [1] "2021-10-07 00:00:00 AAPL 250000 @ 143.289993286133"
## [1] "2021-11-11 00:00:00 AAPL -250000 @ 147.869995117188"
## [1] "2022-05-18 00:00:00 AAPL 250000 @ 140.820007324219"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-06-23 00:00:00 AAPL 250000 @ 138.270004272461"
## [1] "2022-07-27 00:00:00 AAPL -750000 @ 156.789993286133"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2023-01-03 00:00:00 AAPL 250000 @ 125.069999694824"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-13 00:00:00 AAPL -1e+06 @ 153.850006103516"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -11063.9561 | 最大回撤: 77.341 | 交易次数: 23 | 胜率: 1
## 测试参数组合 24/64: n=55, m1=3, m2=3
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-14 00:00:00 AAPL 250000 @ 41.3699989318848"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-03-08 00:00:00 AAPL -1e+06 @ 43.2275009155273"
## [1] "2019-06-06 00:00:00 AAPL 250000 @ 46.3050003051758"
## [1] "2019-08-01 00:00:00 AAPL -250000 @ 52.1074981689453"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-06-12 00:00:00 AAPL -250000 @ 84.6999969482422"
## [1] "2021-03-12 00:00:00 AAPL 250000 @ 121.029998779297"
## [1] "2021-04-05 00:00:00 AAPL 250000 @ 125.900001525879"
## [1] "2021-05-03 00:00:00 AAPL -5e+05 @ 132.539993286133"
## [1] "2021-10-08 00:00:00 AAPL 250000 @ 142.899993896484"
## [1] "2021-11-29 00:00:00 AAPL -250000 @ 160.240005493164"
## [1] "2022-05-18 00:00:00 AAPL 250000 @ 140.820007324219"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-06-24 00:00:00 AAPL 250000 @ 141.660003662109"
## [1] "2022-08-22 00:00:00 AAPL -750000 @ 167.570007324219"
## [1] "2022-10-07 00:00:00 AAPL 250000 @ 140.089996337891"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2022-10-18 00:00:00 AAPL 250000 @ 143.75"
## [1] "2022-11-11 00:00:00 AAPL 250000 @ 149.699996948242"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-22 00:00:00 AAPL -1250000 @ 148.910003662109"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: 15.9522 | 总收益: 1.24184050378993e+23 | 最大回撤: 1530.7447 | 交易次数: 25 | 胜率: 1
## 测试参数组合 25/64: n=6, m1=4, m2=3
## 策略环境已重置
## [1] "2022-09-09 00:00:00 AAPL 250000 @ 157.369995117188"
## [1] "2022-11-01 00:00:00 AAPL -250000 @ 150.649993896484"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.3884 | 总收益: -0.9997 | 最大回撤: 2.9111 | 交易次数: 3 | 胜率: 0
## 测试参数组合 26/64: n=18, m1=4, m2=3
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-13 00:00:00 AAPL 250000 @ 42.7374992370605"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-02-11 00:00:00 AAPL -750000 @ 42.3574981689453"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-07-01 00:00:00 AAPL -250000 @ 50.3875007629395"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-04-22 00:00:00 AAPL -250000 @ 69.0250015258789"
## [1] "2020-09-28 00:00:00 AAPL 250000 @ 114.959999084473"
## [1] "2020-10-20 00:00:00 AAPL -250000 @ 117.51000213623"
## [1] "2021-10-07 00:00:00 AAPL 250000 @ 143.289993286133"
## [1] "2021-11-02 00:00:00 AAPL -250000 @ 150.020004272461"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-07-27 00:00:00 AAPL -250000 @ 156.789993286133"
## [1] "2022-09-20 00:00:00 AAPL 250000 @ 156.899993896484"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-07 00:00:00 AAPL -1e+06 @ 154.649993896484"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.073 | 总收益: 19654821.038 | 最大回撤: 283.8463 | 交易次数: 20 | 胜率: 1
## 测试参数组合 27/64: n=36, m1=4, m2=3
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-08 00:00:00 AAPL 250000 @ 37.6875"
## [1] "2019-03-07 00:00:00 AAPL -750000 @ 43.125"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-07-29 00:00:00 AAPL -250000 @ 52.4199981689453"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-05-14 00:00:00 AAPL -250000 @ 77.3850021362305"
## [1] "2021-03-15 00:00:00 AAPL 250000 @ 123.98999786377"
## [1] "2021-04-30 00:00:00 AAPL -250000 @ 131.460006713867"
## [1] "2021-10-08 00:00:00 AAPL 250000 @ 142.899993896484"
## [1] "2021-11-12 00:00:00 AAPL -250000 @ 149.990005493164"
## [1] "2022-05-18 00:00:00 AAPL 250000 @ 140.820007324219"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-06-24 00:00:00 AAPL 250000 @ 141.660003662109"
## [1] "2022-08-10 00:00:00 AAPL -750000 @ 169.240005493164"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-22 00:00:00 AAPL -750000 @ 148.910003662109"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.0957 | 总收益: 71537.7174 | 最大回撤: 77.341 | 交易次数: 21 | 胜率: 1
## 测试参数组合 28/64: n=55, m1=4, m2=3
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-03-25 00:00:00 AAPL -750000 @ 47.185001373291"
## [1] "2019-06-06 00:00:00 AAPL 250000 @ 46.3050003051758"
## [1] "2019-08-02 00:00:00 AAPL -250000 @ 51.0050010681152"
## [1] "2020-03-26 00:00:00 AAPL 250000 @ 64.6100006103516"
## [1] "2020-06-12 00:00:00 AAPL -250000 @ 84.6999969482422"
## [1] "2021-03-16 00:00:00 AAPL 250000 @ 125.569999694824"
## [1] "2021-04-05 00:00:00 AAPL 250000 @ 125.900001525879"
## [1] "2021-05-05 00:00:00 AAPL -5e+05 @ 128.100006103516"
## [1] "2021-10-08 00:00:00 AAPL 250000 @ 142.899993896484"
## [1] "2021-12-06 00:00:00 AAPL -250000 @ 165.320007324219"
## [1] "2022-05-25 00:00:00 AAPL 250000 @ 140.520004272461"
## [1] "2022-06-24 00:00:00 AAPL 250000 @ 141.660003662109"
## [1] "2022-08-22 00:00:00 AAPL -5e+05 @ 167.570007324219"
## [1] "2022-10-18 00:00:00 AAPL 250000 @ 143.75"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-22 00:00:00 AAPL -5e+05 @ 148.910003662109"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -1 | 最大回撤: 13.259 | 交易次数: 20 | 胜率: 1
## 测试参数组合 29/64: n=6, m1=5, m2=3
## 策略环境已重置
## ❌ 策略执行失败 | 参数组合 29 | 错误: 输入必须是tradeStats函数的输出数据框
## 测试参数组合 30/64: n=18, m1=5, m2=3
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-13 00:00:00 AAPL 250000 @ 42.7374992370605"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-02-12 00:00:00 AAPL -750000 @ 42.7224998474121"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-07-09 00:00:00 AAPL -250000 @ 50.310001373291"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-07-27 00:00:00 AAPL -250000 @ 156.789993286133"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-09 00:00:00 AAPL -750000 @ 150.869995117188"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1318 | 总收益: -0.6638 | 最大回撤: 2.0731 | 交易次数: 13 | 胜率: 1
## 测试参数组合 31/64: n=36, m1=5, m2=3
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-03-08 00:00:00 AAPL -5e+05 @ 43.2275009155273"
## [1] "2019-06-06 00:00:00 AAPL 250000 @ 46.3050003051758"
## [1] "2019-07-31 00:00:00 AAPL -250000 @ 53.2599983215332"
## [1] "2020-03-26 00:00:00 AAPL 250000 @ 64.6100006103516"
## [1] "2020-05-15 00:00:00 AAPL -250000 @ 76.9274978637695"
## [1] "2021-03-16 00:00:00 AAPL 250000 @ 125.569999694824"
## [1] "2021-04-30 00:00:00 AAPL -250000 @ 131.460006713867"
## [1] "2021-10-08 00:00:00 AAPL 250000 @ 142.899993896484"
## [1] "2021-11-12 00:00:00 AAPL -250000 @ 149.990005493164"
## [1] "2022-05-25 00:00:00 AAPL 250000 @ 140.520004272461"
## [1] "2022-06-24 00:00:00 AAPL 250000 @ 141.660003662109"
## [1] "2022-08-22 00:00:00 AAPL -5e+05 @ 167.570007324219"
## [1] "2022-10-06 00:00:00 AAPL 250000 @ 145.429992675781"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2022-10-18 00:00:00 AAPL 250000 @ 143.75"
## [1] "2023-01-10 00:00:00 AAPL 250000 @ 130.729995727539"
## [1] "2023-02-22 00:00:00 AAPL -1e+06 @ 148.910003662109"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -394550425625.057 | 最大回撤: 283.8463 | 交易次数: 20 | 胜率: 1
## 测试参数组合 32/64: n=55, m1=5, m2=3
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-03-25 00:00:00 AAPL -750000 @ 47.185001373291"
## [1] "2020-03-26 00:00:00 AAPL 250000 @ 64.6100006103516"
## [1] "2020-06-12 00:00:00 AAPL -250000 @ 84.6999969482422"
## [1] "2021-03-16 00:00:00 AAPL 250000 @ 125.569999694824"
## [1] "2021-04-05 00:00:00 AAPL 250000 @ 125.900001525879"
## [1] "2021-05-05 00:00:00 AAPL -5e+05 @ 128.100006103516"
## [1] "2022-05-27 00:00:00 AAPL 250000 @ 149.639999389648"
## [1] "2022-06-27 00:00:00 AAPL 250000 @ 141.660003662109"
## [1] "2022-08-22 00:00:00 AAPL -5e+05 @ 167.570007324219"
## [1] "2022-10-19 00:00:00 AAPL 250000 @ 143.860000610352"
## [1] "2023-01-10 00:00:00 AAPL 250000 @ 130.729995727539"
## [1] "2023-02-22 00:00:00 AAPL -5e+05 @ 148.910003662109"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1586 | 总收益: -1 | 最大回撤: 8.6726 | 交易次数: 16 | 胜率: 1
## 测试参数组合 33/64: n=6, m1=2, m2=4
## 策略环境已重置
## [1] "2018-11-28 00:00:00 AAPL 250000 @ 45.2350006103516"
## [1] "2019-02-08 00:00:00 AAPL -250000 @ 42.6025009155273"
## [1] "2019-06-04 00:00:00 AAPL 250000 @ 44.9099998474121"
## [1] "2019-06-17 00:00:00 AAPL -250000 @ 48.4724998474121"
## [1] "2022-09-08 00:00:00 AAPL 250000 @ 154.460006713867"
## [1] "2023-01-31 00:00:00 AAPL -250000 @ 144.289993286133"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -1 | 最大回撤: 1.0966 | 交易次数: 7 | 胜率: 0.33
## 测试参数组合 34/64: n=18, m1=2, m2=4
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-13 00:00:00 AAPL 250000 @ 42.7374992370605"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-02-08 00:00:00 AAPL -750000 @ 42.6025009155273"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-06-26 00:00:00 AAPL -250000 @ 49.9500007629395"
## [1] "2020-09-23 00:00:00 AAPL 250000 @ 107.120002746582"
## [1] "2020-10-19 00:00:00 AAPL -250000 @ 115.980003356934"
## [1] "2022-05-03 00:00:00 AAPL 250000 @ 159.479995727539"
## [1] "2022-05-16 00:00:00 AAPL 250000 @ 145.539993286133"
## [1] "2022-07-26 00:00:00 AAPL -5e+05 @ 151.600006103516"
## [1] "2022-09-20 00:00:00 AAPL 250000 @ 156.899993896484"
## [1] "2022-12-22 00:00:00 AAPL 250000 @ 132.229995727539"
## [1] "2023-01-03 00:00:00 AAPL 250000 @ 125.069999694824"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-07 00:00:00 AAPL -1e+06 @ 154.649993896484"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -0.9996 | 最大回撤: 3.1034 | 交易次数: 17 | 胜率: 0.8
## 测试参数组合 35/64: n=36, m1=2, m2=4
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-14 00:00:00 AAPL 250000 @ 41.3699989318848"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-03-07 00:00:00 AAPL -1e+06 @ 43.125"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-07-22 00:00:00 AAPL -250000 @ 51.8050003051758"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-05-14 00:00:00 AAPL -250000 @ 77.3850021362305"
## [1] "2021-03-12 00:00:00 AAPL 250000 @ 121.029998779297"
## [1] "2021-04-23 00:00:00 AAPL -250000 @ 134.320007324219"
## [1] "2021-10-07 00:00:00 AAPL 250000 @ 143.289993286133"
## [1] "2021-11-11 00:00:00 AAPL -250000 @ 147.869995117188"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-06-23 00:00:00 AAPL 250000 @ 138.270004272461"
## [1] "2022-07-27 00:00:00 AAPL -5e+05 @ 156.789993286133"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2023-01-03 00:00:00 AAPL 250000 @ 125.069999694824"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-10 00:00:00 AAPL -1e+06 @ 151.009994506836"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1125 | 总收益: -0.8153 | 最大回撤: 2.6909 | 交易次数: 22 | 胜率: 1
## 测试参数组合 36/64: n=55, m1=2, m2=4
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-14 00:00:00 AAPL 250000 @ 41.3699989318848"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-03-08 00:00:00 AAPL -1e+06 @ 43.2275009155273"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-06-12 00:00:00 AAPL -250000 @ 84.6999969482422"
## [1] "2021-03-12 00:00:00 AAPL 250000 @ 121.029998779297"
## [1] "2021-04-01 00:00:00 AAPL 250000 @ 123"
## [1] "2021-05-03 00:00:00 AAPL -5e+05 @ 132.539993286133"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-06-23 00:00:00 AAPL 250000 @ 138.270004272461"
## [1] "2022-08-19 00:00:00 AAPL -5e+05 @ 171.520004272461"
## [1] "2022-10-06 00:00:00 AAPL 250000 @ 145.429992675781"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2022-10-18 00:00:00 AAPL 250000 @ 143.75"
## [1] "2023-01-03 00:00:00 AAPL 250000 @ 125.069999694824"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-22 00:00:00 AAPL -1250000 @ 148.910003662109"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -652899478681.471 | 最大回撤: 731.8759 | 交易次数: 20 | 胜率: 1
## 测试参数组合 37/64: n=6, m1=3, m2=4
## 策略环境已重置
## [1] "2022-09-09 00:00:00 AAPL 250000 @ 157.369995117188"
## [1] "2022-11-01 00:00:00 AAPL -250000 @ 150.649993896484"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.3884 | 总收益: -0.9997 | 最大回撤: 2.9111 | 交易次数: 3 | 胜率: 0
## 测试参数组合 38/64: n=18, m1=3, m2=4
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-13 00:00:00 AAPL 250000 @ 42.7374992370605"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-02-11 00:00:00 AAPL -750000 @ 42.3574981689453"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-07-01 00:00:00 AAPL -250000 @ 50.3875007629395"
## [1] "2020-09-28 00:00:00 AAPL 250000 @ 114.959999084473"
## [1] "2020-12-11 00:00:00 AAPL -250000 @ 122.410003662109"
## [1] "2021-10-07 00:00:00 AAPL 250000 @ 143.289993286133"
## [1] "2021-11-02 00:00:00 AAPL -250000 @ 150.020004272461"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-07-27 00:00:00 AAPL -250000 @ 156.789993286133"
## [1] "2022-09-20 00:00:00 AAPL 250000 @ 156.899993896484"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-07 00:00:00 AAPL -1e+06 @ 154.649993896484"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.0737 | 总收益: 13116774.6652 | 最大回撤: 283.8463 | 交易次数: 18 | 胜率: 1
## 测试参数组合 39/64: n=36, m1=3, m2=4
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-08 00:00:00 AAPL 250000 @ 37.6875"
## [1] "2019-03-07 00:00:00 AAPL -750000 @ 43.125"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-07-29 00:00:00 AAPL -250000 @ 52.4199981689453"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-05-14 00:00:00 AAPL -250000 @ 77.3850021362305"
## [1] "2021-03-15 00:00:00 AAPL 250000 @ 123.98999786377"
## [1] "2021-04-30 00:00:00 AAPL -250000 @ 131.460006713867"
## [1] "2021-10-08 00:00:00 AAPL 250000 @ 142.899993896484"
## [1] "2021-11-12 00:00:00 AAPL -250000 @ 149.990005493164"
## [1] "2022-05-18 00:00:00 AAPL 250000 @ 140.820007324219"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-06-24 00:00:00 AAPL 250000 @ 141.660003662109"
## [1] "2022-08-10 00:00:00 AAPL -750000 @ 169.240005493164"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-22 00:00:00 AAPL -750000 @ 148.910003662109"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.0957 | 总收益: 71537.7174 | 最大回撤: 77.341 | 交易次数: 21 | 胜率: 1
## 测试参数组合 40/64: n=55, m1=3, m2=4
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-03-25 00:00:00 AAPL -750000 @ 47.185001373291"
## [1] "2019-06-06 00:00:00 AAPL 250000 @ 46.3050003051758"
## [1] "2019-08-02 00:00:00 AAPL -250000 @ 51.0050010681152"
## [1] "2021-03-16 00:00:00 AAPL 250000 @ 125.569999694824"
## [1] "2021-04-05 00:00:00 AAPL 250000 @ 125.900001525879"
## [1] "2021-05-05 00:00:00 AAPL -5e+05 @ 128.100006103516"
## [1] "2021-10-08 00:00:00 AAPL 250000 @ 142.899993896484"
## [1] "2021-12-06 00:00:00 AAPL -250000 @ 165.320007324219"
## [1] "2022-05-25 00:00:00 AAPL 250000 @ 140.520004272461"
## [1] "2022-06-24 00:00:00 AAPL 250000 @ 141.660003662109"
## [1] "2022-08-22 00:00:00 AAPL -5e+05 @ 167.570007324219"
## [1] "2022-10-18 00:00:00 AAPL 250000 @ 143.75"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-22 00:00:00 AAPL -5e+05 @ 148.910003662109"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1566 | 总收益: -1 | 最大回撤: 8.6726 | 交易次数: 18 | 胜率: 1
## 测试参数组合 41/64: n=6, m1=4, m2=4
## 策略环境已重置
## ❌ 策略执行失败 | 参数组合 41 | 错误: 输入必须是tradeStats函数的输出数据框
## 测试参数组合 42/64: n=18, m1=4, m2=4
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-13 00:00:00 AAPL 250000 @ 42.7374992370605"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-02-12 00:00:00 AAPL -750000 @ 42.7224998474121"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-07-09 00:00:00 AAPL -250000 @ 50.310001373291"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-07-27 00:00:00 AAPL -250000 @ 156.789993286133"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-09 00:00:00 AAPL -750000 @ 150.869995117188"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1318 | 总收益: -0.6638 | 最大回撤: 2.0731 | 交易次数: 13 | 胜率: 1
## 测试参数组合 43/64: n=36, m1=4, m2=4
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-03-08 00:00:00 AAPL -5e+05 @ 43.2275009155273"
## [1] "2019-06-06 00:00:00 AAPL 250000 @ 46.3050003051758"
## [1] "2019-07-31 00:00:00 AAPL -250000 @ 53.2599983215332"
## [1] "2020-03-26 00:00:00 AAPL 250000 @ 64.6100006103516"
## [1] "2020-05-15 00:00:00 AAPL -250000 @ 76.9274978637695"
## [1] "2021-03-16 00:00:00 AAPL 250000 @ 125.569999694824"
## [1] "2021-04-30 00:00:00 AAPL -250000 @ 131.460006713867"
## [1] "2021-10-11 00:00:00 AAPL 250000 @ 142.809997558594"
## [1] "2021-11-12 00:00:00 AAPL -250000 @ 149.990005493164"
## [1] "2022-05-25 00:00:00 AAPL 250000 @ 140.520004272461"
## [1] "2022-06-24 00:00:00 AAPL 250000 @ 141.660003662109"
## [1] "2022-08-22 00:00:00 AAPL -5e+05 @ 167.570007324219"
## [1] "2022-10-06 00:00:00 AAPL 250000 @ 145.429992675781"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2022-10-18 00:00:00 AAPL 250000 @ 143.75"
## [1] "2023-01-10 00:00:00 AAPL 250000 @ 130.729995727539"
## [1] "2023-02-22 00:00:00 AAPL -1e+06 @ 148.910003662109"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -403631770935.152 | 最大回撤: 283.8463 | 交易次数: 20 | 胜率: 1
## 测试参数组合 44/64: n=55, m1=4, m2=4
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-03-25 00:00:00 AAPL -750000 @ 47.185001373291"
## [1] "2020-03-26 00:00:00 AAPL 250000 @ 64.6100006103516"
## [1] "2020-06-12 00:00:00 AAPL -250000 @ 84.6999969482422"
## [1] "2021-03-16 00:00:00 AAPL 250000 @ 125.569999694824"
## [1] "2021-04-05 00:00:00 AAPL 250000 @ 125.900001525879"
## [1] "2021-05-05 00:00:00 AAPL -5e+05 @ 128.100006103516"
## [1] "2022-05-27 00:00:00 AAPL 250000 @ 149.639999389648"
## [1] "2022-06-27 00:00:00 AAPL 250000 @ 141.660003662109"
## [1] "2022-08-22 00:00:00 AAPL -5e+05 @ 167.570007324219"
## [1] "2022-10-19 00:00:00 AAPL 250000 @ 143.860000610352"
## [1] "2023-01-10 00:00:00 AAPL 250000 @ 130.729995727539"
## [1] "2023-02-22 00:00:00 AAPL -5e+05 @ 148.910003662109"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1586 | 总收益: -1 | 最大回撤: 8.6726 | 交易次数: 16 | 胜率: 1
## 测试参数组合 45/64: n=6, m1=5, m2=4
## 策略环境已重置
## ❌ 策略执行失败 | 参数组合 45 | 错误: 输入必须是tradeStats函数的输出数据框
## 测试参数组合 46/64: n=18, m1=5, m2=4
## 策略环境已重置
## [1] "2018-11-30 00:00:00 AAPL 250000 @ 44.6450004577637"
## [1] "2018-12-13 00:00:00 AAPL 250000 @ 42.7374992370605"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-02-13 00:00:00 AAPL -750000 @ 42.5449981689453"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-07-09 00:00:00 AAPL -250000 @ 50.310001373291"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-08-10 00:00:00 AAPL -250000 @ 169.240005493164"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2023-01-10 00:00:00 AAPL 250000 @ 130.729995727539"
## [1] "2023-02-10 00:00:00 AAPL -750000 @ 151.009994506836"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1304 | 总收益: 0.4396 | 最大回撤: 2.8766 | 交易次数: 13 | 胜率: 1
## 测试参数组合 47/64: n=36, m1=5, m2=4
## 策略环境已重置
## [1] "2018-11-30 00:00:00 AAPL 250000 @ 44.6450004577637"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-03-08 00:00:00 AAPL -5e+05 @ 43.2275009155273"
## [1] "2019-06-06 00:00:00 AAPL 250000 @ 46.3050003051758"
## [1] "2019-07-31 00:00:00 AAPL -250000 @ 53.2599983215332"
## [1] "2021-03-16 00:00:00 AAPL 250000 @ 125.569999694824"
## [1] "2021-05-03 00:00:00 AAPL -250000 @ 132.539993286133"
## [1] "2022-05-27 00:00:00 AAPL 250000 @ 149.639999389648"
## [1] "2022-08-22 00:00:00 AAPL -250000 @ 167.570007324219"
## [1] "2022-10-06 00:00:00 AAPL 250000 @ 145.429992675781"
## [1] "2022-10-18 00:00:00 AAPL 250000 @ 143.75"
## [1] "2023-01-10 00:00:00 AAPL 250000 @ 130.729995727539"
## [1] "2023-02-22 00:00:00 AAPL -750000 @ 148.910003662109"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1293 | 总收益: -1.0006 | 最大回撤: 3.6896 | 交易次数: 14 | 胜率: 1
## 测试参数组合 48/64: n=55, m1=5, m2=4
## 策略环境已重置
## [1] "2018-11-30 00:00:00 AAPL 250000 @ 44.6450004577637"
## [1] "2018-12-28 00:00:00 AAPL 250000 @ 39.0574989318848"
## [1] "2019-03-26 00:00:00 AAPL -5e+05 @ 46.6974983215332"
## [1] "2021-04-05 00:00:00 AAPL 250000 @ 125.900001525879"
## [1] "2021-05-05 00:00:00 AAPL -250000 @ 128.100006103516"
## [1] "2022-05-27 00:00:00 AAPL 250000 @ 149.639999389648"
## [1] "2022-06-27 00:00:00 AAPL 250000 @ 141.660003662109"
## [1] "2022-08-23 00:00:00 AAPL -5e+05 @ 167.229995727539"
## [1] "2022-10-19 00:00:00 AAPL 250000 @ 143.860000610352"
## [1] "2023-01-10 00:00:00 AAPL 250000 @ 130.729995727539"
## [1] "2023-02-23 00:00:00 AAPL -5e+05 @ 149.399993896484"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1732 | 总收益: -1 | 最大回撤: 9.2317 | 交易次数: 12 | 胜率: 1
## 测试参数组合 49/64: n=6, m1=2, m2=5
## 策略环境已重置
## [1] "2018-11-28 00:00:00 AAPL 250000 @ 45.2350006103516"
## [1] "2019-02-08 00:00:00 AAPL -250000 @ 42.6025009155273"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -0.9937 | 最大回撤: 0.9986 | 交易次数: 3 | 胜率: 0
## 测试参数组合 50/64: n=18, m1=2, m2=5
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-13 00:00:00 AAPL 250000 @ 42.7374992370605"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-02-11 00:00:00 AAPL -750000 @ 42.3574981689453"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-07-01 00:00:00 AAPL -250000 @ 50.3875007629395"
## [1] "2022-05-17 00:00:00 AAPL 250000 @ 149.240005493164"
## [1] "2022-07-27 00:00:00 AAPL -250000 @ 156.789993286133"
## [1] "2022-09-20 00:00:00 AAPL 250000 @ 156.899993896484"
## [1] "2023-01-03 00:00:00 AAPL 250000 @ 125.069999694824"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-07 00:00:00 AAPL -750000 @ 154.649993896484"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -1 | 最大回撤: 1.2053 | 交易次数: 13 | 胜率: 1
## 测试参数组合 51/64: n=36, m1=2, m2=5
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-14 00:00:00 AAPL 250000 @ 41.3699989318848"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-03-07 00:00:00 AAPL -1e+06 @ 43.125"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-07-29 00:00:00 AAPL -250000 @ 52.4199981689453"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-05-14 00:00:00 AAPL -250000 @ 77.3850021362305"
## [1] "2021-03-12 00:00:00 AAPL 250000 @ 121.029998779297"
## [1] "2021-04-30 00:00:00 AAPL -250000 @ 131.460006713867"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-06-24 00:00:00 AAPL 250000 @ 141.660003662109"
## [1] "2022-08-10 00:00:00 AAPL -5e+05 @ 169.240005493164"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-22 00:00:00 AAPL -750000 @ 148.910003662109"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1159 | 总收益: 0.1361 | 最大回撤: 5.4834 | 交易次数: 19 | 胜率: 1
## 测试参数组合 52/64: n=55, m1=2, m2=5
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-14 00:00:00 AAPL 250000 @ 41.3699989318848"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-03-25 00:00:00 AAPL -1e+06 @ 47.185001373291"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-06-12 00:00:00 AAPL -250000 @ 84.6999969482422"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-06-24 00:00:00 AAPL 250000 @ 141.660003662109"
## [1] "2022-08-22 00:00:00 AAPL -5e+05 @ 167.570007324219"
## [1] "2022-10-18 00:00:00 AAPL 250000 @ 143.75"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-22 00:00:00 AAPL -5e+05 @ 148.910003662109"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -1 | 最大回撤: 1.8988 | 交易次数: 14 | 胜率: 1
## 测试参数组合 53/64: n=6, m1=3, m2=5
## 策略环境已重置
## ❌ 策略执行失败 | 参数组合 53 | 错误: 输入必须是tradeStats函数的输出数据框
## 测试参数组合 54/64: n=18, m1=3, m2=5
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-13 00:00:00 AAPL 250000 @ 42.7374992370605"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-02-12 00:00:00 AAPL -750000 @ 42.7224998474121"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-07-09 00:00:00 AAPL -250000 @ 50.310001373291"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-07-27 00:00:00 AAPL -250000 @ 156.789993286133"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-09 00:00:00 AAPL -750000 @ 150.869995117188"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1318 | 总收益: -0.6638 | 最大回撤: 2.0731 | 交易次数: 13 | 胜率: 1
## 测试参数组合 55/64: n=36, m1=3, m2=5
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-03-08 00:00:00 AAPL -5e+05 @ 43.2275009155273"
## [1] "2019-06-06 00:00:00 AAPL 250000 @ 46.3050003051758"
## [1] "2019-07-31 00:00:00 AAPL -250000 @ 53.2599983215332"
## [1] "2021-03-16 00:00:00 AAPL 250000 @ 125.569999694824"
## [1] "2021-04-30 00:00:00 AAPL -250000 @ 131.460006713867"
## [1] "2021-10-08 00:00:00 AAPL 250000 @ 142.899993896484"
## [1] "2021-11-12 00:00:00 AAPL -250000 @ 149.990005493164"
## [1] "2022-05-25 00:00:00 AAPL 250000 @ 140.520004272461"
## [1] "2022-06-24 00:00:00 AAPL 250000 @ 141.660003662109"
## [1] "2022-08-22 00:00:00 AAPL -5e+05 @ 167.570007324219"
## [1] "2022-10-06 00:00:00 AAPL 250000 @ 145.429992675781"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2022-10-18 00:00:00 AAPL 250000 @ 143.75"
## [1] "2023-01-10 00:00:00 AAPL 250000 @ 130.729995727539"
## [1] "2023-02-22 00:00:00 AAPL -1e+06 @ 148.910003662109"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -611931530531.85 | 最大回撤: 283.8463 | 交易次数: 18 | 胜率: 1
## 测试参数组合 56/64: n=55, m1=3, m2=5
## 策略环境已重置
## [1] "2018-11-29 00:00:00 AAPL 250000 @ 44.8875007629395"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-03-25 00:00:00 AAPL -750000 @ 47.185001373291"
## [1] "2021-03-16 00:00:00 AAPL 250000 @ 125.569999694824"
## [1] "2021-04-05 00:00:00 AAPL 250000 @ 125.900001525879"
## [1] "2021-05-05 00:00:00 AAPL -5e+05 @ 128.100006103516"
## [1] "2022-05-27 00:00:00 AAPL 250000 @ 149.639999389648"
## [1] "2022-06-27 00:00:00 AAPL 250000 @ 141.660003662109"
## [1] "2022-08-22 00:00:00 AAPL -5e+05 @ 167.570007324219"
## [1] "2022-10-19 00:00:00 AAPL 250000 @ 143.860000610352"
## [1] "2023-01-10 00:00:00 AAPL 250000 @ 130.729995727539"
## [1] "2023-02-22 00:00:00 AAPL -5e+05 @ 148.910003662109"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -1 | 最大回撤: 8.6726 | 交易次数: 14 | 胜率: 1
## 测试参数组合 57/64: n=6, m1=4, m2=5
## 策略环境已重置
## ❌ 策略执行失败 | 参数组合 57 | 错误: 输入必须是tradeStats函数的输出数据框
## 测试参数组合 58/64: n=18, m1=4, m2=5
## 策略环境已重置
## [1] "2018-11-30 00:00:00 AAPL 250000 @ 44.6450004577637"
## [1] "2018-12-13 00:00:00 AAPL 250000 @ 42.7374992370605"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-02-13 00:00:00 AAPL -750000 @ 42.5449981689453"
## [1] "2019-06-05 00:00:00 AAPL 250000 @ 45.6349983215332"
## [1] "2019-07-09 00:00:00 AAPL -250000 @ 50.310001373291"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-08-10 00:00:00 AAPL -250000 @ 169.240005493164"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2023-01-10 00:00:00 AAPL 250000 @ 130.729995727539"
## [1] "2023-02-10 00:00:00 AAPL -750000 @ 151.009994506836"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1304 | 总收益: 0.4396 | 最大回撤: 2.8766 | 交易次数: 13 | 胜率: 1
## 测试参数组合 59/64: n=36, m1=4, m2=5
## 策略环境已重置
## [1] "2018-11-30 00:00:00 AAPL 250000 @ 44.6450004577637"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-03-08 00:00:00 AAPL -5e+05 @ 43.2275009155273"
## [1] "2019-06-06 00:00:00 AAPL 250000 @ 46.3050003051758"
## [1] "2019-07-31 00:00:00 AAPL -250000 @ 53.2599983215332"
## [1] "2021-03-16 00:00:00 AAPL 250000 @ 125.569999694824"
## [1] "2021-05-03 00:00:00 AAPL -250000 @ 132.539993286133"
## [1] "2022-05-27 00:00:00 AAPL 250000 @ 149.639999389648"
## [1] "2022-08-22 00:00:00 AAPL -250000 @ 167.570007324219"
## [1] "2022-10-06 00:00:00 AAPL 250000 @ 145.429992675781"
## [1] "2022-10-18 00:00:00 AAPL 250000 @ 143.75"
## [1] "2023-01-10 00:00:00 AAPL 250000 @ 130.729995727539"
## [1] "2023-02-22 00:00:00 AAPL -750000 @ 148.910003662109"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1293 | 总收益: -1.0006 | 最大回撤: 3.6896 | 交易次数: 14 | 胜率: 1
## 测试参数组合 60/64: n=55, m1=4, m2=5
## 策略环境已重置
## [1] "2018-11-30 00:00:00 AAPL 250000 @ 44.6450004577637"
## [1] "2018-12-28 00:00:00 AAPL 250000 @ 39.0574989318848"
## [1] "2019-03-26 00:00:00 AAPL -5e+05 @ 46.6974983215332"
## [1] "2021-04-05 00:00:00 AAPL 250000 @ 125.900001525879"
## [1] "2021-05-05 00:00:00 AAPL -250000 @ 128.100006103516"
## [1] "2022-05-27 00:00:00 AAPL 250000 @ 149.639999389648"
## [1] "2022-06-27 00:00:00 AAPL 250000 @ 141.660003662109"
## [1] "2022-08-23 00:00:00 AAPL -5e+05 @ 167.229995727539"
## [1] "2022-10-19 00:00:00 AAPL 250000 @ 143.860000610352"
## [1] "2023-01-10 00:00:00 AAPL 250000 @ 130.729995727539"
## [1] "2023-02-23 00:00:00 AAPL -5e+05 @ 149.399993896484"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1732 | 总收益: -1 | 最大回撤: 9.2317 | 交易次数: 12 | 胜率: 1
## 测试参数组合 61/64: n=6, m1=5, m2=5
## 策略环境已重置
## ❌ 策略执行失败 | 参数组合 61 | 错误: 输入必须是tradeStats函数的输出数据框
## 测试参数组合 62/64: n=18, m1=5, m2=5
## 策略环境已重置
## [1] "2018-11-30 00:00:00 AAPL 250000 @ 44.6450004577637"
## [1] "2018-12-13 00:00:00 AAPL 250000 @ 42.7374992370605"
## [1] "2018-12-28 00:00:00 AAPL 250000 @ 39.0574989318848"
## [1] "2019-02-15 00:00:00 AAPL -750000 @ 42.6049995422363"
## [1] "2019-06-06 00:00:00 AAPL 250000 @ 46.3050003051758"
## [1] "2019-07-09 00:00:00 AAPL -250000 @ 50.310001373291"
## [1] "2022-05-25 00:00:00 AAPL 250000 @ 140.520004272461"
## [1] "2022-08-10 00:00:00 AAPL -250000 @ 169.240005493164"
## [1] "2022-10-05 00:00:00 AAPL 250000 @ 146.399993896484"
## [1] "2023-01-10 00:00:00 AAPL 250000 @ 130.729995727539"
## [1] "2023-02-10 00:00:00 AAPL -5e+05 @ 151.009994506836"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -1 | 最大回撤: 1.7904 | 交易次数: 12 | 胜率: 1
## 测试参数组合 63/64: n=36, m1=5, m2=5
## 策略环境已重置
## [1] "2018-11-30 00:00:00 AAPL 250000 @ 44.6450004577637"
## [1] "2018-12-28 00:00:00 AAPL 250000 @ 39.0574989318848"
## [1] "2019-03-08 00:00:00 AAPL -5e+05 @ 43.2275009155273"
## [1] "2019-06-07 00:00:00 AAPL 250000 @ 47.5374984741211"
## [1] "2019-08-01 00:00:00 AAPL -250000 @ 52.1074981689453"
## [1] "2022-05-27 00:00:00 AAPL 250000 @ 149.639999389648"
## [1] "2022-08-22 00:00:00 AAPL -250000 @ 167.570007324219"
## [1] "2022-10-07 00:00:00 AAPL 250000 @ 140.089996337891"
## [1] "2022-10-18 00:00:00 AAPL 250000 @ 143.75"
## [1] "2023-01-11 00:00:00 AAPL 250000 @ 133.490005493164"
## [1] "2023-02-23 00:00:00 AAPL -750000 @ 149.399993896484"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: -0.1314 | 总收益: -1.02 | 最大回撤: 3.0459 | 交易次数: 12 | 胜率: 1
## 测试参数组合 64/64: n=55, m1=5, m2=5
## 策略环境已重置
## [1] "2018-12-04 00:00:00 AAPL 250000 @ 44.1725006103516"
## [1] "2018-12-28 00:00:00 AAPL 250000 @ 39.0574989318848"
## [1] "2019-03-26 00:00:00 AAPL -5e+05 @ 46.6974983215332"
## [1] "2021-04-05 00:00:00 AAPL 250000 @ 125.900001525879"
## [1] "2021-07-20 00:00:00 AAPL -250000 @ 146.149993896484"
## [1] "2022-06-27 00:00:00 AAPL 250000 @ 141.660003662109"
## [1] "2022-08-23 00:00:00 AAPL -250000 @ 167.229995727539"
## [1] "2022-10-20 00:00:00 AAPL 250000 @ 143.389999389648"
## [1] "2023-01-11 00:00:00 AAPL 250000 @ 133.490005493164"
## [1] "2023-02-24 00:00:00 AAPL -5e+05 @ 146.710006713867"
## === 基于tradeStats的胜率计算结果 ===
## ✅ 测试完成 | Sharpe: NaN | 总收益: -1 | 最大回撤: 14.6622 | 交易次数: 11 | 胜率: 1
# 输出最佳参数组合
best_params_order <- results[order(-results$SharpeRatio), ]
print("=== 最优参数组合 (按夏普比率降序) ===")
## [1] "=== 最优参数组合 (按夏普比率降序) ==="
print(head(best_params_order, 3))
##     n m1 m2 SharpeRatio       Return MaxDrawdown TradeCount WinRate
## 3  36  2  2    41.44119 3.302791e+25   3126.5533         32       1
## 24 55  3  3    15.95223 1.241841e+23   1530.7447         25       1
## 12 55  4  2    14.59218 5.159452e+22    537.8647         26       1
# 可视化不同参数的夏普比率
library(ggplot2)
ggplot(results, aes(x = factor(n), y = SharpeRatio, color = factor(m1), shape = factor(m2))) +
  geom_point(size = 4) +
  labs(title = "KDJ策略参数优化结果", 
       x = "RSV周期(n)", y = "夏普比率",
       color = "K值平滑因子(m1)", shape = "D值平滑因子(m2)") +
  theme_minimal()

基于最佳参数的回测

根据参数优化结果,我们使用最佳参数组合重新进行回测,并详细分析策略表现:

# 清理历史环境对象
reset_strategy_env()
## 策略环境已重置
# 初始化quantstrat
rm(list = ls(.blotter))
rm(list = ls(.strategy))

# 设置初始参数
currency("USD")
## [1] "USD"
stock("AAPL", currency = "USD", multiplier = 1)
## [1] "AAPL"
initEq.st <- 1000000  # 初始资金
portfolio.st <- "KDJ_Portfolio_Best"
strategy.st <- "KDJ_Strategy_Best"
account.st <- "KDJ_Account_Best"
symbols.st <- "AAPL"

best_params <- best_params_order[1,]

initPortf(portfolio.st, symbols = symbols.st)
## [1] "KDJ_Portfolio_Best"
initAcct(account.st, portfolios = portfolio.st, initEq = initEq.st)
## [1] "KDJ_Account_Best"
initOrders(portfolio = portfolio.st)
strategy(strategy.st, store = TRUE)

# 生成指标名字
indicator_label <-  paste0("KDJ_", best_params$n, "_", best_params$m1, "_", best_params$m2)

# 添加KDJ指标,使用最佳参数
add.indicator(strategy.st, 
              name = "KDJ", 
              arguments = list(ohlc = quote(HLC(AAPL)), 
                               n = best_params$n, 
                               m1 = best_params$m1, 
                               m2 = best_params$m2),
              label = indicator_label)
## [1] "KDJ_Strategy_Best"
# 生成指标列名
  k_col <- paste0("K.", indicator_label)
  d_col <- paste0("D.", indicator_label)

 # 买入信号
    add.signal(strategy.st, "sigCrossover", 
               list(columns = c(k_col, d_col), relationship = "gte"),
               label = "K_gte_D")
## [1] "KDJ_Strategy_Best"
    add.signal(strategy.st, "sigThreshold", 
               list(column = k_col, threshold = 20, relationship = "lt"),
               label = "K_lt_20")
## [1] "KDJ_Strategy_Best"
    add.signal(strategy.st, "sigThreshold", 
               list(column = d_col, threshold = 20, relationship = "lt"),
               label = "D_lt_20")
## [1] "KDJ_Strategy_Best"
    add.signal(strategy.st, "sigFormula", 
               list(signals = c("K_gte_D", "K_lt_20", "D_lt_20"), 
                    formula = "K_gte_D & K_lt_20 & D_lt_20"),
               label = "Buy_Signal")
## [1] "KDJ_Strategy_Best"
    # 卖出信号
    add.signal(strategy.st, "sigCrossover", 
               list(columns = c(k_col, d_col), relationship = "lte"),
               label = "K_lte_D")
## [1] "KDJ_Strategy_Best"
    add.signal(strategy.st, "sigThreshold", 
               list(column = k_col, threshold = 70, relationship = "gt"),
               label = "K_gt_70")
## [1] "KDJ_Strategy_Best"
    add.signal(strategy.st, "sigThreshold", 
               list(column = d_col, threshold = 70, relationship = "gt"),
               label = "D_gt_70")
## [1] "KDJ_Strategy_Best"
    add.signal(strategy.st, "sigFormula", 
               list(signals = c("K_lte_D", "K_gt_70", "D_gt_70"),
                    formula = "K_lte_D & K_gt_70 & D_gt_70"),
               label = "Sell_Signal")
## [1] "KDJ_Strategy_Best"
    # 添加交易规则
    add.rule(strategy.st, "ruleSignal", 
             list(sigcol = "Buy_Signal", sigval = TRUE, 
                  orderqty = 250000, ordertype = "market", 
                  orderside = "long", replace = FALSE),
             type = "enter", label = "Enter_Long")
## [1] "KDJ_Strategy_Best"
    add.rule(strategy.st, "ruleSignal", 
             list(sigcol = "Sell_Signal", sigval = TRUE, 
                  orderqty = "all", ordertype = "market", 
                  orderside = "long", replace = FALSE),
             type = "exit", label = "Exit_Long")
## [1] "KDJ_Strategy_Best"
    # 添加止损规则
    add.rule(strategy.st, "ruleSignal", 
             list(threshold = 0.10, 
                  sigcol = "Buy_Signal", 
                  sigval = TRUE,
                  orderqty = "all", 
                  ordertype = "stoplimit", 
                  orderside = "long", 
                  replace = FALSE),
             type = "chain", 
             parent = "Enter_Long", 
             label = "Stop_Loss_10%")
## [1] "KDJ_Strategy_Best"
# 运行回测
applyStrategy(strategy = strategy.st, portfolios = portfolio.st)
## [1] "2018-05-01 00:00:00 AAPL 250000 @ 42.2750015258789"
## [1] "2018-05-15 00:00:00 AAPL -250000 @ 46.6100006103516"
## [1] "2018-11-19 00:00:00 AAPL 250000 @ 46.4650001525879"
## [1] "2018-11-27 00:00:00 AAPL 250000 @ 43.560001373291"
## [1] "2018-12-13 00:00:00 AAPL 250000 @ 42.7374992370605"
## [1] "2018-12-27 00:00:00 AAPL 250000 @ 39.0374984741211"
## [1] "2019-01-09 00:00:00 AAPL 250000 @ 38.3274993896484"
## [1] "2019-02-11 00:00:00 AAPL -1250000 @ 42.3574981689453"
## [1] "2019-06-04 00:00:00 AAPL 250000 @ 44.9099998474121"
## [1] "2019-07-09 00:00:00 AAPL -250000 @ 50.310001373291"
## [1] "2020-03-25 00:00:00 AAPL 250000 @ 61.3800010681152"
## [1] "2020-04-21 00:00:00 AAPL -250000 @ 67.0924987792969"
## [1] "2021-03-10 00:00:00 AAPL 250000 @ 119.980003356934"
## [1] "2021-04-21 00:00:00 AAPL -250000 @ 133.5"
## [1] "2021-06-07 00:00:00 AAPL 250000 @ 125.900001525879"
## [1] "2021-07-07 00:00:00 AAPL -250000 @ 144.570007324219"
## [1] "2021-10-04 00:00:00 AAPL 250000 @ 139.139999389648"
## [1] "2021-10-06 00:00:00 AAPL 250000 @ 142"
## [1] "2021-11-11 00:00:00 AAPL -5e+05 @ 147.869995117188"
## [1] "2022-05-16 00:00:00 AAPL 250000 @ 145.539993286133"
## [1] "2022-05-24 00:00:00 AAPL 250000 @ 140.360000610352"
## [1] "2022-06-22 00:00:00 AAPL 250000 @ 135.350006103516"
## [1] "2022-07-26 00:00:00 AAPL -750000 @ 151.600006103516"
## [1] "2022-09-20 00:00:00 AAPL 250000 @ 156.899993896484"
## [1] "2022-09-29 00:00:00 AAPL 250000 @ 142.479995727539"
## [1] "2022-10-04 00:00:00 AAPL 250000 @ 146.100006103516"
## [1] "2022-10-14 00:00:00 AAPL 250000 @ 138.380004882812"
## [1] "2022-12-22 00:00:00 AAPL 250000 @ 132.229995727539"
## [1] "2022-12-30 00:00:00 AAPL 250000 @ 129.929992675781"
## [1] "2023-01-09 00:00:00 AAPL 250000 @ 130.149993896484"
## [1] "2023-02-07 00:00:00 AAPL -1750000 @ 154.649993896484"
updatePortf(portfolio.st)
## [1] "KDJ_Portfolio_Best"
updateAcct(account.st)
## [1] "KDJ_Account_Best"
updateEndEq(account.st)
## [1] "KDJ_Account_Best"
# 获取策略收益
port_ret_best <- PortfReturns(account.st)

# 计算评估指标
sharpe_ratio_best <- SharpeRatio.annualized(port_ret_best)
total_return_best <- Return.cumulative(port_ret_best)
max_drawdown_best <- maxDrawdown(port_ret_best)
trade_count_best <- length(index(getTxns(Portfolio = portfolio.st, 
                                         Symbol = "AAPL")))

# 计算买入持有策略的收益作为基准
buy_hold_ret <- dailyReturn(Cl(AAPL))
sharpe_ratio_bh <- SharpeRatio.annualized(buy_hold_ret)
total_return_bh <- Return.cumulative(buy_hold_ret)
max_drawdown_bh <- maxDrawdown(buy_hold_ret)

# 输出评估结果
results_df <- data.frame(
  Strategy = c("KDJ策略", "买入持有"),
  年化夏普比率 = c(sharpe_ratio_best, sharpe_ratio_bh),
  总收益率 = c(total_return_best, total_return_bh),
  最大回撤 = c(max_drawdown_best, max_drawdown_bh),
  交易次数 = c(trade_count_best, NA)
)

print("策略评估结果:")
## [1] "策略评估结果:"
print(results_df)
##   Strategy 年化夏普比率     总收益率     最大回撤 交易次数
## 1  KDJ策略 3217.8410168 3.302791e+25 3126.5533119       32
## 2 买入持有    0.9126001 3.115871e+00    0.3872969       NA
# 可视化策略收益
charts.PerformanceSummary(cbind(port_ret_best, buy_hold_ret), 
                          main = "KDJ策略与买入持有策略收益对比",
                          colorset = bluefocus, 
                          wealth.index = TRUE)

交易信号可视化

为了更直观地理解KDJ指标的交易信号,我们将可视化价格走势和KDJ指标,并标记买卖点:

price_data <- Cl(AAPL)
# 提取KDJ指标值
kdj_data <- KDJ(HLC(AAPL), 
                  n = best_params$n, 
                  m1 = best_params$m1, 
                  m2 = best_params$m2)

merge_data <- merge(price_data, kdj_data)
# 提取交易信号
signals <- generateSimpleSignalChain(getTxns(portfolio.st,"AAPL"),
                                     type="numeric"
                                     )[-1,]

merged_xts <- merge(merge_data, signals, fill = 0)

# 转换xts为data.frame并添加日期列
plot_data <- merged_xts %>% 
  as.data.frame() %>%
  rownames_to_column(var = "Date") %>%
  mutate(Date = as.Date(Date))

# 提取买卖点数据
buy_points <- plot_data %>% filter(Signal == 1)  # 假设Signal=1表示买入
sell_points <- plot_data %>% filter(Signal == -1)  # 假设Signal=-1表示卖出

# 1. 价格与交易信号图
price_plot <- ggplot(plot_data, aes(x = Date, y = Close)) +
  # 绘制价格线
  geom_line(color = "black", size = 1) +
  # 添加价格趋势带(20日移动平均线上下波动)
  geom_ribbon(
    aes(ymin = Close - 0.1 * Close, ymax = Close + 0.1 * Close),
    alpha = 0.1, fill = "blue"
  ) +
  # 标记买卖点
  geom_point(data = buy_points, aes(y = Close), 
             color = "green", size = 3, shape = 16, alpha = 0.8) +
  geom_point(data = sell_points, aes(y = Close), 
             color = "red", size = 3, shape = 16, alpha = 0.8) +
  # 添加买卖点标记文本
  geom_text(data = buy_points, aes(y = Close + 5, label = "Buy"), 
            color = "darkgreen", size = 3.5, fontface = "bold") +
  geom_text(data = sell_points, aes(y = Close - 5, label = "Sell"), 
            color = "darkred", size = 3.5, fontface = "bold") +
  # 设置标题和坐标轴标签
  labs(
    title = "苹果公司股票价格走势与交易信号",
    subtitle = "2018-2023年期间基于KDJ指标的交易信号",
    y = "收盘价 (USD)",
    x = ""
  ) +
  # 自定义主题
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
    plot.subtitle = element_text(hjust = 0.5, size = 12, color = "gray40"),
    axis.text = element_text(size = 10),
    legend.position = "top",
    panel.grid.minor = element_blank()
  ) +
  # 设置x轴日期格式
  scale_x_date(
    date_breaks = "3 months",
    date_labels = "%b %Y",
    expand = c(0, 10)  # 扩展x轴边界
  ) +
  # 添加价格参考线
  geom_hline(yintercept = mean(plot_data$Close), 
             color = "gray", linetype = "dashed", size = 0.7) +
  annotate("text", x = max(plot_data$Date), y = mean(plot_data$Close) + 5, 
           label = "平均价格", color = "gray", size = 3.5)

# 2. KDJ指标图
kdj_plot <- ggplot(plot_data, aes(x = Date)) +
  # 绘制KDJ线
  geom_line(aes(y = K, color = "K线"), size = 1) +
  geom_line(aes(y = D, color = "D线"), size = 1) +
  geom_line(aes(y = J, color = "J线"), size = 1) +
  # 添加超买超卖区域
  geom_ribbon(aes(ymin = 80, ymax = 100), fill = "red", alpha = 0.1) +
  geom_ribbon(aes(ymin = 0, ymax = 20), fill = "green", alpha = 0.1) +
  # 添加超买超卖线
  geom_hline(yintercept = 80, color = "red", linetype = "dashed", size = 0.8) +
  geom_hline(yintercept = 20, color = "green", linetype = "dashed", size = 0.8) +
  # 添加标记文本
  annotate("text", x = min(plot_data$Date), y = 90, label = "超买区域", 
           color = "red", size = 3.5) +
  annotate("text", x = min(plot_data$Date), y = 10, label = "超卖区域", 
           color = "green", size = 3.5) +
  # 标记买卖点对应的KDJ值
  geom_point(data = buy_points, aes(x = Date, y = K), 
             color = "green", size = 3, shape = 16, alpha = 0.6) +
  geom_point(data = sell_points, aes(x = Date, y = K), 
             color = "red", size = 3, shape = 16, alpha = 0.6) +
  # 设置标题和坐标轴标签
  labs(
    title = "KDJ技术指标",
    y = "指标值",
    x = "日期"
  ) +
  # 自定义主题
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
    axis.text = element_text(size = 10),
    legend.position = "top",
    panel.grid.minor = element_blank()
  ) +
  # 设置x轴日期格式和y轴范围
  scale_x_date(
    date_breaks = "3 months",
    date_labels = "%b %Y",
    expand = c(0, 10)
  ) +
  scale_y_continuous(limits = c(0, 100)) +
  scale_color_manual(
    values = c("K线" = "#3366CC", "D线" = "#DC3912", "J线" = "#FF9900"),
    labels = c("K线 (快速随机指标)", "D线 (慢速随机指标)", "J线 (KDJ专用线)")
  )

# 3. 组合图表
combined_plot <- gridExtra::grid.arrange(
  price_plot, kdj_plot, 
  nrow = 2, 
  heights = c(2, 1.5),
  top = grid::textGrob(
    "基于KDJ指标的股票交易信号分析", 
    gp = grid::gpar(fontsize = 18, fontface = "bold")
  )
)
print(combined_plot)
## TableGrob (3 x 1) "arrange": 3 grobs
##   z     cells    name                 grob
## 1 1 (2-2,1-1) arrange       gtable[layout]
## 2 2 (3-3,1-1) arrange       gtable[layout]
## 3 3 (1-1,1-1) arrange text[GRID.text.3608]
# 保存图表(可选)
# ggsave("KDJ_Trading_Analysis.png", combined_plot, width = 14, height = 10, dpi = 300)

交易频率分析

接下来,我们分析交易频率和持有期,这对于评估策略的实用性非常重要:

# 假设getTxns(portfolio.st,"AAPL")已获取交易数据
trades <- getTxns(portfolio.st,"AAPL")

# 数据预处理
if (nrow(trades) > 0) {
  # 转换为data.frame并添加日期列
  trades_df <- as.data.frame(trades)
  trades_df$Date <- as.Date(index(trades))
  
  # 提取买卖交易
  buy_trades <- trades_df[trades_df$Txn.Qty > 0, ]
  sell_trades <- trades_df[trades_df$Txn.Qty < 0, ]
  
  # 确保买卖交易数量匹配
  n_trades <- min(nrow(buy_trades), nrow(sell_trades))
  
  if (n_trades > 0) {
    # 按时间排序
    buy_trades <- buy_trades[order(buy_trades$Date), ]
    sell_trades <- sell_trades[order(sell_trades$Date), ]
    
    # 取前n_trades笔交易进行匹配
    buy_trades <- buy_trades[1:n_trades, ]
    sell_trades <- sell_trades[1:n_trades, ]
    
    # 计算持有期(天数)
    hold_periods <- as.numeric(sell_trades$Date - buy_trades$Date)
    
    # 计算持有期统计数据
    stats <- data.frame(
      总交易次数 = n_trades,
      平均持有期 = round(mean(hold_periods), 1),
      最长持有期 = max(hold_periods),
      最短持有期 = min(hold_periods),
      持有期标准差 = round(sd(hold_periods), 1)
    )
    
    # 输出统计结果
    print("交易持有期统计:")
    print(stats)
    
    # 1. 持有期分布直方图 - 使用ggplot2
    hold_dist_plot <- ggplot(data.frame(hold_periods), aes(x = hold_periods)) +
      geom_histogram(aes(y = ..density..), bins = 20, fill = "#3366CC", color = "white") +
      geom_density(alpha = 0.2, fill = "#FF9900") +
      geom_vline(xintercept = mean(hold_periods), color = "red", linetype = "dashed", size = 1) +
      labs(
        title = "交易持有期分布",
        x = "持有天数",
        y = "密度",
        subtitle = paste("平均持有期: ", mean(hold_periods), "天")
      ) +
      theme_minimal() +
      theme(
        plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
        plot.subtitle = element_text(hjust = 0.5, size = 12),
        axis.text = element_text(size = 10),
        panel.grid.minor = element_blank()
      )
    
    # 2. 持有期箱线图 - 展示分布特征
    hold_boxplot <- ggplot(data.frame(hold_periods), aes(x = "", y = hold_periods)) +
      geom_boxplot(fill = "#3366CC", alpha = 0.7) +
      geom_jitter(color = "#FF9900", alpha = 0.5) +
      labs(
        title = "持有期分布箱线图",
        y = "持有天数"
      ) +
      theme_minimal() +
      theme(
        plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
        axis.text.x = element_blank(),
        panel.grid.minor = element_blank()
      )
    
    # 3. 交易频率分析 - 按月统计
    trades_df$YearMonth <- format(trades_df$Date, "%Y-%m")
    trade_frequency <- trades_df %>% 
      group_by(YearMonth) %>% 
      summarise(交易次数 = n())
    
    # 交易频率柱状图
    freq_barplot <- ggplot(trade_frequency, aes(x = YearMonth, y = 交易次数)) +
      geom_bar(stat = "identity", fill = "#33CC99", color = "white") +
      labs(
        title = "月度交易频率",
        x = "年月",
        y = "交易次数"
      ) +
      theme_minimal() +
      theme(
        plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
        axis.text.x = element_text(angle = 45, hjust = 1, size = 8),
        panel.grid.minor = element_blank()
      )
    
    # 4. 组合图表
    library(patchwork)
    combined_plot <- (hold_dist_plot + hold_boxplot) / freq_barplot +
      plot_annotation(title = "AAPL交易持有期与交易频率分析",
                      theme = theme(plot.title = element_text(hjust = 0.5, size = 18, face = "bold")))
    
    # 显示图表
    print(combined_plot)
    
    # 保存图表(可选)
    # ggsave("trading_analysis.png", combined_plot, width = 12, height = 8, dpi = 300)
  } else {
    cat("没有足够的买卖交易对进行分析\n")
  }
} else {
  cat("没有交易数据可供分析\n")
}
## [1] "交易持有期统计:"
##   总交易次数 平均持有期 最长持有期 最短持有期 持有期标准差
## 1          9      557.3        910         14        364.1

结论与展望

研究结论

通过对KDJ指标的参数优化和回测分析,我们得出以下结论:

  1. 在研究期间内,基于KDJ指标的择时策略在特定参数组合下能够取得优于简单买入持有策略的风险调整后收益。
  2. 最佳参数组合显示,RSV周期(n)、K值平滑因子(k)和D值平滑因子(d)对策略表现有显著影响。
  3. 策略的交易频率适中,平均持有期符合中短期投资风格。

策略局限性

尽管KDJ指标在某些市场环境下表现良好,但仍存在以下局限性:

  1. 回测结果受历史数据限制,未来表现可能与历史表现不同。
  2. 策略在剧烈波动的市场环境中可能产生更多的虚假信号。
  3. 交易成本和滑点未被充分考虑,实际应用中可能降低策略收益。

未来研究方向

  1. 结合其他技术指标(如MACD、布林带等)构建多指标复合策略。
  2. 研究不同市场环境下KDJ指标的适用性,开发自适应参数机制。
  3. 考虑交易成本、滑点和税费等实际因素,优化策略实现。

通过本研究,我们展示了如何使用R语言和相关金融包实现技术指标的回测和优化,为量化交易策略的开发提供了实用的方法和思路。