使用Pandas进行股票买卖策略评估分析

使用Pandas库 进行简单的股票买卖策略评估

主要目标:以股价超出十日均线买入,跌破十日均线卖出为策略,计算股票买卖点、股票收益率(固定股数/固定资金)。
用到的重要函数:rolling函数
使用工具:jupyter notebook,新建一个python3项目

原始数据:
在这里插入图片描述
(数据来源:使用python爬虫获取纳斯达克(NASDAQ)网站亚马逊股票历史数据,url: https://www.nasdaq.com/market-activity/stocks/amzn/historical)

  • 数据清洗
    数据导入和格式转换
import numpy as np
import pandas as pd
#数据导入
 df = pd.read_csv('AMZN_STOCK.csv',index_col='DATE',usecols=[0,1])
 #原时间字符串格式为月/日/年,转换为年/月/日
 df.index = [str(x.split('/')[2])+'/'+str(x.split('/')[0])+'/'+str(x.split('/')[1]) for x in df.index]
 #将时间字符串转为时间格式
 stock_info.index = pd.DatetimeIndex(stock_info.index)
 #按时间序列排序
 stock_info.sort_index(inplace=True)

在这里插入图片描述

  • 数据规整
    计算十日均线
#计算十日均线
#使用滑动窗口rolling,指定数量分组,计算移动平均
man10 = stock_info.rolling(10).mean().dropna()
#以收盘价大于十日均价为模型
ma10_model = stock_info['CLOSE'] - ma10['CLOSE'] > 0
#自定义聚合函数,查看股票买卖点,股价超出十日均线买入,跌破十日均线卖出
def get_deal_date(w, is_buy = True):
   if is_buy :
       return True if w[0] == False and w[1] == True else False
   else:
       return True if w[0] == True and w[1] == False else False
se_buy = ma10_model.rolling(2).apply(get_deal_date,raw = False).fillna(0).astype('bool')
#se_buy中 True是买点
buy_info = stock_info[se_buy.values]
se_sale = ma10_model.rolling(2).apply(get_deal_date,raw=False,args=[False]).fillna(0).astype('bool')
#se_sale中 True是卖点
sale_info = stock_info[se_sale.values]

在这里插入图片描述
根据策略计算
1、购买固定股数每股收益率;

#查看数据,看看是否所有买点都在卖点前面,如果不是,可以适当删掉或者调整数据,使他们对应
#此时得到的数据买卖点索引日期不一样,要想计算差值,需要删掉索引,重新定义
info_buy = buy_info.reset_index(drop =  True)
info_sale = sale_info.reset_index(drop = True)
#用卖点减去对应买点计算每股收益
profit = info_sale - info_buy
final_profit = profit.sum()
#查看需要投入多少钱
capital = stock_info.max()
#计算每次买一股的每股收益率
return_profit = final_profit/capital

在这里插入图片描述
2、投入固定资金的股票年化收益

#计算投入一定资金的收益率,这里假设投入一万美元
all_capital = 10000
remain = 10000
for i in range(len(info_buy)):
    buy_count = remain / info_buy.iloc[i]
    remain = sale_info.iloc[i] * buy_count
    print(remain)
#最后可以看出拿一定的钱取交易比买一定的交易收益要更高 

在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值