R语言——牛市追涨杀跌模型

一、牛市追涨杀跌模型

2019年,随着贸易战的和谈,国内政策面的刺激,A股迎来了一波比较客观的小牛市。由此,我们选择建立追涨杀跌模型来进行投资。接下去以所选股票池(结语有介绍)内的稳定型股票——中直股份以及活跃型股票——中国应急为例,至于选择这两只股票的原因除了类型不同外,更重要的是这两只股票都属于国防军共板块,因此建模对比效果更佳具有说服力。选择中线追涨杀跌模型]进行分析。区间选择为2019-01-01至2019-04-20。

二、个股实现及对比

我们分别把稳定型股票——中直股份和活跃型股票——中国应急带入模型,结果发现在牛市中,该模型并不是适用于所有股票,稳定型股票可能会亏钱,而活跃型股票赚钱效益明显超越稳定型股票。

1、稳定型——中直股份(附代码)

当股价大于等于20日最高价时作为买入信号点,当股价小于等于10日最低价时作为卖出信号点。我们利用R语言对股票数据的进行操作,实现追涨杀跌模型的实例,并根据模型模拟交易,通过区间收益探究模型的有效性。从而验证我的们投资理论。

具体R代码如下:

1.1 数据准备

#加载需要的R包
library(plyr)
library(xts)
library(TTR)
library(ggplot2)
library(scales)
# 加载数据
df<-read.table("stock.csv",header=T,sep = ",", na.strings = "NULL")       # 读文件
names(df)<-c("code","date","Open","High","Low","Close","Volume")          # 设置列名
dl<-split(df[-1],df$code)      #按ccode分组
data <- lapply(dl,function(row){xts(row[-1],order.by = as.Date(row$date))})   #  换成xts类型数据
class(data)        # data的类型
head(names(data))
length(data)
# 获得时间范围
dateArea<-function(sDate=Sys.Date()-365,eDate= Sys.Date(),before=0){         #   开始日期,结束日期,提单开始时if(class(sDate)=='character') sDate=as.Date(sDate)if(class(eDate)=='character') eDate=as.Date(eDate)  return(paste(sDate-before,eDate,sep="/"))
}
# 查看股票600038.SZ
head(data[['600038.SH']])
title<-'600038.SH'   #
stock<-data[[title]]                                # 获得股票数据
sDate<-as.Date("2019-01-02")                        # 开始日期
eDate<-as.Date("2019-4-19") # 结束日期
cdata<-stock[dateArea(sDate,eDate,365)]$Close       # 获得收盘价
vdata<-stock[dateArea(sDate,eDate,365)]$Volume      # 获得交易量
names(cdata)<-"Value"       # 重置列名
# 交易量
tail(vdata)

1.2 多曲线可视化

#定义画图函数drawLine(),支持画出多条曲线,包括收盘价,最高价,最低价

# 画图函数drawLine<-function(cdata,titie="Stock",sDate=min(index(cdata)),eDate=max(index(cdata)),breaks="1 year"){if(sDate<min(index(cdata))) sDate=min(index(cdata))if(eDate>max(index(cdata))) eDate=max(index(cdata))  cdata<-na.omit(cdata)g<-ggplot(aes(x=Index, y=Value),data=fortify(cdata[,1],melt=TRUE))g<-g+geom_line()if(ncol(cdata)>1){ # 多条线g<-g+geom_line(aes(colour=Series),data=fortify(cdata[,-1],melt=TRUE))  }         g<-g+scale_x_date(labels=date_format("%Y-%m"),breaks=date_breaks(breaks),limits = c(sDate,eDate))g<-g+ylim(min(cdata$Value), max(cdata$Value))g<-g+xlab("") + ylab("Price")+ggtitle(title)g}
# 计算最近20日的最高价和10日的最低价minmax<-function(data,max=20,min=10){d1<-na.locf(data,fromLast=TRUE)d2<-merge(d1,min=runMin(d1,min),max=runMax(d1,max))return(d2[,-1])}
# 画出股价,最高价和最低价
ldata<-cbind(cdata,minmax(cdata))
drawLine(ldata,title,sDate,eDate,'3 month')    # 画图
# 上图中有3条线,黑色线为每日收盘价,蓝色线为最近20日最高价,红色线为最近10日最低价。

1.3 买入信号及可视化

根据模型的计算公式,我们计算买入信号,当股价向上突破最近20日最高价格时买入。


# 买入信号函数buyPoint<-function(ldata){   idx<-which(ldata$Value == ldata$max)return(ldata[idx,])                                  }# 计算买入的点
buydata<-buyPoint(ldata)
buydata
# 画出买入的信号图,让我们可以直观的看到效果。
# 定义画图函数
drawPoint<-function(ldata,pdata,titie,sDate,eDate,breaks="1 year"){ldata<-na.omit(ldata)g<-ggplot(aes(x=Index, y=Value),data=fortify(ldata[,1],melt=TRUE))g<-g+geom_line()g<-g+geom_line(aes(colour=Series),data=fortify(ldata[,-1],melt=TRUE))if(is.data.frame(pdata)){g<-g+geom_point(aes(x=Index,y=Value,colour=op),data=pdata,size=4)}else{g<-g+geom_point(aes(x=Index,y=Value,colour=Series),data=na.omit(fortify(pdata,melt=TRUE)),size=4)  }g<-g+scale_x_date(labels=date_format("%Y-%m"),breaks=date_breaks(breaks),limits = c(sDate,eDate))g<-g+xlab("") + ylab("Price")+ggtitle(title)g}
drawPoint(ldata,buydata$Value,title,sDate,eDate,'1 month')   # 画图 

在这里插入图片描述
如上图所示,蓝色的点为股价大于等于最近20日最高价的点,作为买入信号。所有买入信号点,都是出现在单边上行的牛势中,对于2019年以来的行情来说,追涨的信号会被大量触发。接下来,我们继续计算卖出信号点,当股价小于等于最近10日最低价时作为卖出信号点。

1.4 卖出信号及可视化

# 计算卖出的信号点
stopPoint<-function(ldata,buydata){  idx<-which(ldata$Value == ldata$min)idx<-idx[which(c(0,diff(idx))!=1)]     # 第一点用0表示selldata<-ldata[idx,]                # 所有低于最小值的点  idx2<-sapply(index(buydata),function(e){    # 买后的卖点head(which(index(selldata)>e),1)})return(selldata[unique(idx2),])}  
# 卖出信号
selldata<-stopPoint(ldata,buydata)
selldata # 买卖信号,画图
bsdata<-merge(buydata$Value,selldata$Value)
names(bsdata)<-c("buy","sell")
drawPoint(ldata,bsdata,title,sDate,eDate,'1 month')  #画图

在这里插入图片描述

上图中,紫色点为卖出信号点,红色点为买入信号点。我们可以很明显的看出,如果根据交易信号在红色点买入,
紫色点卖出,那么怎么知道到底赚了多少还是亏了多少呢,因此我们需要定义函数计算出来。

1.5 模拟交易

1.5.1 参数定义

# 合并交易信号
signal<-function(buy, sell){selldf<-data.frame(sell,op=as.character(rep("S",nrow(sell))))buydf<-data.frame(buy,op=as.character(rep("B",nrow(buy))))sdata<-rbind(buydf,selldf)                                       # 交易信号数据sdata[order(as.Date(row.names(sdata))),]}
# 合并交易信号
sdata<-signal(buydata,selldata)                                   
sdata 

接下来,我们利用交易信号数据,进行模拟交易。我们设定交易参数和规则:

  1. 以20万元人民币为本金。
  2. 买入信号出现时,以收盘价买入,每次买入价值1万元的股票。若连续出现买入信号,则一直买入。若现金不足1万元时,则跳过买入信号。
  3. 卖出信号出现时,以收盘价卖出,一次性平仓信号对应的股票。
  4. 手续费为0元
# 定义模拟交易函数
trade<-function(sdata,capital=200000,fixMoney=10000){ # 交易信号,总资金,每次定投资金amount<-0cash<-capital ticks<-data.frame()for(i in 1:nrow(sdata)){row<-sdata[i,]if(row$op=='B'){if(cash<fixMoney){print(paste(row.names(row),"No enough cash"))next}amount0<-floor(fixMoney/row$Value) # 本次交易量amount<-amount+amount0cash<-cash-amount0*row$Value}if(row$op=='S'){cash<-cash+amount*row$Valueamount<-0}row$cash<-round(cash,2)row$amount<-amountrow$asset<-round(cash+amount*row$Value,2)ticks<-rbind(ticks,row)}ticks$diff<-c(0,round(diff(ticks$asset),2))rise<-ticks[intersect(which(ticks$diff>0),which(ticks$op=='S')),]   # 赚钱的交易fall<-ticks[intersect(which(ticks$diff<0),which(ticks$op=='S')),]   # 赔钱的交易return(list(ticks=ticks,rise=rise,fall=fall))}

1.5.2 交易明细

# 交易结果
result<-trade(sdata,200000,10000) 
result$ticks   #每笔明细交易

在这里插入图片描述

从上面的结果我们可以看到,在交易区间内,如果我们根据追涨杀跌模型对中直股份进行操作,我们会亏损729.22元。
这……在牛市里这个模型竟然都不能赚钱???

2、中国应急(代码略)

以同样的交易参数和规则,我们对中国应急进行探究。

2.1 买卖信号可视化

在这里插入图片描述
上图中,蓝色点为买入信号指标,并没有出现卖出信号指标,可以很清晰看出如果我们根据买卖指标操作,我们肯定会盈利,不过具体盈利多少还是要通过交易明细来体现。

2.1 交易明细

在这里插入图片描述
从上面的结果我们可以看到,在交易区间内,如果我们根据追涨杀跌模型对中国应急进行操作,我们会盈利31474.52元。

模型小结

对比中直股份和中国应急的区间盈利差异,我们可以得出以下结论:

1、在牛市中,我们的追涨杀跌模型并不是对所有股票都有效;

2、在同一个板块中,不同类型的股票对该模型的适应能力有很大差异;

3、在牛市选择股票时,我们应该选择活跃型股票,如上例的中国应急,这样才能获得更高的收益。

结语

该模型用到的股票池等相关信息,后期会用一篇完整的文章介绍。
1、 行业的确定
2、 稳定型股票池A确定
3、 稳定型股票池B确定
4、 整合股票池A、B,得到股票池C
5、 寻找潜在潜在风向标个股
6、 选取行业与上证的关联性
7、 股票池内各股票的内在联系

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14440.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

各大AI研究院共35场NLP算法岗面经奉上

本文涵盖了腾讯微信事业群模式识别中心&#xff0c;PCG和TEG事业群&#xff0c;阿里达摩院&#xff0c;蚂蚁金服&#xff0c;百度研究院&#xff0c;京东研究院&#xff0c;头条AI Lab&#xff0c;滴滴AI Lab&#xff0c;微软亚洲研究院&#xff0c;微软工程院以及联想研究院等…

DeFi会带来牛市吗?

作者&#xff1a;蒙特卡洛 一、Defi的火爆 区块链市场平淡很久了&#xff0c;最近才找到一丝丝火热的气息&#xff0c;这个火热的气息是由Defi带来的。 借助于“借贷即挖矿”&#xff0c;Compound的代币COMP在短短一个月时间之内&#xff0c;价格翻了20多倍&#xff0c;一跃成为…

bluetooth射频已关闭请打开bluetooth射频_投资笔记:5G之射频研究

文/牛市市长 微信公众号:晓烽投资 因为工作关系,今年断断续续的梳理了很多投资笔记,一直想把这篇《5G之射频前端》部分汇总篇文章推送到前台,一直没有时间。这篇文章推送了晚了点,文中的很多判断可能是基于当时的市场做出的结论,不一定适合于当下,请关注的朋友注意。 科技…

这次可能不是你所期待的牛市

6月底&#xff0c;市场还在激烈地讨论3000点是否已经被焊牢&#xff1b;7月伊始&#xff0c;上证综指便以迅雷不及掩耳之势放量突破3150&#xff0c;非银金融和房地产板块翩翩起舞&#xff0c;券商更是集体上演涨停潮。 这似曾相识的行情&#xff0c;让市场嗅到了牛市初期的味道…

无人再谈“永恒牛市”

(图片来源于网络) 请问3月份比特币6万刀的时候是什么市&#xff1f;站在今天回顾过去很多人肯定说是牛市。那么今天比特币3万3是什么市&#xff1f;这个问题就有分歧了。有人说是牛市中的回调&#xff0c;有人说是熊市的途中。从来都是如此&#xff0c;回顾过往人人皆赛诸葛孔明…

牛市因子和熊市因子

来源&#xff1a;Chihiro Quantitative Research &#xff0c;作者&#xff1a;刀疤连 未经授权严禁转载&#xff01; 1.前言 因子化投资近年来越来越火热&#xff0c;是量化投资领域的主流方向[1]。因子投资指在某个资产内部&#xff0c;使用一个或多个具有风险溢价的因子…

牛市看涨期权套利

牛市看涨期权套利 操作组合&#xff1a;买低卖高&#xff0c;方向相同 使用场合&#xff1a;对后市谨慎看多 损益图&#xff1a; 参数说明&#xff1a;较低执行价K1的权利金为Q1&#xff0c;较高执行价K2的权利金为Q2 净权利金: Q1-Q2 &#xff08;也是最大损失&#xff09;…

牛市价差组合

既可以用看涨期权构造&#xff0c;也可以用看跌期权构造 看涨期权组合 总体看好的情况下 看跌牛市价差

牛市的三个阶段

(图片来源于网络) 早在2/21文章《牛市已进入中场》[链接]中就说&#xff0c;“比特币站稳5万刀、市值破万亿之后&#xff0c;这一轮牛市就进入中场了。”那么&#xff0c;通常而言&#xff0c;牛市有以下三个阶段衔接构成&#xff1a; 第一阶段&#xff0c;上半场。远见者相信牛…

烽火通信C语言笔试题:牛市区间问题

小明最近在研究股市&#xff0c;他拿了某只股票连续n天的股市变化数据&#xff0c;天数编号1到n&#xff0c;对于第i天&#xff0c;该股票的涨跌程度用一个整数啊【i】来表示。小明觉得对于某一段日期区间【li&#xff0c;ri】&#xff0c;如果这段区间内该股票总涨幅不小于K&a…

SpringBoot集成ChartGpt

SpringBoot集成ChartGpt 文章目录 SpringBoot集成ChartGpt[TOC] 前言一、ChatGpt集成组件二、OpenAi连接配置三、查询接口调用1、代码实现2、结果展示 三、获取文本向量接口1、代码实现2、结果展示 四、代理设置总结 前言 ChatGPT&#xff08;Chatbot Generative Pre-trained …

python预测体彩大乐透

从网上抄了个机器训练的代码&#xff0c;另外自己改了几个数学预测方法 唯一不方便的就是每次要更新数据源然后由于配置太差&#xff0c;每次买之前要提前执行一个钟多&#xff0c;如果间隔时间长的话&#xff0c;手动更新数据也比较繁琐。 这段时间趁着空闲对整个程序修改了一…

ChatGPT结合Excel公式办公 —— ChatGPT统计富豪信息

&#x1f4a7; C h a t G P T 统计富豪信息 \color{#FF1493}{ChatGPT统计富豪信息} ChatGPT统计富豪信息&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &#x1f433; 《数据结构与算法…

ChatgGPT生成Excel统计公式

需求背景 编写excel公式&#xff0c;提取下图中符号之前的内容并填充到“修改后的内容”这一列 流程思路 借助ChatGPT完成Excel公式的大致流程如下&#xff1a; 确定要解决的问题&#xff1a;明确你需要在Excel中实现的具体任务或计算需求。例如&#xff0c;求和、平均值、…

利用ChatGPT编写Excel公式,对比讯飞星火与ChatGPT对Excel公式的回答

系列文章目录 借助国内ChatGPT平替MindShow&#xff0c;飞速制作PPT 借助国内ChatGPT平替markmap/Xmind飞速生成思维导图 借助国内ChatGPT平替剪映/百度AIGC平台快速制作短视频 文章目录 系列文章目录前言一、利用ChatGPT编写Excel公式1.描述我们想实现的Excel公式&#xff…

如何简单的将文档上传到ChatGPT的5种方法详解《收藏》

OpenAI 一直在为 ChatGPT 添加有意义的功能,包括对网页浏览和插件的支持。但是,仍然没有办法本地上传文档并根据其上下文提出问题。不过,有些用户可以在他们的数据上训练 AI 聊天机器人,但并不是每个人都了解如何设置工具和库。如果您正在寻找一种将文档上传到 ChatGPT 的简…

ChatGPT城市积水内涝研究

正常注册的ChatGPT是可以使用的&#xff0c;我正在做城市内涝研究&#xff0c;想看看chatgpt有什么想法。 ChatGPT提供的答案挺全面&#xff0c;文字逻辑性很好。如果是写文档的话&#xff0c;很有用处&#xff0c;但是具体实现还需要仔细研究。城市积水内涝 遥感怎么实现城市积…

上传vip专享资源,瓜分奖金池

VIP专享资源上传活动&#xff0c;每月持续上传&#xff0c;则每月均可获得奖金哦&#xff0c;敬请期待~~ 一、活动时间及任务 第一期&#xff1a;2022.10.12-2022.11.12 (第一期活动结果已出炉&#xff0c;戳此查看&#xff09; 第二期&#xff1a;2022.11.18-2022.12.18 &…

车企数字人“猛烈地来,猛烈地去”

技术战、产品战、价格战、营销战&#xff0c;高度成熟的汽车市场&#xff0c;精细地将战场划分成一块块。过去&#xff0c;越是卷入新车战事&#xff0c;车企们越需要营销带动舆论、增加市场砝码。去年&#xff0c;数字人在内的元宇宙场景是砝码之一。 然而&#xff0c;进入20…

基于台达PLC的水箱液位PID控制(matlab处理数据)

1.实验目的 &#xff08;1&#xff09;掌握过程控制的方法&#xff1b; &#xff08;2&#xff09;熟练掌握台达编程技巧&#xff1b; &#xff08;3&#xff09;熟悉实验室水箱系统、变频器的接线方法&#xff1b; &#xff08;4&#xff09;学会用文件寄存器来读取数据并…