vnpy2.0 探索(一)

vnpy:

vn.py是一套基于Python的开源量化交易系统开发框架,于2015年1月正式发布,在开源社区5年持续不断的贡献下一步步成长为全功能量化交易平台,目前国内外金融机构用户已经超过300家,包括:私募基金、证券自营和资管、期货资管和子公司、高校研究机构、自营交易公司、交易所、Token Fund等。

vnpy 也开始支持一些主流的数字货币交易所  ,所以也开始研究一下vnpy怎么使用

历史数据导入数据库:

这里我用的是mongodb,vnpy1.9版本貌似只支持mongodb,在2.0版本中可以使用其他的数据库。vnpy回测的时候是从数据库里面读取数据,所以直接读取.csv文件是没有办法的。所以,想要回测数据必须先把手里的 .csv 文件上传到数据库里边,数据格式如下。

vnpy2.0 探索(一)_第1张图片

上图是我们手中的历史数据,下图是已经转好格式的数据库中的数据。

转入数据库代码:

# encoding: UTF-8
import tempfile
import unittest

from vnpy.app.csv_loader import CsvLoaderEngine
from vnpy.trader.constant import Exchange, Interval
import pandas as pd

#预处理
def pre_proc(f):
    df = pd.read_csv(f,encoding='gbk') 
    df['Datetime'] = df['Date'] +" "+ df['Time'] #合并日期与时间
    del(df['Date'])  # 把原来的日期时间 删除
    del(df['Time'])
    df.to_csv('rb0000_1min_x.csv',encoding='gbk',index=None)
    engine = CsvLoaderEngine(None, None)
    f = open('rb0000_1min_x.csv', 'r')
    f.seek(0)

    engine.load_by_handle(
        f,
        symbol="rb0000",
        exchange=Exchange.SHFE,
        interval=Interval.MINUTE,
        datetime_head="Datetime",
        open_head="Open",
        close_head="Close",
        low_head="Low",
        high_head="High",
        volume_head="TotalVolume",
        datetime_format="%Y-%m-%d %H:%M:%S",
    )
    print('存入成功')
if __name__ == '__main__':
    pre_proc('IF0000_1min.csv')


回测:

代码是直接从examp文件夹copy 过来,设置即可运行

# vn.trader模块

from datetime import datetime

from vnpy.app.cta_backtester.engine import BacktestingEngine
from vnpy.app.cta_backtester.engine import OptimizationSetting
from vnpy.app.cta_strategy.strategies.atr_rsi_strategy import AtrRsiStrategy

def main():
    # 创建一个回测引擎
    engine = BacktestingEngine()
    engine.set_parameters(
        vt_symbol ='rb0000.SHFE',
        interval='1m',
        start= datetime(2010, 1, 1),
        rate=0.003,
        slippage=0.2,
        size=300,
        pricetick=0.2,
        capital= 1_000_000,
        end= datetime(2015, 1, 1),
        )
    engine.add_strategy(AtrRsiStrategy,{})

    engine.load_data()
    engine.run_backtesting()
    df = engine.calculate_result()
    engine.calculate_statistics()
    engine.show_chart()
    setting = OptimizationSetting()
    setting.set_target("sharpe_ratio")
    setting.add_parameter("atr_length", 3, 39, 1)
    setting.add_parameter("atr_ma_length", 10, 30, 1)
    engine.run_ga_optimization(setting)

if __name__ == '__main__':
    main()

 

你可能感兴趣的:(vnpy)