R语言 绘制k线图

R相关知识

grid(nx=NULL,ny=NULL,lwd=1); # 设置网格线
par(new=TRUE) 在同一个图形里继续画图
每叠加一次新图形,运行一次该程序命令,即可实现在原图上继续叠加数据绘图
grid.newpage() 函数命令选择是否进行图形叠加,该命令有先后顺序,先运行。
链接:https://blog.csdn.net/tandelin/article/details/94412733
mode(close)查看数据类型 class
ctrl +R 运行选中代码
ctrl +A +ctrl +R 运行所有代码
dev.new() #创建新的图形窗口
source(‘FT_Kplot.R’)#调用函数
par(mfcol=c(2,1))#将屏幕分成2行1列,一次作图
layout() 函数有一个优点:可以指定图片的位置
layout(matrix(c(2,3,4,1),nr=2,byrow=T))
hist(rnorm(25),col=“red”,main=“a”)
hist(rnorm(25),col=“blue”,main=“b”)
hist(rnorm(25),col=“pink”,main=“c”)
hist(rnorm(25),col=“green”,main=“d”)
原文链接:https://blog.csdn.net/Sunflower_grh/article/details/52143430

  • sum(close(6:10))

Error in UseMethod(“close”) : "close"没有适用于"c(‘integer’,
‘numeric’)"目标对象的方法

正确代码:sum(close[6:10])
注意取下标要用[ ]

  • close[i-4:i] 取出的是1 - i-4个数
    正确写法:
    low1<-i-4
    MA5<-sum(close[low1:i])/5
    也可以sum(close[(i-4):i])/5

离散点求导

在这里插入图片描述

在已有图上继续添加点points

1、问题1:在R语言中,要在一个图中叠加画多个图,如何实现呢?

解决:

1)先使用plot画图,plot()函数会初始化好一副图所需要的全部要素,先用points()或lines()则不行,因为它们是低级函数,不能初始化图形。

2)使用points()或lines()函数在现有图上叠加画图。

2、问题2:如果叠加的图既要点,又要连线怎么办,points()只画点,lines()又只画线?

解决:

points(),lines()继承了plot()中的大部分参数,type参数也可像在plot()函数中一样设置,type="b"则可以点线都画。

其他参数,如设置颜色col,线型lty都可以像在plot()中使用。

points 用来在一张图表上添加点,指定好对应的x和y坐标,就可以添加不同形状,颜色的点了
在已有图上加点 • ,功能相当于plot(x,y),但plot会开一张新的图片

cex : 设置点的大小
lwd : 设置点的边框的宽度
pch : 设置点的形状,取值范围为1到25
在这里插入图片描述
col: 设置点的边框的颜色
bg : 设置点的背景色,其实就是填充色,需要注意的是,只有形状为21到25的点是有填充色的

diff()差分

diff(x, lag = 1, differences = 1, …)
若x是一个数值向量,则表示后一项减前一项,即滞后一阶差分;
lag 表示滞后项
链接:https://blog.csdn.net/G090909/article/details/50125447

R语言坐标轴设置

xaxs和yaxs 用来设置x轴和y轴的范围,默认值取“r”,表示坐标轴比给定作图范围(参数xlim和ylim给出的范围)稍微大一点儿,取”i”时表示坐标轴范围与给定作图范围完全相同,另外还可取”s”、”e”、”d”;
  xaxt和yaxt 取”n”时,坐标轴、刻度线以及刻度值将不会画出。

原文链接:https://blog.csdn.net/weixin_40628687/article/details/79254791

type线型

原文链接:
https://blog.csdn.net/sinat_41805381/article/details/80164958

par函数family参数-控制文字的字体

family用于控制文字的字体, 标准的取值范围为serif, sans, mono, 其中sans 为默认值

k线形态综述

5日均线是股市术语,就是股票5天的成交价格或指数的平均值,所对应的是股价的5日均线和指数的5日均线(5MA)。均线指标实际上是移动平均线指标的简称。
5天均线的值=最近连续5个交易日收盘价之和1/5
然后依次类推把每个五日均线的值连成一条平滑的曲线就是五日均线
10日均线是某支股票在市场上往前10天的平均收盘价格,其意义在于它反映了这支股票10天的平均成本。

1、日K线是根据股价(指数)一天的走势中形成的四个价位即:开盘价,收盘价,最高价,最低价绘制而成的。

收盘价高于开盘价时,则开盘价在下收盘价在上,二者之间的长方柱用红色或空心绘出,称之为阳线;其上影线的最高点为最高价,下影线的最低点为最低价。

收盘价低于开盘价时,则开盘价在上收盘价在下,二者之间的长方柱用黑色或实心绘出,称之为阴线,其上影线的最高点为最高价,下影线的最低点为最低价。

2、根据K线的计算周期可将其分为日K线,周K线,月K线,年K线。

周K线是指以周一的开盘价,周五的收盘价,全周最高价和全周最低价来画的K线图。月K线则以一个月的第一个交易日的开盘价,最后一个交易日的收盘价和全月最高价与全月最低价来画的K线图,同理可以推得年K线定义。周K线,月K线常用于研判中期行情。对于短线操作者来说,众多分析软件提供的5分钟K线、15分钟K线、30分钟K线和60分钟K线也具有重要的参考价值。

3、根据开盘价与收盘价的波动范围,可将K线分为极阴、极阳,小阴、小阳,中阴中阳和大阴、大阳等线型
在这里插入图片描述
原文链接:http://blog.51cto.com/zhoudf/1655434

R语言中Axis()函数的参数详解

链接:https://blog.csdn.net/t4ngw/article/details/106006083

代码

自己编写程序

#part 1 ---------------------------------------------------------------------------------
#画k线图

Kplot<-function(OPEN,HIGH,LOW,CLOSE,DATE)
#open 开盘价 close 收盘价 high 最高价 low 最低价 date 日期 
{
  N<-length(OPEN)
  w<-0.3 #k线方块宽度
  D<-CLOSE-OPEN #用于判断阴阳线
  par(family='serif')
  #family用于控制文字的字体,标准的取值范围为serif,sans,mono, 其中sans为默认值
  
  #  作图
  plot(c(1:N),CLOSE,type='n',xaxt='n',xlab='时间',ylab='价格',font.axis=1.5)
  #type 线型 type="n" 什么都没有
  #xaxt和yaxt用来设置x轴和y轴的范围 取”n”时,坐标轴、刻度线以及刻度值将不会画出。

  title(main='K线图',cex=2,col='black') #cex 指定符号的大小
  for(i in 1:N)
  { 
    lines(c(i,i),c(LOW[i],HIGH[i]),col='black',lwd=1) #画当天最高价与最低价的连线 lwd 线宽
    x<-c(i-w,i-w,i+w,i+w)
    y<-c(OPEN[i],CLOSE[i],CLOSE[i],OPEN[i]) #开盘价、收盘价 的箱体
    if(D[i]<0) #收盘价低于开盘价 绿色 反之 红色
    { 
      polygon(x,y,col='green',border='green') #polygon图形填充颜色 border边界颜色
    } else 
    {
      polygon(x,y,col='red',border='red')
    }
  }

  #绘制x轴坐标
  Index<-seq(from=1,to=N,length=5)#1-N 取中间5个数
  Index<-round(Index) #四舍五入
  Text<-DATE[Index] 
  axis(side=1,Index,labels=Text,cex.axis=1)#side=1 在下面绘制坐标轴
}

#设置屏幕
par(mfcol=c(3,1))#将屏幕分成31列,依次作图

#读取数据
a<-read.table("all.txt")
#由于数据量太大,设置参数,取部分数据进行绘图

k1<-1				#所选为前100个数据
k2<-100
date<-a[k1:k2,1]		#日期
n<-length(date)	
open<-a[k1:k2,2]		#开盘价
high<-a[k1:k2,3]		#最高价
low<-a[k1:k2,4]		#最低价
close<-a[k1:k2,5]		#收盘价
DATE<-substr(date,1,10)			#从下标1开始取10个数
Kplot(open,high, low,close,DATE) 	#数据不能带标题


#part 2-------------------------------------------------------------------------------------------------------
#根据收盘价 画5日均线-十日均线的图
#从第10个数字开始处理

#求差
cha<-rep(0,10)	#差 前10个数赋值为0
for(i in 10:n)
{
  MA5<-sum(close[(i-4):i])/5 		#5日均值 (i-4)括号一定要有
  MA10<-sum(close[(i-9):i])/10	#10日均值
  cha[i]<-MA5-MA10			#差
}

plot(c(1:n),cha,type='l',main='5日均线-10日均线图',xlab='时间',ylab='差',xaxt='n',cex=2)

#绘制x轴坐标
Index<-seq(from=1,to=n,length=5)	#1-n 取中间5个数
Index<-round(Index) 			#四舍五入
Text<-DATE[Index] 
axis(side=1,Index,labels=Text,cex.axis=1)	#side=1 在下面绘制坐标轴

#标注拐点-----------------------------------------------------------------------------------
#way 1 用二阶导数=0 判断拐点

Pknee<-function(data,a,b,th)
{
#data 数据 a,b 始末坐标 th 阈值
for(i in a:b)	#第一个点和最后一个点没有二阶导数,10个点不用算
{
  D2=data[i+1]-2*data[i]+data[i-1]			#离散点二阶导数公式
  if(abs(D2)<th)
  {
    points(i,data[i],col='red',pch=16,cex=1)	#标注拐点	
  }
}
}

#way 2 用一阶导数极值点 判断拐点
Pknee2<-function(data,a,b)
{ 
  D1=Diff1(data)		#求一阶导数
  for(i in a:b)
  {
    d1=D1[i]-D1[i-1]
    d2=D1[i]-D1[i+1]
    if( d1*d2>0 )		#d1,d2同号,i点为极值点
    {
       points(i,data[i],col='red',pch=16,cex=1)
    }
  }
}

#求一阶导
Diff1<-function(data)
{
  n=length(data)
  D1=c(0)		#第一点导数赋值为0
  for(i in 2:(n-1))
  {
    D1[i]=(data[i+1]-data[i-1])/2	#离散点一阶导数公式
  }
  D1[n]=0		#最后一点导数赋值为0
  return (D1) 	#不要忘记返回D1
}

th<-0.1		#判断拐点的阈值

Pknee(cha,11,n-1,th)	
#Pknee2(cha,10,n-1)	#第一个点和最后一个点没有二阶导数,前10个点不用算


#part 3 ---------------------------------------------------------------------------------
#一阶差分图

diff1<-diff(cha)
nd<-length(diff1)
plot(c(1:nd),diff1,main='5日均线-10日均线一阶差分图',xlab='时间',ylab='一阶差分',xaxt='n',type='l')
#绘制x轴坐标
Index<-seq(from=1,to=n,length=5)	#1-n 取中间5个数
Index<-round(Index) 			#四舍五入
Text<-DATE[Index] 
axis(side=1,Index,labels=Text,cex.axis=1)	#side=1 在下面绘制坐标轴
Pknee(diff1,10,nd-1,th)
#Pknee2(diff1,10,nd-1)

效果图
在这里插入图片描述

调用quantmod包

#采用默认的ChartSeries绘制K线图

library(quantmod)
getSymbols("GOOG",src="yahoo",from="2016-01-01", to='2016-05-30') 
chartSeries(GOOG)

# 设定参数,白色背景,蜡烛图为红色和绿色,符合中国市场

library(quantmod);
getSymbols("GOOG",src="yahoo",from="2016-01-01", to='2016-05-30') 
chartSeries(GOOG,theme = 'white',name='谷歌',up.col = 'red',dn.col = 'green')

# 设定参数,白色背景,蜡烛图为红色和绿色,符合中国市场,只绘制K线图,不绘制成交量

library(quantmod);
getSymbols("GOOG",src="yahoo",from="2016-01-01", to='2016-05-30') 
chartSeries(GOOG,theme = 'white',name='谷歌',TA=NULL,up.col = 'red',dn.col = 'green')

# 设定参数,白色背景,蜡烛图为红色和绿色,符合中国市场
#绘制周K线图
library(quantmod);
getSymbols("GOOG",src="yahoo",from="2016-01-01", to='2016-05-30') 
GOOGW<-to.weekly(GOOG)
chartSeries(GOOGW,theme = 'white',name='谷歌周线图',up.col = 'red',dn.col = 'green')
library(TTR)
library(zoo)
library(xts)
library(quantmod)
df <- read.csv("DOV_data.csv", header=T, sep=',')
myvars <- c("open","high","low","close","volume")
data <- xts(df[myvars], order.by=as.Date(as.character(df[,1]),format="%Y-%m-%d"))
head(data)#取前6项
stock <- as.xts(data, descr=df)
chartSeries(x=stock["2017-02-08/"], name='K线图', line.type="l", bar.type="ohcl", 
        theme="white", up.col='red', dn.col='green',
	TA="addVo();addSMA(5);addSMA(10);addMACD();")

效果图:
在这里插入图片描述
addATR(): 加 (Average True Range) 真实波幅的移动平均值。

addVo(): 加 Volume 成交量。
addSMA(?): 加?日移动平均线。
addBBands(): 加布林带指标,这个指标用来比较一段时间内价格的波动。
addMACD(): 这个指标是对股票价格的收盘价进行平滑处理,求出算术平均值后,再次计算,是一种趋向类指标。
原文链接:https://blog.csdn.net/belldeep/article/details/90729955

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值