茅台酒怎么塑封,tushare day5——超简单的策略实现 -ag真人官方入口

苗坤旺离型膜

股票分析

1??用tushare包获取某支股票的历史行情数据

1.1??查询茅台酒的股票编码并获取数据1.2??只显示感兴趣的四列(开、收盘价,最高、最低价)2??输出该股票所有收盘比开盘上涨大于等于3%及以上的日期

2.1??该股票所有收盘比开盘上涨大于等于3%的行2.2??该股票所有收盘比开盘上涨大于等于3%的日期2.3??该股票所有收盘比开盘上涨大于等于10%的行3??输出该股票所有开盘比前日收盘跌幅超过2%的日期

3.1??所有列错位下移3.2??所有列上移3.3??收盘价单列下移3.4??输出该股票所有开盘比前日收盘跌幅超过2%的行3.5??输出该股票所有开盘比前日收盘跌幅超过2%的日期4??策略实现:假如从tushare有记录日期开始,每月第一个交易日买入一手股票,每年最后一个交易日卖出所有股票,到今天为止,我的收益如何?

4.1??剔除无用数据(最前最后的月数据不全),并尝试各月汇总4.2??取出每月月初第一支股票信息4.3??resample的用法4.4??取出每年的最后一支股票4.5??去掉信息不全的17年的最后一支股票4.6??把2001所有的月初股票信息取出来4.7??取得最后未卖出股票的价值(获取股票最后一天的开盘价)4.8??策略代码(输出每年的收益及最终收益)

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import tushare as ts

用tushare包获取某支股票的历史行情数据

查询茅台酒的股票编码并获取数据

df=ts.get_k_data("600519",start='1988-01-01')

df.to_csv("600519.csv")

df.head(5)

本接口即将停止更新,请尽快使用pro版接口:https://waditu.com/document/2

dateopenclosehighlowvolumecode02001-08-275.3925.5545.9025.132406318.0060051912001-08-285.4675.7595.7815.407129647.7960051922001-08-295.7775.6845.7815.64053252.7560051932001-08-305.6685.7965.8605.62448013.0660051942001-08-315.8045.7825.8775.74923231.48600519

只显示感兴趣的四列(开、收盘价,最高、最低价)

#将date列设置为索引,并把它变为时间对象,最后只显示保留四个特征的矩阵

df=pd.read_csv("600519.csv",index_col="date",parse_dates=["date"])[['open','close','high','low']]

df.head(5)

openclosehighlowdate2001-08-275.3925.5545.9025.1322001-08-285.4675.7595.7815.4072001-08-295.7775.6845.7815.6402001-08-305.6685.7965.8605.6242001-08-315.8045.7825.8775.749

输出该股票所有收盘比开盘上涨大于等于3%及以上的日期

该股票所有收盘比开盘上涨大于等于3%的行

(df["close"]-df["open"])/df["open"] #增长率

df[(df["close"]-df["open"])/df["open"]>=0.03 ].head(5)#将符合算式的行都输出出来

openclosehighlowdate2001-08-275.3925.5545.9025.1322001-08-285.4675.7595.7815.4072001-09-105.5315.7345.7575.4702001-12-215.4215.6045.6205.4212002-01-185.4375.7265.7625.421

该股票所有收盘比开盘上涨大于等于3%的日期

df[(df["close"]-df["open"])/df["open"]>=0.03 ].index #将符合算式的列输出来

datetimeindex(['2001-08-27', '2001-08-28', '2001-09-10', '2001-12-21',

'2002-01-18', '2002-01-31', '2003-01-14', '2003-10-29',

'2004-01-05', '2004-01-14',

...

'2020-07-06', '2020-07-07', '2020-07-13', '2020-12-30',

'2021-01-05', '2021-01-12', '2021-01-25', '2021-02-04',

'2021-02-09', '2021-02-10'],

dtype='datetime64[ns]', name='date', length=322, freq=none)

该股票所有收盘比开盘上涨大于等于10%的行

df[(df["close"]-df["open"])/df["open"]>=0.1 ].head(5)

openclosehighlowdate2004-03-025.4636.0316.0795.4632005-06-0811.38312.55512.63911.383

最后发现只有上涨等于10%的股票,是因为中国的涨幅上限为10%

输出该股票所有开盘比前日收盘跌幅超过2%的日期

所有列错位下移

df.shift(1).head(5) #用shift下移

openclosehighlowdate2001-08-27nannannannan2001-08-285.3925.5545.9025.1322001-08-295.4675.7595.7815.4072001-08-305.7775.6845.7815.6402001-08-315.6685.7965.8605.624

所有列上移

df.shift(-1).head(5) #用shift上移

openclosehighlowdate2001-08-275.4675.7595.7815.4072001-08-285.7775.6845.7815.6402001-08-295.6685.7965.8605.6242001-08-305.8045.7825.8775.7492001-08-315.8125.7795.8705.757

收盘价单列下移

df["close"].shift(1).head(5)

date

2001-08-27 nan

2001-08-28 5.554

2001-08-29 5.759

2001-08-30 5.684

2001-08-31 5.796

name: close, dtype: float64

输出该股票所有开盘比前日收盘跌幅超过2%的行

df[(df["open"]-df["close"].shift(1))/df["close"].shift(1)<=-0.02].head(5)

openclosehighlowdate2001-09-125.5205.6215.6565.5152002-06-265.8245.7575.8435.7122002-12-134.5084.6284.6704.5082004-07-016.3576.7926.8106.3552004-10-299.6589.8999.9869.658

df[(df["open"]-df["close"].shift(1))/df["close"].shift(1)<=-0.02].shape

(85, 4)

输出该股票所有开盘比前日收盘跌幅超过2%的日期

df[(df["open"]-df["close"].shift(1))/df["close"].shift(1)<=-0.02].head(5).index

datetimeindex(['2001-09-12', '2002-06-26', '2002-12-13', '2004-07-01',

'2004-10-29'],

dtype='datetime64[ns]', name='date', freq=none)

策略实现:假如从tushare有记录日期开始,每月第一个交易日买入一手股票,每年最后一个交易日卖出所有股票,到今天为止,我的收益如何?

剔除无用数据(最前最后的月数据不全),并尝试各月汇总

df=df["2001-09":"2017-11"]#剔除所有无用数据

df

df.resample("m").sum().head(5) #重新取样,设置频率为月,将这个月加总

openclosehighlowdate2001-09-30113.752113.933115.265112.7302001-10-3199.74398.974100.66997.7612001-11-30119.185119.028120.324117.9042001-12-31118.281118.624119.923117.1892002-01-31113.996114.204116.206112.190

取出每月月初第一支股票信息

df.resample("ms").last().head(5)

openclosehighlowdate2001-09-015.7655.7955.8125.7022001-10-015.4685.4765.4825.4372001-11-015.4425.5215.5385.4372001-12-015.8856.0236.1405.8522002-01-015.6245.8745.9375.624

df_monthly = df.resample("ms").first() #ms为每月的开始

df_monthly.head(5)

openclosehighlowdate2001-09-015.8125.7795.8705.7572001-10-015.7815.7155.8095.6632001-11-015.4765.5575.5685.4602001-12-015.5235.6515.6675.5212002-01-016.0495.8666.0625.851

resample的用法

print(ts.resample(‘5d’).mean(),‘→ 求平均值\n’)print(ts.resample(‘5d’).max(),‘→ 求最大值\n’)print(ts.resample(‘5d’).min(),‘→ 求最小值\n’)print(ts.resample(‘5d’).median(),‘→ 求中值\n’)print(ts.resample(‘5d’).first(),‘→ 返回第一个值\n’)print(ts.resample(‘5d’).last(),‘→ 返回最后一个值\n’)print(ts.resample(‘5d’).ohlc(),‘→ ohlc重采样\n’)

取出每年的最后一支股票

df.resample('a').last() #年用a表示,虽然date显示的是每年12月31号的值,但实际是表格里有的最后一天的值(如果12.31没有记录就显示当年最后一天的值)

openclosehighlowdate2001-12-315.8856.0236.1405.8522002-12-314.4734.4484.5044.4472003-12-314.9404.9214.9404.8882004-12-319.3259.3109.5799.1682005-12-3114.30914.03914.31613.8172006-12-3153.48254.94657.61752.9002007-12-31139.495144.783144.846137.0852008-12-3168.50268.81869.31868.0582009-12-31107.993108.369108.516107.7182010-12-31117.103118.469118.701116.6202011-12-31138.039138.468139.600136.1052012-12-31155.208152.087156.292150.1442013-12-3193.18896.48097.17992.0612014-12-31157.642161.056161.379157.1322015-12-31207.487207.458208.704207.1062016-12-31317.239324.563325.670317.2392017-12-31626.613622.166639.401617.236

去掉信息不全的17年的最后一支股票

df_yearly = df.resample('a').last()[:-1]#由于17年最后一天还没有,所以切掉倒数第一行

df_yearly

openclosehighlowdate2001-12-315.8856.0236.1405.8522002-12-314.4734.4484.5044.4472003-12-314.9404.9214.9404.8882004-12-319.3259.3109.5799.1682005-12-3114.30914.03914.31613.8172006-12-3153.48254.94657.61752.9002007-12-31139.495144.783144.846137.0852008-12-3168.50268.81869.31868.0582009-12-31107.993108.369108.516107.7182010-12-31117.103118.469118.701116.6202011-12-31138.039138.468139.600136.1052012-12-31155.208152.087156.292150.1442013-12-3193.18896.48097.17992.0612014-12-31157.642161.056161.379157.1322015-12-31207.487207.458208.704207.1062016-12-31317.239324.563325.670317.239

把2001所有的月初股票信息取出来

df_monthly["2001"]

openclosehighlowdate2001-09-015.8125.7795.8705.7572001-10-015.7815.7155.8095.6632001-11-015.4765.5575.5685.4602001-12-015.5235.6515.6675.521

取得最后未卖出股票的价值(获取股票最后一天的开盘价)

price_last=df['open'][-1] #最后一天每卖出股票的开盘价

策略代码(输出每年的收益及最终收益)

cost_money = 0

hold = 0

for year in range(2001,2018):

cost_money = df_monthly[str(year)]['open'].sum()*100 #df_monthly[str(year)]['open'].sum()*100是计算每年花的钱

hold = len(df_monthly[str(year)]['open'])*100 #计算共有多少支股票已入手

if year != 2017: #2017年买的还没卖出去

cost_money -= df_yearly[str(year)]['open'][0]*hold #卖出去的价格

hold=0

print(-cost_money)

cost_money -= hold * price_last

print(-cost_money)

94.80000000000018

-1082.6999999999998

-493.4999999999982

2027.2000000000025

3889.5000000000055

38129.100000000006

110589.8

70515.90000000001

96941.2

116591.6

123173.59999999998

116746.5

78106.39999999998

121609.49999999996

143901.09999999998

212044.10000000003

425573.8

最终收益为42.55738万

取出某行信息:

df_yearly['2001']

openclosehighlowdate2001-12-315.8856.0236.145.852

文章九游会ag官方网站的版权声明:除非注明,否则均为苗坤旺离型膜原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
applausebadlaughcoffeefabulousfacepalmfecesfrownheyhainsidiouskeepfightingnoprobpigheadshockedslapsocialsweattolaughwatermelonwittywowyeahyellowdog
评论列表 (暂无评论,7人围观)

还没有评论,来说两句吧...

微信二维码
微信二维码
支付宝二维码
网站地图