量化回测,能读数据,不能读出来收盘价
# -*- coding: utf-8 -*-
import backtrader as bt
import pandas as pd
from datetime import datetime
# Create a Stratey
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):
# 引用到输入数据的close价格
self.dataclose = self.datas[0].close
def next(self):
# 目前的策略就是简单显示下收盘价。
self.log('Close, %.2f' % self.dataclose[0])
if __name__ == '__main__':
cerebro = bt.Cerebro()
# 增加一个策略
cerebro.addstrategy(TestStrategy)
# 获取数据
stock_hfq_df = pd.read_csv("C:/Users/18368/Desktop/新建文件夹 (2)/苹果.csv", index_col=0, parse_dates=True)
start_date = datetime.strptime('2009/10/30', '%Y/%m/%d') # 回测开始时间
end_date = datetime.strptime('2016/10/30', '%Y/%m/%d') # 回测结束时间
data = bt.feeds.PandasData(dataname=stock_hfq_df, fromdate=start_date, todate=end_date) # 加载数
# print(stock_hfq_df)
cerebro.adddata(data) # 将数据传入回测系统
cerebro.broker.setcash(100000.0)
print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())
print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())
```实际结果是这样的C:\Users\18368\Anaconda3\python.exe C:/Users/18368/PycharmProjects/LHHC/3.py
Starting Portfolio Value: 100000.00
Final Portfolio Value: 100000.00
Process finished with exit code 0
```应该是这样的执行后结果:
Starting Portfolio Value: 100000.00
2020-09-30, Close, 125.97
...(省略n行)
2021-09-27, Close, 127.11
2021-09-28, Close, 127.26
2021-09-29, Close, 127.11
2021-09-30, Close, 126.83
Final Portfolio Value: 100000.00
检查一下你的代码和你的csv的数据是否一致。
| 表头 | 表头 |
|APL9 苹果指数 日线 不复权
日期 开盘 最高 最低 收盘 成交量 持仓量 结算价
2017/12/25 7914 7932 7744 7745 402020 39960 0
2017/12/26 7773 7838 7744 7745 212976 33148 0
2017/12/27 7757 7790 7748 7750 84040 27898 0
2017/12/28 7762 7862 7761 7820 84978 23880 0
2017/12/29 7831 7836 7796 7799 32658 21360 0
2018/1/2 7804 7845 7804 7831 20890 18748 0
2018/1/3 7853 7855 7805 7805 22790 18496 0
2018/1/4 7811 7819 7799 7804 17852 17630 0
2018/1/5 7813 7844 7797 7822 11982 15898 0
2018/1/8 7824 7825 7781 7785 8846 15668 0
2018/1/9 7786 7794 7762 7762 73868 21970 0
2018/1/10 7757 7773 7739 7742 31506 21842 0
2018/1/11 7741 7763 7704 7706 45058 26154 0
2018/1/12 7680 7701 7665 7665 40790 29714 0
2018/1/15 7658 7678 7645 7656 27614 30834 0
2018/1/16 7659 7689 7605 7612 47184 34952 0
2018/1/17 7629 7630 7542 7547 94018 38946 0
2018/1/18 7557 7583 7543 7548 50958 40362 0
2018/1/19 7553 7580 7524 7538 60386 39484 0
2018/1/22 7550 7585 7548 7572 42872 38112 0
2018/1/23 7582 7609 7557 7571 55554 35746 0
2018/1/24 7577 7577 7545 7553 27950 36170 0
2018/1/25 7561 7574 7543 7544 28230 36718 0
2018/1/26 7549 7578 7548 7558 30770 34432 0
2018/1/29 7566 7566 7457 7458 58638 39614 0
2018/1/30 7453 7465 7422 7422 51896 43580 0
2018/1/31 7418 7452 7381 7399 89936 43898 0
2018/2/1 7413 7425 7356 7356 64172 45444 0
2018/2/2 7368 7386 7303 7306 103224 50498 0
2018/2/5 7299 7318 7265 7272 107520 56256 0
2018/2/6 7268 7310 7159 7162 126578 62632 0
2018/2/7 7172 7173 6846 6846 317480 87028 0
2018/2/8 6720 6734 6558 6641 468588 69546 0
2018/2/9 6675 6703 6592 6624 287276 74096 0
2018/2/12 6627 6754 6595 6605 309130 77172 0
2018/2/13 6620 6646 6558 6569 222968 76770 0
2018/2/14 6588 6603 6354 6396 276438 80350 0
2018/2/22 6376 6376 6315 6320 260624 101918 0
2018/2/23 6321 6670 6321 6665 578642 102746 0
2018/2/26 6758 6866 6692 6733 696938 84716 0
2018/2/27 6724 6965 6677 6862 1034592 92960 0
------ | ------ |
| 单元格 | 单元格 |
| 单元格 | 单元格 |
数据用了三种格式都试了,只能读表格
你的数据是不是前面有几行无用的,我觉得应该要指定从第几行开始才行。