Chap 1: Algorithmic Trading Fundamentals

1. 我们为何交易?

2. 现代交易的基本概念

2.1 market sector

vs asset classes: 基于标的的不同

2.2 Asset classes

vs market sectors: 基于金融产品的不同

3. 现代交易系统

3.1 Exchange market data protocol

沟通交易中心和参与者的通讯协议。可基于通讯协议来设计,编写交易软件

3.2 Market data feed handlers

让参与者与指定的exchange market data protocol交互的程序. 可以:

3.3 Exchange order book

Exchange order book记录、维护所有的买卖信息,包括:

Buy order (bids) 根据价格从到到低排列 (价高者先被匹配), 相同价格的由匹配算法决定。

匹配算法包括:

3.4 Limit order book

类似Exchange order book,但由参与者创建,因此只有部分信息。

目标:收集并安排买卖来获取市场信息。

3.5 Order types

大多数交易中心支持多种下单类型:

3.6 Exchange order entry protocols

发出交易请求时用的通讯协议。交易中心同样用它来回复交易者

3.7 Order entry gateway

Drop-copy gateways:

3.8 Positions (仓位) and PnL (profit and loss) management

3.8.1 Position

下单后交易者就得到了 position (仓位\头寸) in the instruments that they got executed, for 执行时的 数量 & 价格

3.8.2 VWAP (Volume Weighted Average Price)

在不同价位、数量不同的多头或空头,组合为 Volume Weighted Average Price (成交量加权平均价)

3.8.3 Profit and Loss (PoL) of position

通过比较当前市场价格和 open position (未平仓头寸/持仓头寸,即尚未交割的头寸) 的价格,可以得到 unrealized PoL:

4. 从直觉到程序交易

No trading idea is right all the time.

4.1 为何要自动交易?

手动交易的进化:对人大叫手动挂单 -> 打电话(broker)来挂单 -> 在程序里手动输入来挂单

缺点:

  1. 容易错过信息
  2. 容易犯错
  3. 容易分心

4.2 算法交易的进化: rule-based to AI

以趋势跟踪来做案例,分析算法交易的进化:

5. 算法交易的部件

实际应用中,算法交易系统可以分为两部分:

5.1 Market Data subscription 订阅市场数据

负责与 feed handler components 沟通来传播标准化数据。数据在内部网络或本机上通过 Inter-Process Communication (IPC) 来进行传播。

5.2 Limit order books

当交易策略得到标准化后的数据,它能为目标金融工具构建出一个limit order book。

5.3 Signals(交易信号)

limit order book构建完成后,每次数据更新都能激发交易信号

signals 又可被称为 indicators, predictors, calculators, features, alpha, etc.

5.4 Signal aggregators (信号整合)

5.5 Execution logic 执行逻辑

好的交易策略要达到 快速&复杂/富有经验两个目标,二者往往互相冲突。因此,execution logic 需要在二者之间取得平衡,同时尽量隐藏自己的意图。

市场是双向透明的,其他参与者可以得到所有挂单的信息,并且推测影响。同时slippage(滑点)fee(交易费)也不能忽视。

slippage

当交易算法的仓位数量变大时,滑点会更加显著

fee

exchange fees & broker feed 往往与交易量正相关

有时一个优异的交易策略会因为滑点和交易费而赚不到钱

5.6 Position and PnL management (盈亏管理)

不同的交易策略会导致不同复杂程度的盈亏管理。

e.g.:

5.7 风险管理

风控是算法交易的基石(cornerstone):

5.8 Backtesting 回测

研究交易算法需要回测。回测能够模拟交易系统的行为并且得到 expected PnL, expected risk exposure, other matrices.

高精度的回测系统非常复杂。

回测系统可以提供:

Why Python?

此处会实现一个简单的基于趋势跟踪的交易策略(买低卖高)。算法的大致步骤是:

  1. 得到GOOGLE从2014-01-01到2018-01-01的股票数据,包括当日高位、低位、开盘价、收盘价、交易量
  2. 生成交易信号:
    1. 使用GOOGLE股票的修正后收盘价作为基础,计算每日价格变动
    2. 假如价格变动为正(价格上涨),那就卖出,反之买入(基于自身所拥有仓位的数量上)
  3. 生成交易数量的图表,向上箭头表示买入,向下箭头表示卖出
  4. 回测:
    1. 假设拥有$1000作为启动资金,计算3年来 cash (initial amount of money) 和 holding (invest this money)
      1. 若股票价格上涨,value of holding 上涨
      2. 卖出后,这只股票value of the holding 被转移至 cash amount中。
      3. 总资产价格 (sum total of the assets) = cash + holding