从上一篇分析已经得知均线黄金交叉原则并不适用于震荡期,那有什么办法可以规避震荡期呢或者说有什么办法可以减少无脑跟的损失?我们继续玩一下。

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的更多相关文章

  1. R与金钱游戏:均线黄金交叉1

    双11临近的我发现自己真的很穷很穷很穷(重要的问题说三遍)-- 贫穷催人上进.于是我就寻思着在空闲时间自己捣鼓一下钱生钱的游戏是怎么玩的,毕竟就算注定做韭菜也要做一根有知识有理想的韭菜. 第一个要玩的 ...

  2. R与金钱游戏:美股与ARIMA模型预测

    似乎突如其来,似乎合情合理,我们和巴菲特老先生一起亲见了一次,又一次,双一次,叒一次的美股熔断.身处历史的洪流,渺小的我们会不禁发问:那以后呢?还会有叕一次吗?于是就有了这篇记录:利用ARIMA模型来 ...

  3. [libgdx游戏开发教程]使用Libgdx进行游戏开发(3)-给游戏添加一些控制功能

    每个游戏中都有一些只有程序员自己才知道的控制功能,比如增加金钱,满血复活,无视防御,不死等等. 都是为了方便自己调试而在测试阶段使用的功能. 正如上一章提到的:我们也需要加些只有程序员才知道的控制功能 ...

  4. FC红白机游戏列表(维基百科)

    1055个fc游戏列表 日文名 中文译名 英文版名 发行日期 发行商 ドンキーコング 大金刚 Donkey Kong 1983年7月15日 任天堂 ドンキーコングJR. 大金刚Jr. Donkey K ...

  5. WeQuant交易策略—简单均线

    简单双均线策略(Simple Moving Average) 策略介绍简单双均线策略,通过一短一长(一快一慢)两个回看时间窗口收盘价的简单移动平均绘制两条均线,利用均线的交叉来跟踪价格的趋势.这里说的 ...

  6. Unity游戏开发图片纹理压缩方案

    Unity3D引擎对纹理的处理是智能的:不论你放入的是PNG,PSD还是TGA,它们都会被自动转换成Unity自己的Texture2D格式. 在Texture2D的设置选项中,你可以针对不同的平台,设 ...

  7. [libgdx游戏开发教程]使用Libgdx进行游戏开发(2)-游戏框架搭建

    让我们抛开理论开始code吧. 入口类CanyonBunnyMain的代码: package com.packtpub.libgdx.canyonbunny; import com.badlogic. ...

  8. 如何看K线图基础知识

    在日K线图中一般白线.黄线.紫线.绿线依次分别表示:5.10.20.60日移动平均线,但这并不是固定的,会根据设置的不同而不同,比如你也可以在系统里把它们设为5.15.30.60均线. 你看K线图的上 ...

  9. 趋势型指标——MACD

    1.简要介绍▪ 计算方法▪ DIFF▪ DEA▪ MACD▪ 构造原理▪ 缺点2.实战技巧3.运用技巧▪ 应用原理▪ 经典用法▪ 实战战法▪ 捕捉卖点▪ 买卖策略▪ 短线实战4.组合指标运用5.一般研 ...

随机推荐

  1. 搞NDK开发

    1.哪些场景下要用到NDK开发? 跨平台的库,如FFmpeg, skip,weex, 加固,防逆向 签名校验 图片压缩 音视频解码 OpenGL ES 高级特效 热修复 andfix 人脸识别 fac ...

  2. H3C路由器设置NAT回环、端口回流

    起因 当用本地服务器作为frp的服务端时,需要在路由器上设置端口映射,将公网ip和本地ip映射起来,用于作为frps的公网,这一步很简单一般都会有可视化界面来实现,但实际测试时发现问题: 当非局域网内 ...

  3. SQL中的视图(极客时间)

    视图 视图也就是虚拟表, 本身不具备数据, 是SQL中的一个变红要概念. 如图 视图可以帮助我们使用表的一部分, 而不是所有的表, 另一方面可以针对不同的用户制定不同的查询视图. 创建, 更新与删除视 ...

  4. Hive的数据倾斜

    目录 什么是数据倾斜 Hadoop框架的特性 主要表现 容易数据倾斜的情况 产生数据清洗的原因 业务场景 空值产生的数据倾斜 不同数据类型关联产生数据倾斜 大小表关联查询产生数据倾斜 一.什么是数据倾 ...

  5. index.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  6. Python之flask框架2

    Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务.本文参考自Flask官方文档,大部分代码引用自官方文档. 安装flask 首先我们来安装F ...

  7. 05-人脸识别-FaceNet的感性认识

    源码链接:https://github.com/davidsandberg/facenet 论文链接:https://arxiv.org/pdf/1503.03832.pdf B站大神视频解读论文:h ...

  8. 万字长文把 VSCode 打造成 C++ 开发利器

    https://zhuanlan.zhihu.com/p/96819625 面对大量代码,在开发任务繁重场景下,VSCode 绝对是一把利器.本文虽以 C++为引,但在 python.php.java ...

  9. javaweb监听器实现与原理

    参考:https://www.cnblogs.com/lxp503238/p/6678688.html https://blog.csdn.net/CPOHUI/article/details/888 ...

  10. C++面向对象程序设计学习笔记(5)

    派生类与继承 概念 继承允许编程者在已有类的基础上创建新的类,可以从一个或者多个已有类中继承函数和数据,并重新定义或者添加新的函数和数据,已有类称为基类或父类,新类称为派生类和子类. 声明 声明一个派 ...