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))) # 获取当前文件上上级目录
project_path = os.path.dirname(os.path.dirname(__file__))
data_path = os.path.join(project_path,'datas')
project_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
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 = 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 = 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
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 = bt.Cerebro()
cerebro.addstrategy(TestStrategy)
modepath = os.path.dirname(__file__)
datapath = os.path.join(modepath, 'data/000998.SZ.csv')
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',
datetime=0,
open=2,
high=3,
low=4,
close=5,
volume=9,
openinterest=-1
)
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
|