R与金钱游戏:均线黄金交叉2
从上一篇分析已经得知均线黄金交叉原则并不适用于震荡期,那有什么办法可以规避震荡期呢或者说有什么办法可以减少无脑跟的损失?我们继续玩一下。
Required Packages
```r
library(quantmod)
library(ggplot2)
library(scales)
```
Postpone Trading
第一个尝试的方法是推迟买入时间。
若股价处于震荡期,那么有可能就是今天涨了明天跌。我们可以在买入信号出现的时候暂时抑制内心买买买的冲动,推迟个3-5天观察一下股价是否还处于上升期。若是,我们再大胆出手。
######
buy <- which(signals$Signal == 1)
sell <- which(signals$Signal == -1)
for(ii in 1:length(buy)){
tmp <- 0
index <- buy[ii]
signals$Signal[index] <- 0
for(jj in 1:delay_days)
tmp <- tmp + signals$Trade[index + jj]
if(tmp == delay_days)
signals$Signal[index + delay_days] <- 1
else
signals$Signal[sell[ii]] <- 0
}
######
假设我们在买入信号出现的时候推迟 3 天且这 3 天内短期均线依然高于长期均线,则出手买入。那么从 2018-01-01 开始至 2019-11-07(上次分析的截止时间) 至今一共有 22 次交易 (买卖合计),相较于上一篇的分析中少了 8 次交易。本金最后为 92,293.10,亏损 7,706.90。亏损率由 19% 降为 7%。另外从图中我们也可以看见推迟买入也减少了在 2018 年的频繁交易
Early Termination
第二个尝试的方法是提前终止交易,俗称止损。
我们可以设置止损线,即股价跌破某一个位置的时候无论是否为死亡黄金交叉都选择卖出,即时止损。
#####
buy <- which(signals$Signal == 1)
sell <- which(signals$Signal == -1)
iteration <- min(length(buy), length(sell))
if(sell_ratio > 0) {
for(ii in 1:iteration){
buy_index <- buy[ii]
sell_index <- sell[ii]
for(jj in buy_index:sell_index){
if(signals$Value[jj]/signals$Value[buy_index] < 1- (sell_ratio - 0.02)) {
signals$Signal[sell_index] <- 0
signals$Signal[jj] <- -1
signals$Trade[jj] <- 0
break
}
}
}
}
#####
假设我们将止损额设为 7%, 即现在比买入价低于 7% 则卖出。那么从 2018-01-01 开始至 2019-11-07(上次分析的截止时间) 至今一共有 30 次交易 (买卖合计),盈利交易一共有 6 次。本金最后为 84,796.95,亏损 15,203.05。亏损率由 19% 降为 15%。
Differentiate
我们都知道均线是延后表达的, 我们没有办法 100% 预判此时此刻是不是在震荡期内。但是通常震荡期内的均线大部分是趋于平缓的(即斜率接近于零),而趋势期内的均线是倾斜的,而且越倾斜(斜率越大)上涨的空间也越大。该表现用长期均线判定更为准确。
我们利用均线的斜率过滤一些表现为平缓趋势的买入点,即只有当买入信号出现且此时的均线斜率大于某值时才买入,否则不做交易。
#####
switch(filter_type,
"NO_FILTER" = print("No Filter!"),
"DIFF_SHORTTERM_GREATER_THAN_POINT_5" = signals <- signals[-c(which(signals$Signal == 1 & signals$Diff_1 < 0.5),
which(signals$Signal == 1 & signals$Diff_1 < 0.5) + 1),]
)
#####
假设我们将买入过滤器设为5日均线的斜率大于 0.5 (倾斜角约为 26.5°), 即买入信号的5日均线的斜率大于 0.5 才真正地买入。那么从 2018-01-01 开始至 2019-11-07(上次分析的截止时间) 至今一共有 20 次交易 (买卖合计),盈利交易一共有 6 次。本金最后为 99,788.09,亏损 211.91。亏损率由 19% 降为 0.02%。从图中我们也可以看见过滤器过滤了一些震荡期中的交易。
Questions
这些方法都能在一定程度上让我们避开在震荡期交易,但是如果要确切的使用上这些方法,那么具体的数字应该设置为多少才是合适的呢,即针对某一只股票应该推迟多少天买入避开震荡期呢?或者设置多少的止损线呢?又或者均线的斜率设置为多少作为过滤呢?以后有机会再用一些更先进的方法玩一下。
相关文章:R与金钱游戏:均线黄金交叉1
Code
```r
get_signals signals[,c(ma_name_2)], 1, 0)
signals
add code block here
signals <- signals[which(signals$Signal != 0),]
if(length(signals$Index) < 1) {
print("No trading signal!")
return (signals)
}
if(nrow(signals)%%2 == 1) {
if(signals$Trade[1] == 1)
signals <- signals[-c(nrow(signals)),]
else
signals <- signals[-c(1),]
}
if(signals$Trade[1] == 0) {
signals <- signals[-c(nrow(signals)),]
signals <- signals[-c(1),]
}
signals <- signals[,-which(names(signals)%in% c(ma_name_1, ma_name_2, "Diff_1", "Diff_2"))]
return (signals)
}
R与金钱游戏:均线黄金交叉2的更多相关文章
- R与金钱游戏:均线黄金交叉1
双11临近的我发现自己真的很穷很穷很穷(重要的问题说三遍)-- 贫穷催人上进.于是我就寻思着在空闲时间自己捣鼓一下钱生钱的游戏是怎么玩的,毕竟就算注定做韭菜也要做一根有知识有理想的韭菜. 第一个要玩的 ...
- R与金钱游戏:美股与ARIMA模型预测
似乎突如其来,似乎合情合理,我们和巴菲特老先生一起亲见了一次,又一次,双一次,叒一次的美股熔断.身处历史的洪流,渺小的我们会不禁发问:那以后呢?还会有叕一次吗?于是就有了这篇记录:利用ARIMA模型来 ...
- [libgdx游戏开发教程]使用Libgdx进行游戏开发(3)-给游戏添加一些控制功能
每个游戏中都有一些只有程序员自己才知道的控制功能,比如增加金钱,满血复活,无视防御,不死等等. 都是为了方便自己调试而在测试阶段使用的功能. 正如上一章提到的:我们也需要加些只有程序员才知道的控制功能 ...
- FC红白机游戏列表(维基百科)
1055个fc游戏列表 日文名 中文译名 英文版名 发行日期 发行商 ドンキーコング 大金刚 Donkey Kong 1983年7月15日 任天堂 ドンキーコングJR. 大金刚Jr. Donkey K ...
- WeQuant交易策略—简单均线
简单双均线策略(Simple Moving Average) 策略介绍简单双均线策略,通过一短一长(一快一慢)两个回看时间窗口收盘价的简单移动平均绘制两条均线,利用均线的交叉来跟踪价格的趋势.这里说的 ...
- Unity游戏开发图片纹理压缩方案
Unity3D引擎对纹理的处理是智能的:不论你放入的是PNG,PSD还是TGA,它们都会被自动转换成Unity自己的Texture2D格式. 在Texture2D的设置选项中,你可以针对不同的平台,设 ...
- [libgdx游戏开发教程]使用Libgdx进行游戏开发(2)-游戏框架搭建
让我们抛开理论开始code吧. 入口类CanyonBunnyMain的代码: package com.packtpub.libgdx.canyonbunny; import com.badlogic. ...
- 如何看K线图基础知识
在日K线图中一般白线.黄线.紫线.绿线依次分别表示:5.10.20.60日移动平均线,但这并不是固定的,会根据设置的不同而不同,比如你也可以在系统里把它们设为5.15.30.60均线. 你看K线图的上 ...
- 趋势型指标——MACD
1.简要介绍▪ 计算方法▪ DIFF▪ DEA▪ MACD▪ 构造原理▪ 缺点2.实战技巧3.运用技巧▪ 应用原理▪ 经典用法▪ 实战战法▪ 捕捉卖点▪ 买卖策略▪ 短线实战4.组合指标运用5.一般研 ...
随机推荐
- 【maven】搭建maven私服--基于CentOS7.6+docker
一.docker环境 Docker version 19.03.5, build 633a0ea 二.安装并启动 Maven 私服的工具: Sonatype Nexus 1.搜索 2.下载镜像 doc ...
- 【分布式搜索引擎】Elasticsearch之如何安装Elasticsearch
在Macos上安装 一.下载安装过程 最新版本下载地址: https://www.elastic.co/cn/downloads/elasticsearch 历史版本下载地址: https://www ...
- 解决eclipse中maven多模块项目显示不全的问题
背景:在eclipse中导入maven项目,后来发现有的子模块不能正常的显示出现 原因:没有加载到子模块的pom文件 解决方法:重新导入:import-> 勾选项目->选择你缺少的项目的p ...
- win10上安装ubunt18双系统过程中出现mmx64.efi not found问题
安装Ubuntu18过程中,从u盘启动ubunt安装,出现mmx64.efi not found问题 如下图: 制作好ubunt启动盘之后在EFI/BOOT下会看到两个文件,将其中grubx64.ef ...
- 2019 China Collegiate Programming Contest Qinhuangdao Onsite
传送门 D - Decimal 题意: 询问\(\frac{1}{n}\)是否为有限小数. 思路: 拆质因子,看是不是只包含2和5即可,否则除不尽. Code #include <bits/st ...
- 使用设备树来编写led驱动程序
在总线设备驱动模型中,平台设备是写在c文件中.使用设备树时,平台设备事先并不存在,在dts文件中构造节点,节点里面含有资源.dts文件被编译成dtb文件,然后传递给内核.内核会解析dtb文件,得到一个 ...
- 201871010121-王方-《面向对象程序开发设计java》第十四周实验总结
4 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/ ...
- 多线程(三)多线程同步_基本介绍及mutex互斥体
同步进制的引入为了解决以下三个主要问题:1.控制多个线程之间对共享资源访问,保证共享资源的完整性例如:线程A对共享资源进行写入,线程B读取共享资源2.确保多个线程之间的动作以指定的次序发生例如:线程B ...
- 2019.6.11_MySQL进阶三:临时表
临时表 临时表主要应用于保存一些临时数据.临时表只在当前连接可见.当关闭连接时,MySQL会自动删除表并且释放空间.临时表在MySQL 3.23版本中添加,低于 3.23版本就无法使用MySQL的临时 ...
- 03-cmake语法-变量,字符串
CMake的基本数据类型是字符串(不区分大小写),一组字符串在一起称为列表(list). 条件判断中的取值情况如下表: 真 1, ON, YES, TRUE, Y, 非0的数 假 0, OFF, N ...