我的python回测系统创建之路(1)

简介: 我的python回测系统创建之路(1)

接触到了不少Python相关的开源项目,也接触到了不少回测框架,感觉这些框架都比较难懂,加上自己用pandas做回测,效率有点低,要建立一套自己的回测框架。


       读了不少Python回测框架作者创建框架的思路与理念,觉得使用事件驱动型框架比较好,另外,我要创建的这个框架将会模仿文华财经或者TB进行创建。正好最近读master Python for finnace 这本书,第九章有讲怎么创建一个回测框架。

20170916115012782.png



     在本文中,将这篇章节的大体思路翻译成汉语和代码,分享给大家。

    +++++++++++++++++++++++++++++++++++++++++++++++++

    翻译的部分内容

    +++++++++++++++++++++++++++++++++++++++++++++++++

    事件驱动回测系统的概念:

    在真实的交易环境中,一般要包含以下模块:数据,订单匹配模块,订单管理,账户,更新仓位;


""" Store a single unit of data """
class TickData:
  def __init__(self, symbol, timestamp,
  last_price=0, total_volume=0):
  self.symbol = symbol
  self.timestamp = timestamp
  self.open_price = 0
  self.last_price = last_price
  self.total_volume = total_volume
class MarketData:
  def __init__(self):
      self.__recent_ticks__ = dict()
  def add_last_price(self, time, symbol, price, volume):
      tick_data = TickData(symbol, time, price, volume)
      self.__recent_ticks__[symbol] = tick_data
  def add_open_price(self, time, symbol, price):
      tick_data = self.get_existing_tick_data(symbol, time)
      tick_data.open_price = price
  def get_existing_tick_data(self, symbol, time):
      if not symbol in self.__recent_ticks__:
      tick_data = TickData(symbol, time)
      self.__recent_ticks__[symbol] = tick_data
      return self.__recent_ticks__[symbol]
  def get_last_price(self, symbol):
      return self.__recent_ticks__[symbol].last_price
  def get_open_price(self, symbol):
      return self.__recent_ticks__[symbol].open_price
  def get_timestamp(self, symbol):
      return self.__recent_ticks__[symbol].timestamp
import pandas.io.data as web
""" Download prices from an external data source """
class MarketDataSource:
  def __init__(self):
    self.event_tick = None
       self.ticker, self.source = None, None
       self.start, self.end = None, None
       self.md = MarketData()
  def start_market_simulation(self):
        data = web.DataReader(self.ticker, self.source,
                              self.start, self.end)
        for time, row in data.iterrows():
        self.md.add_last_price(time, self.ticker,
        row["Close"], row["Volume"])
        self.md.add_open_price(time, self.ticker, row["Open"])
        if not self.event_tick is None:
            self.event_tick(self.md)
class Order:
  def __init__(self, timestamp, symbol, qty, is_buy,is_market_order, price=0):
     self.timestamp = timestamp
     self.symbol = symbol
     self.qty = qty
     self.price = price
     self.is_buy = is_buy
     self.is_market_order = is_market_order
     self.is_filled = False
     self.filled_price = 0
     self.filled_time = None
     self.filled_qty = 0
class Position:
  def __init__(self):
      self.symbol = None
      self.buys, self.sells, self.net = 0, 0, 0
      self.realized_pnl = 0
      self.unrealized_pnl = 0
      self.position_value = 0
  def event_fill(self, timestamp, is_buy, qty, price):
      if is_buy:
         self.buys += qty
      else:
         self.sells += qty
      self.net = self.buys - self.sells
      changed_value = qty * price * (-1 if is_buy else 1)
      self.position_value += changed_value
      if self.net == 0:
         self.realized_pnl = self.position_value
  def update_unrealized_pnl(self, price):
      if self.net == 0:
         self.unrealized_pnl = 0
      else:
         self.unrealized_pnl = price * self.net + \
                                self.position_value
      return self.unrealized_pnl
""" Base strategy for implementation """
class Strategy:
  def __init__(self):
      self.event_sendorder = None
  def event_tick(self, market_data):
      pass
  def event_order(self, order):
      pass
  def event_position(self, positions):
      pass
  def send_market_order(self, symbol, qty, is_buy, timestamp):
      if not self.event_sendorder is None:
         order = Order(timestamp, symbol, qty, is_buy, True)
         self.event_sendorder(order)
目录
相关文章
|
1月前
|
机器学习/深度学习 数据采集 供应链
Python实现深度学习模型:智能库存管理系统
【10月更文挑战第5天】 Python实现深度学习模型:智能库存管理系统
155 9
|
1月前
|
机器学习/深度学习 传感器 存储
使用 Python 实现智能地震预警系统
使用 Python 实现智能地震预警系统
115 61
|
15天前
|
弹性计算 数据管理 数据库
从零开始构建员工管理系统:Python与SQLite3的完美结合
本文介绍如何使用Python和Tkinter构建一个图形界面的员工管理系统(EMS)。系统包括数据库设计、核心功能实现和图形用户界面创建。主要功能有查询、添加、删除员工信息及统计员工数量。通过本文,你将学会如何结合SQLite数据库进行数据管理,并使用Tkinter创建友好的用户界面。
从零开始构建员工管理系统:Python与SQLite3的完美结合
|
8天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
36 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
8天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
45 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
19天前
|
机器学习/深度学习 数据采集 存储
使用Python实现智能农业灌溉系统的深度学习模型
使用Python实现智能农业灌溉系统的深度学习模型
84 6
|
23天前
|
机器学习/深度学习 数据采集 算法框架/工具
使用Python实现智能生态系统监测与保护的深度学习模型
使用Python实现智能生态系统监测与保护的深度学习模型
73 4
|
1月前
|
机器学习/深度学习 API 计算机视觉
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(下)
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(下)
26 2
|
1月前
|
机器学习/深度学习 存储 算法
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(上)
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(上)
30 1
|
1月前
|
Ubuntu Linux Python
Ubuntu学习笔记(六):ubuntu切换Anaconda和系统自带Python
本文介绍了在Ubuntu系统中切换Anaconda和系统自带Python的方法。方法1涉及编辑~/.bashrc和/etc/profile文件,更新Anaconda的路径。方法2提供了详细的步骤指导,帮助用户在Anaconda和系统自带Python之间进行切换。
85 1