学习python量化分析

python量化分析数据导入01

这是个人第一次在CSDN上发BLOG,主要想记录自己学习量化的过程,并督促自己能坚持下来。

本节是使用backtrader回测的数据如何导入,主要内容为:

  • 本地数据csv导入
  • tushare数据导入
  • pd.DataFrame数据导入注意事项

知识点补短板:
1、from future import print_function。是什么意思?
python2.X - python3.X新旧版本的兼容性方面存在差异,处理方法是按照最新的特性来处理。将future可以看成Python的一个专门存放新特性的模块。
from future import print_function。其实这句函数之后,即使在低版本的python2.X,当使用print函数时,须python3.X那样加括号使用。tips:python2.X中print不需要括号,而在python3.X中则需要。
对于所有的from future import _,则意味着在新旧版本的兼容性方面存在差异,处理方法是按照最新的特性来处理。可以将future看成Python的一个专门存放新特性的模块。除了print_function,还有absolute_import,division,unicode_literals。
主要目的还是实现代码引用时,在低版本上能够使用新版上的功能
2、os.path.realpath(file) 获取当前目录及文件名称
os.path.dirname() 获取上级目录(即当前文件所在文件夹名)
os.path.join (当前目录, 加入目录)添加目录
print(os.path.realpath(file)) #获取当前文件路径
print(os.path.dirname(os.path.realpath(file))) # 获取当前文件上级目录
os.path.dirname(os.path.dirname(os.path.realpath(file))) # 获取当前文件上上级目录


# 目录打印的结果是  C:/study/project
project_path = os.path.dirname(os.path.dirname(__file__))
# 拼接后的路径是:C:/study/project\datas
data_path = os.path.join(project_path,'datas')
#--------------------------------------
# 如果想让项目目录变为\形式,使用adspath (注:在python下是没有必要这样处理的,现在仅提供了一种改为\形式的方法而已)
project_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 这个时候的路径是:C:\study\project\datas
data_path = os.path.join(project_path,'datas')
 

CSV数据导入路径为:
方法1

# 先找到脚本文件的位置
modepath = os.path.dirname(__file__)
# 然后根据脚本与数据的相对关系找到数据位置,这样脚本从任意地方被调用,都可以正确地访问到数据
datapath = modepath+'/data/000998.SZ.csv'

注:python 脚本文件在C:/Users/PycharmProjects/pythonProject 文件夹中

C:/Users/PycharmProjects/pythonProject
C:/Users/PycharmProjects/pythonProject/data/000998.SZ.csv

方法2

# 先找到脚本文件的位置
modepath = os.path.dirname(__file__)
# 然后根据脚本与数据的相对关系找到数据位置,这样脚本从任意地方被调用,都可以正确地访问到数据
# datapath = modepath+'/data/000998.SZ.csv'
datapath = os.path.join(modepath, './data/000998.SZ.csv')   # ./ 代表当前所在的目录

C:/Users/PycharmProjects/pythonProject
C:/Users/PycharmProjects/pythonProject./data/000998.SZ.csv

方法3

# 先找到脚本文件的位置
modepath = os.path.dirname(__file__)
# 然后根据脚本与数据的相对关系找到数据位置,这样脚本从任意地方被调用,都可以正确地访问到数据
# datapath = modepath+'/data/000998.SZ.csv'
# datapath = os.path.join(modepath, './data/000998.SZ.csv')  
datapath = os.path.join(modepath, 'data/000998.SZ.csv')   

C:/Users/PycharmProjects/pythonProject
C:/Users/PycharmProjects/pythonProject\data/000998.SZ.csv

以上3种方案的数据 GenericCSVData均可以导入

import backtrader as bt    # 引入backtrader 框架
import datetime
import pandas as pd
import numpy as np
import os                 # 用于路径管理 数据导入时使用

# 创建策略
class TestStrategy(bt.Strategy):
    def log(self, txt, dt=None):
        """日志函数"""
        dt = dt or self.datas[0].datetime.date(0)
        print('%s, %s' % (dt.isoformat(), txt))

    def __init__(self):
        self.dataclose = self.datas[0].close

    def next(self):
        self.log('Close,%.2f' % self.dataclose[0])


# 创建cerebro实例
cerebro = bt.Cerebro()
# 添加策略
cerebro.addstrategy(TestStrategy)
# 先找到脚本文件的位置
modepath = os.path.dirname(__file__)
# 然后根据脚本与数据的相对关系找到数据位置,这样脚本从任意地方被调用,都可以正确地访问到数据
# datapath = modepath+'/data/000998.SZ.csv'
# datapath = os.path.join(modepath, './data/000998.SZ.csv')
datapath = os.path.join(modepath, 'data/000998.SZ.csv')

# data feeds 创建
data = bt.feeds.GenericCSVData(
        dataname=datapath,
        fromdate=datetime.datetime(2020, 8, 13),
        todate=datetime.datetime(2021, 8, 13),
        nullvalue=0.0,
        dtformat='%Y-%m-%d',       # 自动把index数据中的符合日期的格式变成datetime类型
        datetime=0,
        open=2,
        high=3,
        low=4,
        close=5,
        volume=9,
        openinterest=-1
)

# dataframe = pd.read_csv('dfqc.csv', index_col=0, parse_dates=True)
# dataframe['openinterest'] = 0
# data = bt.feeds.PandasData(dataname=dataframe,
#                            fromdate=datetime.datetime(2015, 1, 1),
#                            todate=datetime.datetime(2016, 12, 31)
#                            )
# 在cerebro中添加价格数据
cerebro.adddata(data)
# 设置启动资金
cerebro.broker.setcash(100000.0)
# 打印开始资金
print('Starting Portfolio Value:%.2f' % cerebro.broker.getvalue())
# 遍历所有数据
cerebro.run()
# 打印最后结果
print('Final Portfolio Value:%.2f' % cerebro.broker.getvalue())

2021-08-06, Close,23.35
2021-08-09, Close,23.14
2021-08-10, Close,23.35
2021-08-11, Close,22.93
2021-08-12, Close,22.97
Final Portfolio Value:100000.00

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值