我的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深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
135 5
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
2月前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
356 55
|
1月前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
3月前
|
机器学习/深度学习 数据采集 供应链
使用Python实现智能食品安全追溯系统的深度学习模型
使用Python实现智能食品安全追溯系统的深度学习模型
99 4
|
7天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
51 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
2月前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
132 66
|
2月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
220 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
1月前
|
机器学习/深度学习 算法 前端开发
基于Python深度学习果蔬识别系统实现
本项目基于Python和TensorFlow,使用ResNet卷积神经网络模型,对12种常见果蔬(如土豆、苹果等)的图像数据集进行训练,构建了一个高精度的果蔬识别系统。系统通过Django框架搭建Web端可视化界面,用户可上传图片并自动识别果蔬种类。该项目旨在提高农业生产效率,广泛应用于食品安全、智能农业等领域。CNN凭借其强大的特征提取能力,在图像分类任务中表现出色,为实现高效的自动化果蔬识别提供了技术支持。
基于Python深度学习果蔬识别系统实现
|
1月前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
32 3
|
2月前
|
机器学习/深度学习 算法 前端开发
基于Python深度学习的果蔬识别系统实现
果蔬识别系统,主要开发语言为Python,基于TensorFlow搭建ResNet卷积神经网络算法模型,通过对12种常见的果蔬('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜')图像数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django框架搭建Web网页端可视化操作界面,以下为项目实现介绍。
69 4
基于Python深度学习的果蔬识别系统实现

热门文章

最新文章

推荐镜像

更多