数据:16-19年的股价,按照目标策略进行回溯,看是否赚钱

1、读取数据,简单观察和处理数据

部分数据源如下

#########################################################
#阿里巴巴股票分析。目标回溯按照10日均线买卖股票是否盈利
#########################################################
import numpy as np
import pandas as pd
#读取csv数据
alibaba=pd.read_csv('E:/cai-data/BABA_stock.csv',index_col='date')
#usecols代表加载哪些列
#alibaba=pd.read_csv('E:/cai-data/BABA_stock.csv',index_col='date',usecols=[0,1])
print(alibaba.head())
print(alibaba.info())
#数据索引降序排列,最近的日期排在前
alibaba.sort_index(inplace=True)
#print(alibaba.index)
#看到日期索引的格式,为对象,想要转换为datetime类型
#并且使用strip方法将引号去掉。需要先转为str
alibaba.index=pd.DatetimeIndex(alibaba.index.str.strip("'"))
alibaba.index
print(alibaba.head())

<class ‘pandas.core.frame.DataFrame’>
Index: 755 entries, ‘2019/04/15’ to ‘2016/04/15’
Data columns (total 5 columns):
close 755 non-null float64
volume 755 non-null float64
open 755 non-null float64
high 755 non-null float64
low 755 non-null float64
dtypes: float64(5)
memory usage: 35.4+ KB
None
以上alibaba.info()-------------------------------
close volume open high low
date
‘2016/04/15’ 78.97 11696030.0 79.45 79.750 78.46
‘2016/04/18’ 79.01 7761672.0 78.52 79.120 77.71
‘2016/04/19’ 79.46 14727460.0 79.20 80.480 78.47
‘2016/04/20’ 81.21 14900920.0 79.00 81.735 78.99
‘2016/04/21’ 80.78 8812676.0 81.08 81.780 80.20
以上alibaba.head()-------------------------------

2、找出根据策略得出的买点和卖点

#策略1:股价超出10日均线买入,跌破10日均线卖出
#通过rolling计算10日均线,即当天收盘价与前九天收盘价均值
sale10=alibaba.rolling(10).mean().dropna()
print(sale10.head())
print('-------------------------------')
#判断当天收盘价是否大于10日均线,大于为True,小于10日均线为FALSE
deal=alibaba['close']-sale10['close'] > 0
print(deal.head())#自定义函数判断True和false转换的点即为买卖点
def get_deal_date(w,is_buy=True):#自定义函数默认值is_buy=Ture,结果为True代表买入点if is_buy == True:return True if w[0] == False and w[1]== True else False#is_buy=False代表卖出,结果为True代表卖出点else:return True if w[0] == True and w[1] == False else False
#通过rolling判断FALSE和TRUE 的拐点,有拐点代表操作
#自定义函数的时候,对接apply函数时,若除了其本身,还有其他参数,会有告警,此时需要在apply函数中加raw=False,可消除警告信息
#deal.point=deal.rolling(2).apply(get_deal_date,raw=False)
#为方便后续计算,将rolling第一个NAN值填充为0.并将结果转换为布尔值
#先计算买入点
buydealpoint=deal.rolling(2).apply(get_deal_date,raw=False).fillna(0).astype('bool')
print(buydealpoint.head())
print('-------------------------------')
#再计算卖出点
saledealpoint=deal.rolling(2).apply(get_deal_date, raw=False, args=[False]).fillna(0).astype('bool')
#按下面方法,会报错TypeError: apply() got an unexpected keyword argument 'is_buy',
#有没有小伙伴知道为什么报错?????????????????????
#saledealpoint=deal.rolling(2).apply(get_deal_date, raw=False, is_buy=[False]).fillna(0).astype('bool')
print(saledealpoint.head())

10日均线结果-------------------------------
close
date
‘2016/04/28’ 79.082
‘2016/04/29’ 78.879
‘2016/05/02’ 78.639
‘2016/05/03’ 78.284
‘2016/05/04’ 77.745
判断每天收盘价是否大于10日线结果-------------------------------
date
‘2016/04/15’ False
‘2016/04/18’ False
‘2016/04/19’ False
‘2016/04/20’ False
‘2016/04/21’ False
Name: close, dtype: bool
以下是买点-------------------------------
date
‘2016/04/15’ False
‘2016/04/18’ False
‘2016/04/19’ False
‘2016/04/20’ False
‘2016/04/21’ False
Name: close, dtype: bool
以下是卖点-------------------------------
date
‘2016/04/15’ False
‘2016/04/18’ False
‘2016/04/19’ False
‘2016/04/20’ False
‘2016/04/21’ False
Name: close, dtype: bool

3、获取买卖点收盘价,计算回溯利润

#获取买点和卖点的收盘价
buyinfo=alibaba[buydealpoint.values]
print('buyinfo------------------------------------')
print(buyinfo.head())
print('saleinfo------------------------------------')
saleinfo=alibaba[saledealpoint.values]
print(saleinfo.head())
print('以下是删除日期索引的买数据head-------------')
#计算卖出-买入差值即盈利
#由于日期索引不同,直接计算默认会按照对应日期的数据计算,故删除日期索引列
no_index_date_buyinfo=buyinfo.reset_index(drop=True)
print(no_index_date_buyinfo.head())
no_index_date_saleinfo=saleinfo.reset_index(drop=True)
print('以下是删除日期索引的卖数据head-------------')
print(no_index_date_saleinfo.head())
#计算盈利
print('以下是盈利数据--------------')
profit=no_index_date_saleinfo - no_index_date_buyinfo
print(profit.head())
print(profit.describe())
print('本金1,最后的盈利--------------')
print(profit.sum())

buyinfo------------------------------------
close
date
‘2016/05/05’ 78.83
‘2016/05/16’ 79.29
‘2016/05/23’ 79.00
‘2016/05/27’ 80.97
‘2016/06/14’ 77.77
saleinfo------------------------------------
close
date
‘2016/05/13’ 77.16
‘2016/05/18’ 79.03
‘2016/05/25’ 75.59
‘2016/06/01’ 76.69
‘2016/06/17’ 77.00
以下是删除日期索引的买数据head-------------
close
0 78.83
1 79.29
2 79.00
3 80.97
4 77.77
以下是删除日期索引的卖数据head-------------
close
0 77.16
1 79.03
2 75.59
3 76.69
4 77.00
以下是盈利数据--------------
close
0 -1.67
1 -0.26
2 -3.41
3 -4.28
4 -0.77
close
count 63.000000
mean 0.572540
std 6.419356
min -9.190000
25% -3.380000
50% -1.120000
75% 3.435000
max 17.840000
本金1,最后的盈利--------------
close 36.07
dtype: float64

4、计算投入若10000本金,按照策略执行,最后还剩多少钱

print('以下计算本金10000,63次交易后还剩多少钱--------------')
money=10000
remain_money=money
for i in range (len(no_index_date_buyinfo)):#buy_count,买入时本金可买的股数buy_count=remain_money/no_index_date_buyinfo.iloc[i]#卖出时把上次买入的都卖掉的钱remain_money = buy_count * no_index_date_saleinfo.iloc[i]
#63次操作后剩的钱
print(remain_money)

以下计算本金10000,63次交易后还剩多少钱--------------
close 13799.294014
dtype: float64

Pandas小小项目2-----根据10日均线策略买卖股票的股票回溯分析相关推荐

  1. 10日均线--操盘线

    一.10日均线的要义 1.10日均线是短期均线,是短线的生命线,是波段操作的重要参考指标. 2.在上升趋势中,10日均线是有力的支撑线. 3.在下跌行情中,10日均线是重要的阻力线. 4.股价在高位跌 ...

  2. 使用Python对股票数据进行数据分析(一)-计算日线行情、5日均线、10日均线行情并显示

    使用Python对股票数据进行数据分析(一)-计算日线行情.5日均线.10日均线行情并显示 各种炒股软件上可以显示各种技术指标,可以帮助投资者进行技术分析.这些股市中的这些指标都是怎么计算出来的呢?这 ...

  3. 使用Python对股票数据进行数据分析(二)-使用ta-lib库获取日线行情、5日均线、10日均线行情并显示

    使用Python对股票数据进行数据分析(二)-使用ta-lib库获取日线行情.5日均线.10日均线行情并显示 这个文章其实和我的上一篇文章,https://blog.csdn.net/lost0910 ...

  4. 需要python代码实现均线选股策略:1. 导入本地股票。2.小于10日均线大于5日均线。3.剔除st;30;68开头股票...

    好的,我可以给你一些python代码,帮助你实现均线选股策略:# 导入本地股票数据 import pandas as pd data = pd.read_csv('stock_data.csv')# ...

  5. R语言计算时间序列数据的移动平均值(滚动平均值、例如5日均线、10日均线等):使用zoo包中的rollmean函数计算k个周期移动平均值

    R语言计算时间序列数据的移动平均值(滚动平均值.例如5日均线.10日均线等):使用zoo包中的rollmean函数计算k个周期移动平均值 目录

  6. 股票中5日均线连续金叉10日均线选股法

    5日均线和10日均线相交叉常常成为我们选股和判断一只股票上涨的依据,但是在实际的应用中,大 家发现往往不是很准确,经常通过该依据买入就被套住,然后刚刚一卖出,就上涨,其实5日均线金叉10 日均线需要其 ...

  7. 宝尚综述-沪指回档10日均线,渔业水产品逆市领涨

    沪指早盘高开低走,盘中遭到恒生指数大跌,一路震动回落,截止午盘,仍然稳守10日均线.五大指数看,均小幅飘绿,其间上证50指数跌1%,中小板指数仅跌0.08%,显现当下小盘股走势强于大盘股.下午的看盘关 ...

  8. 十日均线算法oracle,10日均线法的详解

    @@@.各位..注意该股必需是多头排列.....最好是多头市场.........这样正确率才高..收盘价在十天平均线上才可以考虑买入股票.股价跌破十天平均线时,必须卖出股票.有的人一定会觉得这太简单. ...

  9. 选股:10日均线大于30日均线大于60日均线,而且股价小于30元;怎么编写

    选股:10日均线大于30日均线大于60日均线,而且股价小于30元:怎么编写 参考: MA10:MA(C,10); MA30:MA(C,30); MA60:MA(C,60); MA10>MA30& ...

  10. 均线颜色怎么区分_均线,怎么看哪根是,5,10,60,日均线,分别用什么颜色代表,...

    展开全部 5日线为黄色,10日线为粉色,60日线为灰色.至于分析,主要就是参考这条均线的62616964757a686964616fe4b893e5b19e31333433643636方向,是向上还是 ...

最新文章

  1. python conn_python中conn是什么
  2. 加工费采购订单批准后禁止更改订单数量
  3. 语句include和require的区别是什么?
  4. HDU 2643 Rank:第二类Stirling数
  5. java程序如何执行jar包_java程序如何打包成可执行jar包?
  6. Cocos2d-x-lua游戏两个场景互相切换MainScene01切换到MainScene02
  7. 软件构架师之路[转帖]
  8. 用inno 打包程序 学习之路(转载)
  9. 【弃】Selenium官方文档中文版
  10. LimeSDR官方系列教程(六):使用Pothos和GNU Radio接收ASK/OOK信号
  11. 好友返利网站开发 二
  12. bootstrap4-Collapse 折叠 酷炫特效
  13. java 并g1_JVM G1详解
  14. 【xubuntu-22.04】精简模式,给intel 盒子安装系统,使用稳定,内存cpu占用低,比之前的版本更加稳定,可以做个服务器使用,也可以上网,功耗低
  15. PS实用方法(抠出完整的头发丝)
  16. Android简易Flash播放器
  17. 缺少编解码器,错误代码0xc00d5212 WIN10中AVI格式文件无法播放
  18. 实战Vue:基于Vue的移动端购物商城
  19. 【计算机网络】第一章:计算机网络概述
  20. 第十二章:使用C语言(Python语言)操作Sqlserver2019数据库

热门文章

  1. 数字孪生,开启3D智慧园区管理新篇章
  2. ehcache使用java_Java分布式缓存框架Ehcache 使用(一)
  3. 分布式机器学习:算法、理论与实践
  4. 用Python玩人脸合成,你也能有一张明星脸(附代码)
  5. 串口调试助手fx2n_安信可串口调试助手
  6. 认知差距决定我们的人生差距?!
  7. 简述sqlite数据库的特点_sqlite数据库特点
  8. 华创e路航固件_华创e路航地图官方版
  9. Mybatis的pooled连接池工作原理
  10. VelocityTracker 使用