案例:获取年度大于股价中位数的天数占比

案例:获取年度大于股价中位数的天数占比

在这里插入图片描述

import numpy as np
import pandas as pd

# ----ASSIT: def assit_pdread_data(_ttcode,_p_input):--------------------------------------------------------
def assit_pdread_data(_ttcode,_p_input):
			
	if _p_input == '1d':
		_p = datetime.timedelta(days=1)
	elif _p_input == '60m':
		_p = datetime.timedelta(minutes=60)
	elif _p_input == '30m':
		_p = datetime.timedelta(minutes=30)
	elif _p_input == '15m':
		_p = datetime.timedelta(minutes=15)
	elif _p_input == '5m':
		_p = datetime.timedelta(minutes=5)
	elif _p_input == '1m':
		_p = datetime.timedelta(minutes=1)				
	
	try:
		if _p_input == '1d':
			data = pd.read_csv('D:\\Python\\002\\%s.csv'%_ttcode)
			# rename '''Date_Time,Open,High,Low,Close,Volume'''
			data.rename(columns={'date': 'Date_Time','open': 'Open','high':'High',
								 'low':'Low','close':'Close','volume':'Volume'
							    },inplace=True)
		else:
			# rename '''Seq,Date_Time,Open,High,Low,Close,Volume'''
			data = pd.read_csv('D:\\Python\\002\\%s_%s.csv'%(_ttcode,_p_input))
			data.rename(columns={'Unnamed: 0':'Seq','datetime':'Date_Time','day':'Date_Time',
							 'open': 'Open','high':'High','low':'Low','close':'Close','volume':'Volume',
							 },inplace=True)
			
		_scale_avail = len(data)
		_date_st_avail = data.loc[0,'Date_Time']
		_data_ed_avail = data.loc[_scale_avail-1,'Date_Time']
		
		print(data.head(3))
		print(data.tail(3))
		print('params_for_use:[data,_p,_scale_avail,_date_st_avail,_data_ed_avail] ')
		return [data,_p,_scale_avail,_date_st_avail,_data_ed_avail]
	except Exception as e:
		return ['no data','no data','no data','no data','no data',]
		print(e)
	#return: params_for_use:[data,_p,_scale_avail,_date_st_avail,_data_ed_avail] 

#----BODY---------------------------------------------------------------------------------------------	
ttcode = 'sh510300'
data = assit_pdread_data(ttcode,'1d')[0]
data['Date_Time'] = pd.to_datetime(data['Date_Time'], format='%Y/%m/%d')	
data.set_index(['Date_Time'], inplace=True)


# 切片 2020年全年
df=data['20200102':'20201231']
dfc = df.Close

# 中位数
me  = np.median(dfc)
dfc_overme = dfc[dfc>me]
dff = pd.concat([dfc,dfc_overme],axis=1)
dff.columns = ['Close', 'Overme']




#----测试matplotlib
import matplotlib
matplotlib.use('Qt5Agg') 
#matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.dates as mdate

## Clear
#gcf().clf()
plt.clf()

## Setting
fig1 = plt.figure(num=1)
ax1 = fig1.add_subplot(111, ylabel='Close')
ax1.set_title('ax1 median test of %s'%(ttcode))	

## Draw
#dfc.plot(ax=ax1, color='red', kind='bar', legend=True)
dff.Close .plot(ax=ax1, color='r', lw=1., legend=True)
dff.Overme.plot(ax=ax1, color='y', lw=3., legend=True)


## xticks,yticks
locs, labels = plt.xticks()		
interval = (locs[-1]+1-locs[0]) // 10								
ax1.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d'))	
plt.xticks(np.arange(locs[0], locs[-1]+1, step=interval),rotation=45)

## horizonal,vertical
x = locs
_y = [me]*len(x)
line_x = ax1.plot(x, _y, color='skyblue')[0]

## Text
n_me = len(dff.Overme.value_counts(np.nan)) # 112days not nan
up_ratio = '{:.0%}'.format(n_me/len(dff))
text = up_ratio
plt.text(locs[0],me,text,fontdict={'size':16,'color':'r'})
plt.show()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值