SF21 | 利用PSY指标,我们来开发一个短线模型?
致力于分享量化策略,培训视频,Python,程序化交易等相关内容
引用
PSY指标(psychological line)
是研究投资者对市场涨跌产生心理波动的情绪指标,是一种能量类和涨跌类指标。它对市场短期走势的研判具有一定的参考意义。
作为分析市场的涨跌指标,PSY指标是在时间的角度上计算N日内的多空总力量,来描述市场目前处于强势或弱势,是否处于超买或超卖状态。它主要是通过计算N日内股价或指数上涨天数的多少来衡量投资者的心理承受能力,为投资者进行买卖操作提供参考。
PSY指标是以一段时间收盘价涨跌天数的多少为依据,其计算方法很简单,计算公式如下:
PSY(N)=A÷N×100
N为周期,是PSY的参数,可以为日、周、月、分钟
A为在这周期之中股价上涨的周期数
例如:N=20日时,日之中有12日上涨,8日下跌,则PSY(20日)=60。
这里判断上涨和下跌是以收盘价为标准,计算日周期的收盘价如果比上一周期的收盘价高,则定为上涨;比上一周期的收盘价低,则定为下跌。
在确定使用MACD+PSY指标后,我们规定了如下的交易策略:
Theil-Sen + Mann-Kendall=MACD+PSY
开仓做多:MACD在0轴以上并且PSY大于50;
开仓做空:MACD在0轴以下并且PSY小于50;
平仓:MACD或者PSY任一指标给出反向信号;
止盈:PSY超过上界多单止盈,PSY超过下界空单止盈。
止盈后只可开反向头寸:如多单止盈,则下一次开仓只可做空,不可做多。空单开出后,该限制条件消失。
该策略在实盘应用的过滤效果反映在了下图中,我们可以看到在白色箱体内的反复振荡行情中,单纯的观察MACD指标会给出一系列的开仓信号。这在振荡行情中不仅浪费了资金的使用效率,还将自己暴露在市场风险中,而加入PSY指标后,我们看到该振荡行情内没有任何持仓。
将单指标MACD系统和双指标MACD+PSY系统进行比较来体现PSY指标的作用,可以发现,由于加入PSY指标以后需要双重确认才会开仓,这无疑大大减少了盈利的机会,但是同时也过滤了额外的无意义的入市风险。
图为PSY在振荡行情中的过滤器效果,上图为MACD,下图为MACD+PSY
观察利润回撤比我们发现,在加入PSY指标后,利润风险比在两个品种上都有所提升,这充分说明了PSY的双重确认效果在交易层面确实存在优势。其次通过观察交易手数,我们发现PSY起到了显著的过滤器作用,MACD+PSY系统的开仓次数相比于MACD单指标系统减少一半还要多。
虽然建仓次数减少一半,但是单笔利润却增长了一倍以上,这充分表明了PSY指标在止盈上的效果,有效防止了盈利的回吐。最后我们再观察胜率,发现在PSY指标的过滤和止盈帮助下,胜率均有大幅提升。
资料参考:PSY指标在交易中的应用(来源于网络,如有侵权请联系客服删除)
思考与改造
笔者对以上的PSY策略应用进行了测试验证,发现效果并不好。所以放弃了原有的使用方法,仅仅借鉴了其思路。PSY统计一个周期内的上涨和下跌次数,仅考虑BAR线是上涨还是下跌,缺乏对BAR本身的描述无法对行情的强度进行判断,造成了以下这种情况。
如上图所示,大阴线的特殊性并没有在PSY指标里体现,仅是当作了一个下跌的线和前面的小阴线并无差别。这就是问题所在了,上涨和下跌次数并不能完整的描述出价格变化的幅度和方向,这也是参考资料里PSY要结合MACD这种趋势指标的原因,但实际效果并不好。
如上图所示,我们需要针对关键Bar线进行描述,在原版PSY的基础上,我们添加Abs(C-C[1])计算波幅,在一定周期内每个BAR线的波幅都会被计算,同时区分上涨和下跌波幅,即波幅就是Bar线的权重。
//计算N周期内上涨下跌的累计次数,上涨的幅度之和与下跌幅度之和
For i=1 To N
{
If(Condition_Close[i])
{
Sum_up=Sum_up+1;
Sum_uprange=Sum_uprange+true_Range[i];
}Else
{
Sum_dn=Sum_dn+1;
Sum_dnrange=Sum_dnrange+true_Range[i];
}
}
PSY 蓝色线
RANGE 黄色线
红框内我们看到RANGE=75%说明多头更强,但是PSY=50%什么都说明不了,这是因为RANGE考虑了波幅这个权重因子,让我们知道了即使在上涨下跌次数55开的情况下,仍然靠那么1-2根K线决定了价格走向。
交易条件
开多:PSY>50 and RANGE >TS
开空:PSY<50 and RANGE <TSS
出场: VWAP移动出场
周期:5分钟
交易时间:2015年至今
手续费:开平各1.5%%,1滑跳
实例效果
交易开拓者:
【螺纹】
螺纹(2015年至今)
文华WH8
【螺纹】
MC(螺纹)
金字塔(螺纹)
注意,不同平台的历史数据差异,交易函数差异造成了绩效差异,仅供参考,请自己针对不同平台再做微调,原生版以TB为主
投资组合绩效(交易开拓者)
螺纹
PP
甲醇
苹果
棕榈
源码版本:
本策略仅作学习交流使用,实盘交易盈亏投资者个人负责。
SF21 | 利用PSY指标,我们来开发一个短线模型?相关推荐
- 利用scrapy和MongoDB来开发一个爬虫
利用scrapy和MongoDB来开发一个爬虫 今天我们利用scrapy框架来抓取Stack Overflow里面最新的问题(),并且将这些问题保存到MongoDb当中,直接提供给客户进行查询. 安装 ...
- 利用WCF的callback机制开发一个简单的多人游戏模型
本文介绍了如何利用WCF和callback机制开发一个简单的多人在线游戏模型. 运行过程如下: 当game service 启动之后,若干个客户端便会自动连接到服务器.当某个客户端点击join gam ...
- 如何从零开始用Keras开发一个机器翻译系统
摘要: 作者拥有大量的实战经验,快来跟着作者开发属于你自己的神经网络翻译系统吧. 点此查看原文:http://click.aliyun.com/m/42632/ 机器翻译是一项非常具有挑战性的任务,按 ...
- python的Tkinter库简单应用——开发一个简易计算器
利用python的Tkinter库开发一个简易计算器 文章目录 利用python的Tkinter库开发一个简易计算器 前言 一.实验准备 二.开发步骤步骤 1.引入库 2.界面设计 3.关键--实现T ...
- 软件开发模型-瀑布模型、V形模型、原型模型、增量模型、快速开发、敏捷模型
文章目录 0x01 边做边改模型 0x02 瀑布模型 0x03 V形模型 0x04 原型模型 0x05 增量模型 0x06 螺旋模型 0x07 快速应用程序开发模型 (RAD) 0x08 敏捷模型 0 ...
- 设计模式之美-11| 实战一(下):如何利用基于充血模型的DDD开发一个虚拟钱包系统?
十一.设计模式之美-11| 实战一(下):如何利用基于充血模型的DDD开发一个虚拟钱包系统? 一.钱包业务背景介绍 一个简单的钱包业务功能如下 1.充值 用户通过三方支付渠道,把自己银行卡账户内的钱, ...
- 利用阿里云OSS开发一个私人网盘/外链系统,php+js实现
什么是阿里云OSS? 简单地理解,阿里云OSS(以下简称OSS)就是一个储存空间比较大的硬盘. 一般储存空间在40GB-400TB范围内 根据自己的需要去购买,而且便宜! 在阿里云官网可以购买. 我自 ...
- 利用java开发一个猜数字幸运小游戏:游戏规则如下
package com.day04.www;import java.util.Random; import java.util.Scanner;public class day04 {public s ...
- 利用MyEclipse开发一个调用webservice接口的程序
上一篇文章我们已经学习了如何使用Java 工具MyEclipse开发一个webservice接口,那么接口开发好了如何调用?接下来我们就来解决这个问题. 1:首先随便创建一个Java project选 ...
最新文章
- Erlang Start![3]
- python水平条形图_如何在Bokeh(Python)中绘制水平条形图
- PowerDesigner教程系列(四)概念数据模型
- ActionScript3.0自定义Flex组件问题 重写组件的使用
- Matlab从入门到精通-在线性代数中的应用(二):求解齐次线性方程组
- [转载]我的博后申请经历从陶瓷到Offer过程
- 开始一个django项目
- 五大算法之二--动态规划
- Angular6_PWA
- C++新特性探究(二):override、final
- vux在ISO中异常 this.$vux.confirm.show
- 红旗7.0 rc1 版编辑开始菜单
- 位图转矢量图工具,快和模糊图片说白白
- 20145325张梓靖 《信息安全系统设计基础》第2周学习总结
- Android 9,安卓开发项目实战
- 【UE5】蓝图制作简单地雷教程
- 微信小程序详细图文教程-10分钟完成微信小程序开发部署发布 小程序趟过的坑,你遇到几个??
- Python的PyAutoGUI库整理中文文档,可以让所有GUI都实现自动化。
- html anki编辑器,AnkiEditor | F-Droid - Free and Open Source Android App Repository
- python图形化界面