文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
开始一个简单的回测
在上面的描述中我们已经取得了标准的历史数据格式, 那么我们现在来实现一个标准的历史回测
from datetime import datetime
from ctpbee import get_current_trade_day, CtpBee
from ctpbee import CtpbeeApi
from ctpbee.constant import TickData, OrderData, Offset, Direction, TradeData, Status, ContractData, BarData
from ctpbee.message import Mail
import pandas as pd
CODE = "rb2105.SHFE"
class Str(CtpbeeApi):
def __init__(self):
super().__init__("api")
self.instrument_set = [CODE]
def on_bar(self, tick: BarData) -> None:
print(tick.close_price)
def on_init(self, init: bool):
print("新的一天开始了")
def run_looper_app():
info = {
"PATTERN": "looper",
"LOOPER": {
"initial_capital": 10000, # 初始资金
"deal_pattern": "price", # 撮合模式
"margin_ratio": {
CODE: 0.1, # 保证金占用率
},
"commission_ratio": {
CODE: {
"close": 0.00003, # 平昨手续费 <支持整数位手续费,比如三块 >
"close_today": 0.00003 # 平今手续费
},
},
"size_map": {
CODE: 10 # 合约乘数
}
}
}
app = CtpBee("looper", __name__)
app.config.from_mapping(info)
strategy = Str()
data = pd.read_csv("rbdata.csv") # 读取k线的csv
data = list(data.to_dict(orient="index").values())
for x in data:
x["datetime"] = datetime.strptime(x["datetime"], "%Y-%m-%d %H:%M:%S") # 转换时间为标准datetime格式
app.add_data(data) # 加载进去
app.add_extension(strategy)
app.start()
result, trade = app.get_result(report=True, auto_open=True)
print(result)
if __name__ == '__main__':
run_looper_app()
csv下载地址 密码: 54en
载入数据
创建完App之后,我们便开始往容器里面添加数据,
app.add_data(data)
注意:
history
数据应该是一个[{}, {}, {}]
这样类型的python数据,你需要做一重转换处理, datetime数据它会自动进行转换, 当然仅针对特定格式
添加策略
我们需要在此处添加标准形式的策略实例 和ctpbee
的CtpbeeApi
示例类似, 用户都需要继承CtpbeeApi
,提供了on_bar
、on_tick
、on_trade
等方法 他们的调用和实盘接口是无缝的
开始回测
与实盘一样都可以调用run接口即可完成
app.start()
获取回测结果
result, trade_record = app.get_result()
如果你什么参数都不添加的话, 那么它将返回一个dataframe和成交单信息, 但是有两个可选参数可供你使用
report
, 是否生成HTML报告信息auto_open
, bool型参数,当这个参数为True的时候,会自动调用默认浏览器打开页面
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论