写在前面: 本文不是在量化平台上做策略回测的coding,仅以2016-04-15~2019-04-15期间阿里巴巴(BABA)的收盘价模拟均线策略,从而基于数据得出某些观点。平台:python3

1、单均线策略

单均线策略:上个交易日股价超出10日均线,则今日买入,跌破则卖出

1. 获取股票收盘价

加载数据,把date这一列设置为索引,简单起见,只用收盘价进行分析。
「Tips」
a. 参数index_col可以在读取数据时指定index
b. pd.Series.str.strip()可以去除series数据的指定符号,具体查看文档
c. pd.DatetimeIndex()可设置某列为时间戳的index
d. sort_index()按照index排序

import numpy as np
import pandas as pd
df = pd.read_csv('./BABA_stock.csv', index_col = 'date', usecols = [0,1])
# 先查看数据
df.head()
# 将索引转换成datetime格式,并去除引号。时间戳的索引可以保证,数据运算时,是对应当天的值计算
df.index = pd.DatetimeIndex(df.index.str.strip("'"))
# 按照日期,升序排列
df.sort_index(inplace = True)
print(df.head())
df.describe()

「数据」

「描述性统计」

从数据的描述性统计来看,在这段期间,BABA每股收盘价的最低价是$74.23,最高价是$219.86,平均价为$143.37。这就是买一股的成本。

2. 计算10日均线数据

「Tips」
df.rolling(10)滚动窗口取10条数据

ma10 = df.rolling(10).mean()
ma10_model = df['close'] - ma10['close'] >0

ma10是每个交易日对应的10日均价,ma10_model的结果是每一个交易日的布尔值。如果当天的收盘价高于10日均线价格,赋值True,反之False,也就是说,当ma10_model由False变为True,第二天就是买入点;由True变为False,第二天就是卖出点。我们看一下ma10_model的前25条数据:

3. 判断买点和卖点

「Tips」
a. get_deal_date()是自定义函数,参数w是连续3个交易日的bool值,参数is_buy是得到买点OR卖点,该函数用来得到本策略的交易日。
b. apply()有一个参数args,用来传参。
c. reset_index(drop = True)是drop当前的index,恢复默认index。

# 第一个值False,第二个值是True,在True的时候买入,需要自定义一个移动窗口处理函数
# 因为卖的时候还需要定义类似的函数,所以这里把这两个函数放在一起
# 可以在自定义函数中print一些信息,例如w值,以方便调试---这也是调试的一种方式
# 注意:1.如果第一个卖点在第一个买点之前,则需要删除第一个卖点的数据,因为中国股市不能做空
# 2.看买点和卖点个数是否一样多,考虑一种情况,买了之后卖点到现在还没有出现,也就是卖点比买点少一个,
# 这种情况我们把当前的股价加到卖点数据中(也可以把最后一个买点数据删除)
def get_deal_date(w, is_buy = True):if is_buy == True:return True if w[0] == False and w[1] == True else Falseelse:return True if w[0] == True and w[1] == False else Falsedate_buy = ma10_model.rolling(3).apply(get_deal_date, raw = False).fillna(0).astype('bool')
date_sell = ma10_model.rolling(3).apply(get_deal_date, raw = False, args=[False]).fillna(0).astype('bool')
# 具体的买卖点
buy_info = df[date_buy.values]
sell_info = df[date_sell.values]
# 买和卖的索引值不同,所以删除时间索引信息.
# 买的数据比卖多一条,所以删除买点的最后一条数据
no_index_buy_info = buy_info.reset_index(drop = True)
no_index_sell_info = sell_info.reset_index(drop = True)
# 每次交易的盈利情况
profit = no_index_sell_info - no_index_buy_info
profit.columns = ['profit']
print(profit.describe())
profit.sum()

「结果」
在不考虑佣金、总金额、每次只买1股的情况下,根据单均线策略,一共交易62个回合,平均每次赚$0.09,总计$5.77。
注意这是每次买和卖一股的利润(买固定的股数),三年的时间交易了62次,最多投入210.86,平均投入143.366954,按最高投入算利润率(5.77 / 210.860000),年化收益率约为0.90%,按平均投入来算,年化收益率约为1.32%。这个回报率是非常低的,甚至赶不上通货膨胀,因此我们接下来计算给定一定本金情况下的回报率。

4. 计算盈利

之前的假设是每次只买1股,显然不符合逻辑。现在我们假设,有1w美元,每次看多都all-in,万3手续费,最终盈利多少?

def get_profit(buy_info, sell_info,all_money=10000, fee=0.0003):remian = all_moneyfor i in range(len(buy_info)):n = all_money // buy_info.iloc[i]remain = all_money - n * buy_info.iloc[i]all_money = sell_info.iloc[i] * n * (1-fee) + remainprint('total money:{}'.format(all_money.values))get_profit(buy_info=no_index_buy_info, sell_info=no_index_sell_info)
# 最后获利 1176.443819
# total money:[11176.443819]

根据结果,初始资金1w美金,3年共买卖62次,累计获利$1176.4438,年化收益率为3.78%

2、双均线策略

双均线策略:上个交易日10日均线上穿20日均线则买入,下穿则卖出

1. 计算20日均线数据

ma20 = df.rolling(20).mean()
ma20_model = ma20['close'] - ma10['close'] >0

2. 判断买点卖点

date_buy_2 = ma20_model.rolling(3).apply(get_deal_date, raw = False).fillna(0).astype('bool')
date_sell_2 = ma20_model.rolling(3).apply(get_deal_date, raw = False, args=[False]).fillna(0).astype('bool')
# 具体的买卖点
buy_info_2 = df[date_buy_2.values]
sell_info_2 = df[date_sell_2.values]
# 买和卖的索引值不同,所以删除时间索引信息
no_index_buy_info_2 = buy_info_2.reset_index(drop = True)
no_index_sell_info_2 = sell_info_2.reset_index(drop = True)
# 每次交易的盈利情况
profit_2 = no_index_sell_info_2 - no_index_buy_info_2
profit_2.columns = ['profit']
print(profit_2.describe())
profit_2.sum()

「结果」
在不考虑佣金、总金额、每次只买1股的情况下,根据双均线策略,一共交易15个回合,平均每次赚$3.92,总计$58.88。
注意这是每次买和卖一股的利润(买固定的股数),三年的时间交易了15次,最多投入210.86,平均投入143.366954,按最高投入算利润率(58.88 / 210.860000),年化收益率约为8.55%,按平均投入来算,年化收益率约为12.15%。收益率结果比单均线策略高,下面计算给定一定本金情况下的回报率。

3. 计算盈利

跟前面单均线策略同样的假设:有1w美元,每次看多都all-in,万3手续费,最终盈利多少?

直接调用前面的函数即可,参数换成策略二的。

get_profit(buy_info=no_index_buy_info_2, sell_info=no_index_sell_info_2)

「结果」
根据结果,初始资金1w美金,3年共买卖15次,累计获利$3703.061336,年化收益率为11.07%。很明显,比单均线策略的收益要高~

总结

策略 固定股数年化收益率 固定金额年化收益率
单均线策略 1.32% 3.78%
双均线策略 12.15% 11.07%

仅从收益率的角度来看(不考虑最大回撤),双均线策略更优——上个交易日10日均线上穿20日均线,则本交易日买入,下穿则卖出。

数据分析案例2:股票均线策略(双均线策略收益率12.15%)相关推荐

  1. Python量化交易策略--双均线策略及代码

    双均线策略是比较经典的策略,股票的价格均线是投资参考的重要指标.均线有快线和慢线之分,当快线向上穿过慢线则是金叉,一般执行买入操作,当快线向下穿过慢线时则形成死叉,一般执行卖出操作.基于这个基本思路, ...

  2. 双均线matlab操作,自动交易策略双均线模型测试

    双均线模型是个非常有名的策略,其做法是短均线突破长均线做多,短跌破长做空,手里始终有仓位. 一般用在期货上,鼎鼎有名的寻我的初级课程内容就是双均线系统. 本次测试采用30分线,美国股指期货2年的5秒粒 ...

  3. python tushare backtrader股票回测双均线策略

    前言: 在前面学了点机器学习知识后,发现自己还没有一个回测框架,找了短时间学习资料,还是决定使用backtrader,至于聚宽优米那些平台感觉使用起来好像没那么自由,还是先学习下backtrader, ...

  4. 用Python写一个简单的双均线策略分析

    用Python写一个简单的双均线策略 双均线策略 先罗列一下我知道的量化策略: 双均线:一句话来讲就是金叉买死叉卖. 布林带:突破压力线(上轨)清仓,跌破支撑线(下轨)持仓. PEG:根据PE/G调整 ...

  5. Lyndon的量化修炼之路——双均线优化策略(一)

    //期市妖风大,小心被刮飞.本文不构成任何实质性建议,也不对任何依此进行的交易结果负责 打开各大量化软件,第一个范例估计就是双均线模型,所以也勉强算个新手村村长,那他开刀吧. 双均线策略是趋势交易策略 ...

  6. Python量化交易实战-38使用开源项目回测双均线策略

    B站配套视频教程观看 使用PyAlgoTrade回测双均线策略 双均线策略:长短周期均线,通过金叉,死叉的方式买入卖出股票,获取收益的策略. 回顾上节课代码的部分,上节课完成了可视化代码的部分, 主要 ...

  7. Python数据分析之股票双均线策略制定

    Python数据分析之股票双均线策略制定 需求:双均线策略制定 库 tushare包 预处理数据 df = pd.read_csv('./maotai.csv').drop(labels='Unnam ...

  8. 数据分析——股票双均线策略分析

    在数据分析中,对于股票双均线策略分析是其中一个应用,这对于短期投资来说是非常有用的(虽然咱们不推荐). 什么是均线? 对于每一个交易日,都可以计算出前N天的移动平均值,然后把这些移动平均值连起来,成为 ...

  9. 数据分析项目(python):股票数据导入、计算上涨、计算下跌、收益计算、双均线策略

    1.股票数据导入_代码示例 import pandas as pd import numpy as np import tushare as ts # 财经数据接口包#获取某只股票的历史行情 #cod ...

  10. 利用双均线策略计算中国平安股票收益

    一.知识储备 Hello,各位小伙伴们,本篇博文给大家带来的是利用双均线策略,对中国平安601318股票进行炒股,所能获得的大概收益.为了你能正确理解本文的知识,需要你提前做以下准备... pytho ...

最新文章

  1. Hibernate智能化分页
  2. 操作系统原理第十章:文件系统
  3. 《基于张量网络的机器学习入门》学习笔记1
  4. [C#] 连接数据库并验证用户名和密码
  5. Oracle 原理:高水位线、PCTFREE、PCTUSED、索引组织表、簇表、临时表
  6. 【时光之穿越一千年】python全文字频解析【jieba】【matplotlib构图】案例
  7. 笨笨图片批量下载器 V0.3 beta[C# | WinForm | 正则表达式 | HttpWebRequest | Async异步编程] new...
  8. 贝叶斯机器学习:经典模型与代码实现
  9. JAVA基础——异常详解
  10. python高级编程教程_python高级编程——入门语法(一)
  11. python爬取西刺网代理IP地址
  12. 免费字体下载预览,这几款字体非常冷艳动人。
  13. 服务器端jQuery – phpQuery简要
  14. 前端人脸识别--两张脸相似度
  15. 3dmax打开错误html,Windows安装3dmax软件失败提示错误三种解决办法
  16. 9.0系统XPOSED框架安装经验
  17. 计算机硬件更新快,频繁更新电脑硬件驱动程序到底好不好?真相在此
  18. 电脑视频剪辑用哪个软件,好用的电脑视频剪辑软件有哪些
  19. C语言中3种实用的输出格式:%md,%0md,%.mf
  20. 阿里云服务器1Mbps带宽到底能够达到什么效果

热门文章

  1. 【No buffer space available】异常解决
  2. 良心推荐:12个免费学习网站,赶紧收藏
  3. 网络不可用怎么办?无法访问互联网怎么办?网络故障原因大起底
  4. 沉默内向的计算机保研er在保研面试中会吃亏吗?
  5. 黄金分割法与Fibonacci法
  6. sloth(标点工具)使用说明
  7. Windows的计划任务
  8. c语言单片机的电子琴课程设计,基于单片机的电子琴的设计
  9. macbook linux 双系统,mac上安装ubuntu双系统教程
  10. arcgis实现cad图斑批量导入后,图斑颜色设置cad图层颜色保持一致