KDJ

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线。其计算基于以下步骤: