Giter VIP home page Giter VIP logo

openfund-backtest's Introduction

openFund-backtest

基于万得实现开放式基金回测

一、设计初衷

目前市面上的量化平台都不支持开放式基金的回测,只支持股票、期权、期货的回测,本平台参考了目前大多数回测平台的使用,支持用户通过回测平台编写代码进行开放式基金申购、赎回并自动进行回测,测算 策略的收益率、最大回撤、alpha、beta等

二、实现方法

2.1初始化

用户在初始化阶段要定义两个变量,一个初始账户金额(如100000元),二是一个历史回测周期的起止日期,如2019年1月1日至2021年6月30日

2.2编写策略

本平台提供了4个基本交易函数:单只基金申购、一揽子基金申购、单只基金赎回、所有基金赎回,用户可以在回测起止交易日内的任何时间调用上述4个函数,如:buy_list(['000311.OF', '000478.OF', '100038.OF', '163407.OF', '399011.OF','450009.OF', '540006.OF'],'2019-04-01') 代表在2019年4月1日申购一揽子基金,基金列表为['000311.OF', '000478.OF', '100038.OF', '163407.OF', '399011.OF','450009.OF', '540006.OF']

2.3后台实现 本平台力求简洁,不搞花哨复杂的代码以求高效实现回测,只定义了两个类,账户类和回测类

账户类: 定义了用户的资金账号和基金账户,其中资金账号单位为元,类型为float,代表用户的资金余额,在用户还未交易时,这个资金余额就是用户的初始账户余额

回测类: 定义了4个交易函数和1个盘后数据处理函数,说明如下:

1、单只基金申购函数:buy(fundcode,num,date) 功能:在某个交易日申购某个基金代码指定数量(单位:份)的基金

2、一篮子基金申购函数:buy_list(fundcode_list,date) 功能:在某个交易日申购一篮子基金,调用该函数后,系统会用账户余额除以一篮子基金内基金的数量,等额申购每一只基金

3、单只基金赎回函数:sell (fundcode,num,date) 功能:在某个交易日赎回一定数量基金,调用该函数后,系统会校验基金账户是否有足额基金可供赎回,赎回后会自动计算赎回日基金净值,并增加相应的资金账号

4、清仓函数:sell_all (date) 功能:在某个交易日将基金账户内所有基金赎回,赎回后资金账号相应增加

5、盘后处理函数:hand_data 功能:计算回测周期每一日的基金持仓市值、总资产(基金持仓市值+资金账号余额)、收益、alpha、beta等

本回测平台引入了交易标志flag,每次有申购、赎回交易时,都会自动更新交易日至截止日的标志,这样可以将用户的持仓按照flag划分为若干个区间,每个区间内用户的持仓是不变的,为此可以分别计算每一个持仓区间内的持仓市值,整个交互机制示意图如“数据交互示意.png”所示

openfund-backtest's People

Contributors

hyang1985 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.