JQData | 利用区间极值法对牛熊市进行简单划分

2023-10-13 04:48

本文主要是介绍JQData | 利用区间极值法对牛熊市进行简单划分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

利用JQdata获取市场(股票)历史时间段处于牛市状态还是熊市状态

转自 https://www.joinquant.com/post/15536?tag=algorithm

如题,牛市和熊市的交易者心理预期与交易习惯可能是不相同的,为了方便统计不同市场情绪下市场,可以使用历史数据进行简单划分,也可以大致判断目前市场走势处于一个什么状态之中

import numpy as np 
import pandas as pd
from scipy.signal import  argrelextrema
from jqdatasdk import *
auth('账号','密码')
data = get_price('000001.XSHG',start_date='2007-01-01',end_date='2018-11-18')
# data.to_csv('000001.csv')
# data = pd.read_csv('000001.csv')  #为防止意外可以先将数据储存下来
def get_bull_or_bear(series,order=100):'''获取时间区间所处的牛熊市状态传入: series如close, order代表划分前后追朔的数据量,数据量越大,精度越小返回: 交易日的牛熊市的分类,series'''# 利用scipy在前后order个交易日内寻找极值点x=series.valueshigh = argrelextrema(x,np.greater,order=order)[0]low = argrelextrema(x,np.less,order=order)[0]high_s = pd.Series('high',series.iloc[high].index)low_s = pd.Series('low',series.iloc[low].index)data1 = pd.concat([high_s,low_s]).sort_index()other = []for i in range(len(data1)-1):               #去除重复值划分if data1.iloc[i]==data1.iloc[i+1]:other.append(data1.index[i])data1.drop(other,inplace=True)data1[series.index[-1]] = data1.iloc[-2]     #加上开头与结束的归类data1[series.index[0]] = data1.iloc[1]data1.sort_index(inplace=True)              # 获得牛熊分界点bull_data = pd.Series(False,series.index,name='is_bull')  #获得每一交易日属于牛市期还是熊市期if data1[0]=='high': is_bull =False else:is_bull=Truefor i in range(len(data1)-1):if is_bull:bull_data[data1.index[i]:data1.index[i+1]] = Trueis_bull=Falseelse:is_bull=Truereturn bull_data
bull_data  = get_bull_or_bear(data.close,100)
bull_data.value_counts()
False    1761
True     1128
Name: is_bull, dtype: int64
ax  = bull_data.plot(style='-',figsize=(17,5))
data.close.plot(secondary_y=True,ax=ax)
<matplotlib.axes._subplots.AxesSubplot at 0x7fe302f34790>

bull_data  = get_bull_or_bear(data.close,50)
ax  = bull_data.plot(style='-',figsize=(17,5))
data.close.plot(secondary_y=True,ax=ax)
<matplotlib.axes._subplots.AxesSubplot at 0x7fe309a63650>

# 很长时间我们可能会沉浸在牛市或者熊市的状态中,实际上早已脱离牛市(熊市),所以使用ema指标简单模拟何时我们发现离开了牛市(熊市)
series = pd.ewma(data.close,span=50)
bull_data  = get_bull_or_bear(series,100)
ax  = bull_data.plot(style='-',figsize=(17,5))
data.close.plot(secondary_y=True,ax=ax)
series.plot(secondary_y=True,ax=ax)
/opt/conda/envs/python2new/lib/python2.7/site-packages/ipykernel_launcher.py:2: FutureWarning: pd.ewm_mean is deprecated for Series and will be removed in a future version, replace with Series.ewm(ignore_na=False,span=50,min_periods=0,adjust=True).mean()
<matplotlib.axes._subplots.AxesSubplot at 0x7fe309d16350>

这篇关于JQData | 利用区间极值法对牛熊市进行简单划分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/200858

相关文章

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 10130 简单背包

题意: 背包和 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al