python量化交易策略实例_Python量化实例 – 基于股票的金融数据量化分析
说明:本文只是通过自己的已学知识对
一、分析目的
利用预先设定的策略,通过对股票交易的历史数据进行回测,验证该策略是否能指导股票交易。
二、数据处理
1、数据集描述
数据集简介:此数据集来源于Nasdaq网站,本文获取的是2016/04/15——2019/04/15三年的数据。
列名称理解:
原数据表的字段列名非常规范,无需进行重命名,以下是每个列名称的理解:
date:日期
close:收盘价格
volumn:成交量
open:开盘价格
high:日最高价格
low:日最低价格
本次只是简单针对收盘价格进行了分析。
2、 数据清洗
该数据集比较规范,没有重复值以及它异常值需要处理。
3、数据导入
# 加载库
import numpy as np
import pandas as pd
# 加载数据(本次只用到了日期和收盘价)
df = pd.read_csv('E:/相关文件夹/BABA_stock.csv',index_col = 'date',usecols = [0,1])
df.head()
三、数据分析
# 将索引转化为日期索引
df.index = pd.to_datetime(df.index)
# df.index = pd.DatetimeIndex(df.index.str.strip("'"))
df.index
# 按索引排序
df.sort_index(inplace = True )
df.head()
买卖策略:前一天低于60日平均线第二天高于60日平均线时买入,前一天高于60日平均线第二天低于60日平均线时卖出。
1、计算60日移动平均值
ma60 = df.rolling(60).mean().dropna()
ma60
2、找到值从False变为True时买入,True变为False时卖出
ma60_model = df['close'] - ma60['close'] >0
ma60_model
3、找出买点和卖点
# 自定义方法找出买点和卖点
def get_deal_date(w,is_buy = True):
if is_buy == True:
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
# raw=False没有的话会有警告信息
# 如果删除Na值,会有缺失,所以这里用0填充,转换为bool值方便后面取值
se_buy = ma60_model.rolling(2).apply(get_deal_date,raw = False).fillna(0).astype('bool')
se_buy
# apply的args接受数组或者字典给自定义函数传参
se_sale = ma60_model.rolling(2).apply(get_deal_date,raw = False,args = [False]).fillna(0).astype('bool')
se_sale
# 使用布尔索引找出买点和卖点
buy_info = df[se_buy.values]
sale_info = df[se_sale.values]
buy_info
sale_info
4、计算获利情况(每股交易获利情况)
# 转换为数值索引:需要将索引进行处理后再进行运算
no_index_buy_info = buy_info.reset_index(drop = True)
no_index_sale_info = sale_info.reset_index(drop = True)
print(no_index_buy_info.head())
print(no_index_sale_info.head())
# 获利情况
profit = no_index_sale_info - no_index_buy_info
# 最后一组数据中没有卖出点,可能会出现null值
profit.dropna()
# 计算总体利润情况
profit.describe()
# 总共赚了多少钱
profit.sum()
close 57.66
dtype: float64
从图a可以看出每次的买入和卖出有盈有亏,从图b的整体情况来看,总共交易12次,亏损最多的时候是8.61美元,平均每次获利4.8,最多的一次赚了75.5美元;通过对
所有交易进行汇总分析,得出了获利总额为57.66美元,总体来说是盈利的。
5、1w美元的最终盈利情况
策略:将每次卖出的钱投入到下一次进行买入
all_money = 10000
remain = all_money
# 如果加上每次交易金额的万分之三手续费
fee = 0.0003
# 由于最后一次未出现卖点,所以交易次数需要用买入次数减一
for i in range(len(no_index_buy_info)-1):
buy_count = remain/no_index_buy_info.iloc[i]
remain = buy_count * no_index_sale_info.iloc[i]*(1-fee)
print(remain)
close 12413.412104
Name: 0, dtype: float64
close 22301.278558
dtype: float64
close 22412.294488
dtype: float64
close 22024.926199
dtype: float64
close 21439.23349
dtype: float64
close 20885.390796
dtype: float64
close 20576.028522
dtype: float64
close 19640.163023
dtype: float64
close 19232.001776
dtype: float64
close 18857.206606
dtype: float64
close 18595.722503
dtype: float64
close 18044.391215
dtype: float64
从以上结果可以看出:三年获得的利润为8044.39美元,年化大概26%左右,收益总体来说还是很不错的,该策略可以放到其他周期或者其他股票里进行分析,如果都可以获利,说明该策略在指导股票交易上是有效的。
python量化交易策略实例_Python量化实例 – 基于股票的金融数据量化分析相关推荐
- python股票数据分析_如何使用Python进行股票的金融数据量化分析
Python作为一门高ji语言是很好用的,语法简单,通俗易懂,非chang容易上手,丰富的第三方库支持使得开发速度快,相对于其他编程语言来说,初学者入门并不困难.它只是一门语言工具,zui终还是要将这 ...
- QUANT[2]:量化交易策略基本框架搭建
本文是量化交易教程的第二篇 (原文写的比较简单,编程的详解部分面向没有编程基础的人) QUANT[1]:从零开始量化交易 - プロノCodeSteel - CSDN博客 QUANT[2]:量化交易策略 ...
- python期货交易策略_GitHub - guyimin/tqsdk-python: 期货量化交易策略程序开发包, 实时行情/历史数据/实盘交易...
TqSdk 量化交易策略程序开发包 TqSdk 是一个由信易科技发起并贡献主要代码的开源 python 库. 依托快期多年积累成熟的交易及行情服务器体系, TqSdk 支持用户使用极少的代码量构建各种 ...
- python量化外汇交易_用Python实现一个Dual Thrust数字货币量化交易策略
Dual Thrust交易算法介绍 Dual Thrust交易算法是由Michael Chalek开发的著名量化交易策略.它通常用于期货,外汇和股票市场.Dual Thrust的概念属于典型的突破交易 ...
- python 用while输出数字金字塔_用Python实现一个Dual Thrust数字货币量化交易策略
Dual Thrust交易算法介绍 Dual Thrust交易算法是由Michael Chalek开发的著名量化交易策略.它通常用于期货,外汇和股票市场.Dual Thrust的概念属于典型的突破交易 ...
- 利用Python进行股票交易分析(三):A股量化交易策略的验证及数据分析。
鉴于近期空闲时间比较少,本篇文章采用不定时更新的方式来写,如大家有更好的思路也可以评论区一起讨论.... 目前进度: 2021-07-13 梳理.修改思路 2021-07-14 步骤1代码完成 背景 ...
- 用Python写一个量化交易策略
好的,这是一个关于如何用 Python 写一个量化交易策略的简单示例. 首先,需要准备好所需的数据.这可以通过使用量化交易软件或者第三方数据源来获取.接下来,你可以使用 Python 的 pandas ...
- python实现量化交易策略
1 前言 相信大家都听说过股票,很羡慕那些炒股大佬,觉得量化投资非常高深,本文教大家用python实现简单的量化交易策略.在这强调一下,本文仅供交流学习参考,不构成任何投资建议.炒股有风险,投资需谨慎 ...
- 【量化干货】用python搭建量化交易策略(附零基础学习资料)
前言 技术已成为金融行业中的战略资产.而传统的金融机构现在正在转型成为科技公司,而不仅仅是专注于该领域的金融方面.(文末送读者福利) 数学算法带来了创新和速度,它们可以帮助我们在市场上获得竞争优势.金 ...
最新文章
- 获取局域网打印机列表
- Xamarin XAML语言教程使用Visual Studio创建XAML
- Scala教程之:可扩展的scala
- hdu 5317 RGCDQ (2015多校第三场第2题)素数打表+前缀和相减求后缀(DP)
- Java集合系列:Set解析
- linux下php、apache、mysql、curl环境搭建
- 谐音梗?小米推出首款短视频应用“朕惊视频”:专为年轻人打造
- Python:Python全球生态主站,pip安装方法、集成安装方法、文件安装方法、第三方库自动安装脚本
- [POJ3177]Redundant Paths
- Android开发经典书籍下载——《Android 4高级编程》《疯狂Android讲义》《Android应用开发详解(郭宏志)》《Android应用案例开发大全》《Android 3D游戏开发技术》
- Redis内存数据库必读的4本书
- Python批量下载中国大学MOOC课件
- Word文档单页页眉横线如何去除
- 项目管理 - 常用英语词汇一
- hdu 3689 Infinite monkey theorem
- Ameya详解:村田的用于人机界面和生命体征检测的压电薄膜传感器
- MaskRCNN使用tf-gpu环境搭建实战
- 1660_MIT 6.828 JOS初始化boot_alloc的初步实现
- 出行助手Vue项目中高德API的使用
- Git push的常见用法
热门文章
- C#LeetCode刷题之#167-两数之和 II - 输入有序数组(Two Sum II - Input array is sorted)
- 敏捷开发 看板_什么是看板? 定义的敏捷方法论,以及如何将其用于您的软件开发团队
- java 调试_我最喜欢的Java调试技术
- elixir开发的项目_我对Elixir的介绍:学习另一种编程语言如何使您成为更好的开发人员...
- javascript入门_您需要一个JavaScript入门工具包
- fortran 读整行_我整周读过的最有趣的东西
- kafka是什么_Kafka的Controller Broker是什么
- go interface转int_go语言学习总结(三十三)Go泛型编程
- Python数据可视化之Excel气泡图
- LeetCode题 - 13 罗马数字转整数