项目作者: patternfinance

项目描述 :
Trade Smart in 2018 - 面向多策略开发的自动交易系统
高级语言: Python
项目地址: git://github.com/patternfinance/STS.git
创建时间: 2017-03-23T11:45:43Z
项目社区:https://github.com/patternfinance/STS

开源协议:MIT License

下载


STS - Smart Trading System

STS是一个面向多策略开发的自动交易系统。支持包括策略开发、策略回测在内的多项功能。目前STS尚在概念设计和验证阶段。感谢您的关注。

如何安装STS

  • 方式1:pip install sts

    如要升级STS请使用

    1. pip install sts --upgrade

  • 方式2:git clone repo后使用python setup.py install安装

如何使用STS

Example 1. 创建或加载一个稍后使用的股票池(Universe):

  1. import sts.universe as Universe
  2. # Create an universe
  3. user_uni = Universe.NormalUniverse()
  4. user_uni.set_universe('myuniverse_20170421.json')
  5. # Add stock to universe
  6. user_uni.add_stock('sh601211', '国泰君安')
  7. # Load built-in (core or user) universe from UniverseBase
  8. ubox = Universe.UniverseBox()
  9. # uni = ubox.load_niverse(repo='core', name='hs300')
  10. uni = ubox.load_niverse(repo='user', name='myuniverse_20170421.json')

Example 2. 获取个股日间(Inter-day)历史交易数据:

  1. import sts.datasource as DataSource
  2. # 获取单个股票的历史交易数据
  3. # 返回Pandas DataFrame
  4. tsObj = DataSource.getHistoricalBars('sh000001')
  5. # 快速选取数据
  6. tsObj = DataSource.select(tsObj, '2014-01-01', DataSource.today())

Example 3. 创建TradingDesk并进行设置:

  1. import sts.tradingdesk as TradingDesk
  2. # Load built-in strategy from StrategyBox
  3. sbox = Strategy.StrategyBox()
  4. maco = sbox.load_strategy(repo='pf', name='MovingAverageCrossover')
  5. maco.mat = 'sma' # 设置使用的moving average类型
  6. maco.keyFast = 'open' # 使用开盘价来计算fast moving average
  7. maco.keySlow = 'close' # 使用收盘价来计算slow moving average
  8. maco.fastWindow = 5
  9. maco.slowWindow = 25
  10. # 创建一个单策略的TradingDesk
  11. # uni类型请参考Example 1
  12. trader = TradingDesk.LegacyDesk(uni, maco)
  13. # 设置滑点、手续费和Benchmark
  14. trader.set_slippage(0.002) # trader.slippage = 0.002
  15. trader.set_commission(0.00025) # trader.commission = 0.00025
  16. trader.set_benchmark('sh000300') # trader.benchmark = 'sh000300'
  17. # 创建一个多策略的TradingDesk
  18. # 从StrategyBox中加载多个策略
  19. # 我们稍后可以将策略配置存入json文件中
  20. strategies_json = [{
  21. 'repo': 'pf',
  22. 'name': 'MovingAverageCrossover',
  23. 'params': {
  24. 'mat': 'sma',
  25. 'keyFast': 'open',
  26. 'keySlow': 'close',
  27. 'fastWindow': 5,
  28. 'slowWindow': 25
  29. }
  30. }, {
  31. 'repo': 'pf',
  32. 'name': 'SimpleMeanReversion',
  33. 'params': {
  34. 'type': 'log-returns',
  35. 'key': 'close'
  36. }
  37. }, {
  38. 'repo': 'pf',
  39. 'name': 'RelativeStrength',
  40. 'params': {
  41. 'overbought': 80,
  42. 'oversold': 20,
  43. 'period': 2
  44. }
  45. }, {
  46. 'repo': 'pf',
  47. 'name': 'DualThrust',
  48. 'params': {
  49. 'k1': 0.5,
  50. 'k2': 0.5,
  51. 'window': 5
  52. }
  53. }]
  54. strategies = sbox.load_strategies(strategies_json)
  55. quant = TradingDesk.QuantDesk(uni, strategies)

STS功能介绍

我们在STS的开发中沿用模块化开发的思路,你可以使用整个STS或者单独使用某一模块来完成特定的任务。

  • Universe Module
  • DataSource Module
  • Model Module
  • Strategy Module
  • Backtest Module
  • Performance Module

STS交易系统开发理念

  • 一个典型的单策略交易系统

当你有一个经典策略和所需的数据时,你就可以开发出一个简单的单策略交易系统。而在你使用单策略交易时也许会经常遇到策略失效的情况,或者,当市场已经发生变化时我们通过单策略无法得知。

  • 多策略交易系统的原罪

市场上已经存在着形形色色的多策略交易系统(比如策略轮动),而它们如此设计的原因在于市场的不断变化(Regime-Switching)和单个交易策略的经常性失灵。但这并不意味着每一个多策略系统都能优于单策略系统。

  • TradingDesk的设计

我们用TradingDesk来抽象我们对交易市场的理解。每一个TradingDesk表示着一种对市场的理解,你也可以把它理解成一个现实世界中隐藏在交易台后的交易员。不同的TradingDesk会使用不同(或相似)的方法来交易,而设计的初衷在于交易系统的多样性。

比如,我们可以使用STS中提供的LegacyDesk来构建一个基于简单均值回归或者动量策略的交易系统。或者,我们也可以通过QuantDesk来构建一个由双均线策略、海龟策略和动态突破策略组成的多策略交易系统。当我们有足够多的TradingDesk时,我们可以通过不同TradingDesk间的关联与变化来发现市场微观结构的改变。

帮助和支持