本节介绍一些常见的股票特征,可用于股票分析和预测模型训练

顺势指标CCI

CCI中文译名为:随顺市势指标。它属于超买超卖指标中较特殊的一种。波动于广向正值无限大和微向负值无限小之间。本指标专门用以测量股价是否已超出常态分布范围

计算公式

CCI(N日)=(TP-MA)÷Std÷0.015

其中,TP=(最高价+最低价+收盘价)÷3
MA=近N日收盘价的累计之和÷N
Std=近N日数据的标准差

# Load the necessary packages and modules
import pandas as pd
import pandas.io.data as web
import matplotlib.pyplot as plt
# Commodity Channel Index
def CCI(data, ndays): TP = (data['High'] + data['Low'] + data['Close']) / 3 CCI = pd.Series((TP - pd.rolling_mean(TP, ndays)) / (0.015 * pd.rolling_std(TP, ndays)),name = 'CCI') data = data.join(CCI) return data# Retrieve the Nifty data from Yahoo finance:
data = web.DataReader('^NSEI',data_source='yahoo',start='1/1/2014', end='1/1/2016')
data = pd.DataFrame(data)# Compute the Commodity Channel Index(CCI) for NIFTY based on the 20-day Moving average
n = 20
NIFTY_CCI = CCI(data, n)
CCI = NIFTY_CCI['CCI']# Plotting the Price Series chart and the Commodity Channel index below
fig = plt.figure(figsize=(7,5))
ax = fig.add_subplot(2, 1, 1)
ax.set_xticklabels([])
plt.plot(data['Close'],lw=1)
plt.title('NSE Price Chart')
plt.ylabel('Close Price')
plt.grid(True)
bx = fig.add_subplot(2, 1, 2)
plt.plot(CCI,'k',lw=0.75,linestyle='-',label='CCI')
plt.legend(loc=2,prop={'size':9.5})
plt.ylabel('CCI values')
plt.grid(True)
plt.setp(plt.gca().get_xticklabels(), rotation=30)

简易波动指标EVM

简易波动指标(Ease of Movement Value)又称EMV指标,它是由RichardW.ArmJr.根据等量图和压缩图的原理设计而成,目的是将价格与成交量的变化结合成一个波动指标来反映股价或指数的变动状况。由于股价的变化和成交量的变化都可以引发该指标数值的变动,因此,EMV实际上也是一个量价合成指标。

计算公式

EVM=(Current High Price - Current Low Price)/2 - (Prior High Price - Prior Low Price)/2

# Load the necessary packages and modules
import pandas as pd
import pandas.io.data as web
import matplotlib.pyplot as plt# Ease of Movement
def EVM(data, ndays): dm = ((data['High'] + data['Low'])/2) - ((data['High'].shift(1) + data['Low'].shift(1))/2)br = (data['Volume'] / 100000000) / ((data['High'] - data['Low']))EVM = dm / br EVM_MA = pd.Series(pd.rolling_mean(EVM, ndays), name = 'EVM') data = data.join(EVM_MA) return data # Retrieve the AAPL data from Yahoo finance:
data = web.DataReader('AAPL',data_source='yahoo',start='1/1/2015', end='1/1/2016')
data = pd.DataFrame(data)# Compute the 14-day Ease of Movement for AAPL
n = 14
AAPL_EVM = EVM(data, n)
EVM = AAPL_EVM['EVM']# Plotting the Price Series chart and the Ease Of Movement below
fig = plt.figure(figsize=(7,5))
ax = fig.add_subplot(2, 1, 1)
ax.set_xticklabels([])
plt.plot(data['Close'],lw=1)
plt.title('AAPL Price Chart')
plt.ylabel('Close Price')
plt.grid(True)
bx = fig.add_subplot(2, 1, 2)
plt.plot(EVM,'k',lw=0.75,linestyle='-',label='EVM(14)')
plt.legend(loc=2,prop={'size':9})
plt.ylabel('EVM values')
plt.grid(True)
plt.setp(plt.gca().get_xticklabels(), rotation=30)

移动平均线指标MA

移动平均线(MA)具有趋势的特性,它比较平稳,不像日K线会起起落落地震荡。越长期的移动平均线,越能表现稳定的特性。不轻易向上向下,必须等股价趋势的真正明朗。移动平均线说到底是一种趋势追踪工具,便于识别趋势已经终结或者反转,新的趋势是否正在形成。

计算公式

.N日MA=N日收市价的总和/N(即算术平均数)

# Moving Averages Code# Load the necessary packages and modules
import pandas as pd
import pandas.io.data as web
import matplotlib.pyplot as plt# Simple Moving Average
def SMA(data, ndays): SMA = pd.Series(pd.rolling_mean(data['Close'], ndays), name = 'SMA') data = data.join(SMA) return data# Exponentially-weighted Moving Average
def EWMA(data, ndays): EMA = pd.Series(pd.ewma(data['Close'], span = ndays, min_periods = ndays - 1), name = 'EWMA_' + str(ndays)) data = data.join(EMA) return data# Retrieve the Nifty data from Yahoo finance:
data = web.DataReader('^NSEI',data_source='yahoo',start='1/1/2013', end='1/1/2016')
data = pd.DataFrame(data)
close = data['Close']# Compute the 50-day SMA for NIFTY
n = 50
SMA_NIFTY = SMA(data,n)
SMA_NIFTY = SMA_NIFTY.dropna()
SMA = SMA_NIFTY['SMA']# Compute the 200-day EWMA for NIFTY
ew = 200
EWMA_NIFTY = EWMA(data,ew)
EWMA_NIFTY = EWMA_NIFTY.dropna()
EWMA = EWMA_NIFTY['EWMA_200']# Plotting the NIFTY Price Series chart and Moving Averages below
plt.figure(figsize=(9,5))
plt.plot(data['Close'],lw=1, label='NSE Prices')
plt.plot(SMA,'g',lw=1, label='50-day SMA (green)')
plt.plot(EWMA,'r', lw=1, label='200-day EWMA (red)')
plt.legend(loc=2,prop={'size':11})
plt.grid(True)
plt.setp(plt.gca().get_xticklabels(), rotation=30)

布林线指标(BB)

布林线(BOLL)由约翰布林先生创造,其利用统计原理,求出股价的标准差及其信赖区间,从而确定股价的波动范围及未来走势,利用波带显示股价的安全高低价位,因而也被称为布林带。其上下限范围不固定,随股价的滚动而变化。布林指标和麦克指标MIKE一样同属路径指标,股价波动在上限和下限的区间之内,这条带状区的宽窄,随着股价波动幅度的大小而变化,股价涨跌幅度加大时,带状区变宽,涨跌幅度狭小盘整时,带状区则变窄。

计算公式

中轨线=N日的移动平均线
上轨线=中轨线+两倍的标准差
下轨线=中轨线-两倍的标准差

################ Bollinger Bands ############################## Load the necessary packages and modules
import pandas as pd
import pandas.io.data as web# Compute the Bollinger Bands
def BBANDS(data, ndays):MA = pd.Series(pd.rolling_mean(data['Close'], ndays)) SD = pd.Series(pd.rolling_std(data['Close'], ndays))b1 = MA + (2 * SD)B1 = pd.Series(b1, name = 'Upper BollingerBand') data = data.join(B1) b2 = MA - (2 * SD)B2 = pd.Series(b2, name = 'Lower BollingerBand') data = data.join(B2) return data# Retrieve the Nifty data from Yahoo finance:
data = web.DataReader('^NSEI',data_source='yahoo',start='1/1/2010', end='1/1/2016')
data = pd.DataFrame(data)# Compute the Bollinger Bands for NIFTY using the 50-day Moving average
n = 50
NIFTY_BBANDS = BBANDS(data, n)
print(NIFTY_BBANDS)

强力指数FI

强力指数指标(Force Index)由Alexander Elder发明,该技术指标用来指示上升或下降趋势的力量大小,在零线上下移动来表示趋势的强弱。

计算公式

FORCE INDEX(i)=VOLUME(i)*[MA(ApPRICE,N,i)-MA(ApPRICE,N,i-1)]

FORCE INDEX(i):当前柱的力量指数
VOLUME(i):当前柱的交易量;
MA(ApPRICE,N,i):在任何一个时段内当前柱的任何移动平均线:
MA(ApPRICE,N,i-1)——前一柱的任何移动平均线。

################# Force Index ######################################################### Load the necessary packages and modules
import pandas as pd
import pandas.io.data as web# Force Index
def ForceIndex(data, ndays): FI = pd.Series(data['Close'].diff(ndays) * data['Volume'], name = 'ForceIndex') data = data.join(FI) return data# Retrieve the Apple data from Yahoo finance:
data = web.DataReader('AAPL',data_source='yahoo',start='1/1/2010', end='1/1/2016')
data = pd.DataFrame(data)# Compute the Force Index for Apple
n = 1
AAPL_ForceIndex = ForceIndex(data,n)
print(AAPL_ForceIndex)

变化速率ROC

OC(Price Rate of Change)又称变动率指标,乃以今天的收盘价比较其N天前的收盘价的差除以N天前的收盘(本质其实是N日K线的涨幅),以比率表示之,此指标经由Gerald Apple 和 Fred Hitschler 两人于"Stock Market Trading Systems"一书中介绍,采用12天及25天周期可达到相当的效果。

计算公式

(close-ref(close,N))/ref(close,N)*100

# Rate of Change code# Load the necessary packages and modules
import pandas as pd
import pandas.io.data as web
import matplotlib.pyplot as plt# Rate of Change (ROC)
def ROC(data,n):N = data['Close'].diff(n)D = data['Close'].shift(n)ROC = pd.Series(N/D,name='Rate of Change')data = data.join(ROC)return data # Retrieve the NIFTY data from Yahoo finance:
data = web.DataReader('^NSEI',data_source='yahoo',start='6/1/2015',end='1/1/2016')
data = pd.DataFrame(data)# Compute the 5-period Rate of Change for NIFTY
n = 5
NIFTY_ROC = ROC(data,n)
ROC = NIFTY_ROC['Rate of Change']# Plotting the Price Series chart and the Ease Of Movement below
fig = plt.figure(figsize=(7,5))
ax = fig.add_subplot(2, 1, 1)
ax.set_xticklabels([])
plt.plot(data['Close'],lw=1)
plt.title('NSE Price Chart')
plt.ylabel('Close Price')
plt.grid(True)
bx = fig.add_subplot(2, 1, 2)
plt.plot(ROC,'k',lw=0.75,linestyle='-',label='ROC')
plt.legend(loc=2,prop={'size':9})
plt.ylabel('ROC values')
plt.grid(True)
plt.setp(plt.gca().get_xticklabels(), rotation=30)

量化交易----常见股票特征和编程实现相关推荐

  1. QUANT[6] 量化交易常见概念解析

    QUANT[1]:从零开始量化交易 - プロノCodeSteel - CSDN博客 QUANT[2]:量化交易策略基本框架搭建 - プロノCodeSteel - CSDN博客 QUANT[3]:量化交 ...

  2. 量化交易之股票数据的获取——同花顺软件 1

    前言 数据是进行量化交易的基础和关键,目前国内做量化产品的金融机构大部分是从券商获取高频实时行情数据的,另外很多金融网站也提供了数据接口,可以调用接口方式获取,也可以用爬虫的方式获取.文本讲述一种更经 ...

  3. 量化交易----常见收益模型:CAPM、价格套利模型

    CAPM模型 ri(t): t时刻,股票i的收益 rm(t): t时刻,股票时常的整体收益情况 beta是权值系数,alpha是偏差系数 该模型是一个线性模型,在该模型中,某支股票的收益和大盘的首先线 ...

  4. [60 量化交易] 对股票进行量化交易 买入最便宜的股票一年后再卖出看结果

    import pymongo from datetime import datetime, timedelta import csv# 打开数据库 mongo_client = pymongo.Mon ...

  5. 股票量化交易的优点和缺点分别有哪些?

    股票量化交易,就是将股票市场所有的股票信息,比如股票的涨跌历史数据,成交量历史数据,股票的基本面历史数据,指数涨跌历史数据等等全部输入计算机,进行大数据分析,之后根据大数据选择出炒股成功率最高的方案, ...

  6. 分析股票量化交易实盘接口和人类操盘手的优缺点

    股票量化交易,就是将股票市场所有的股票信息,比如股票的涨跌历史数据,成交量历史数据,股票的基本面历史数据,指数涨跌历史数据等等全部输入计算机,进行大数据分析,之后根据大数据选择出炒股成功率最高的方案, ...

  7. QUANT[1]:从零开始量化交易

    本文是量化交易系列博文的第一篇,后续的如下所列 QUANT[1]:从零开始量化交易 - プロノCodeSteel - CSDN博客 QUANT[2]:量化交易策略基本框架搭建 - プロノCodeSte ...

  8. QUANT[2]:量化交易策略基本框架搭建

    本文是量化交易教程的第二篇 (原文写的比较简单,编程的详解部分面向没有编程基础的人) QUANT[1]:从零开始量化交易 - プロノCodeSteel - CSDN博客 QUANT[2]:量化交易策略 ...

  9. QUANT[10]量化交易——因子暴露度,因子收益与模型

    QUANT[1]:从零开始量化交易 - プロノCodeSteel - CSDN博客 QUANT[2]:量化交易策略基本框架搭建 - プロノCodeSteel - CSDN博客 QUANT[3]:量化交 ...

  10. Python量化交易+网格技术分析及实战测试

    主要目标 使用Python爬取股票数据 数据清洗并上传至HDFS 使用PyHive对股票数据进行分析 Python数据分析-量化交易 股票量化交易分析 使用Python爬取股票数据 我们这次的目标地址 ...

最新文章

  1. HTML5本地存储localStorage,sessionStorage
  2. leetcode二维查找
  3. 1.7 Character类
  4. 第三届“传智杯”全国大学生IT技能大赛(初赛B组)【C++】
  5. 【译】Activitys, Threads和 内存泄露
  6. 赞!15个来自 CodePen 的酷炫 CSS 动画效果
  7. 深度学习修炼(一)——从机器学习转向深度学习
  8. React开发(200):三种截取字符串的方法
  9. 装逼 | 10个JS精简代码无形装逼集合,最为致命,记得收藏好
  10. python获取绝对路径_python - OS(一)获取绝对路径
  11. Restful无状态请求和网关
  12. 云课堂智慧职教网页版登录入口_云课堂智慧职教登录入口
  13. Alize和NIST中sphere2.7编译问题
  14. java 二叉树运用场景_java二叉树有什么作用?有哪些实际应用?
  15. 怎么批量删除html里的字段,shp文件怎么删除字段
  16. 【面试准备】计算机体系结构
  17. 数据分析进阶-Excel绘制分段折线图
  18. 高密集型工业体系步履蹒跚
  19. linux系统amd驱动怎么安装教程,ubuntu amd显卡驱动安装教程
  20. 股票做空是什么意思?股票做空和做多是什么意思?

热门文章

  1. 逆向工程的几种应用方向
  2. git archive使用笔记
  3. Java(22):Java连接Mysql数据库的操作说明
  4. 2022年全球与中国汽车MEMS加速度计市场现状及未来发展趋势
  5. 从发声机理到听觉感知认识声音的本质
  6. Ubuntu 16 永久修改ulimit中的max file open限制
  7. 解决 Sublime Text 中文样式显示异常问题
  8. RabbitMQ数据丢失
  9. 安卓手机怎么设置禁止使用流量_安卓怎样禁止软件联网 安卓限制应用联网app...
  10. 使用防火墙禁止软件联网