learn-algorithmic-trading/courses/sec1_chap1_introduction_and...

11 KiB
Raw Blame History

Chap 1: Algorithmic Trading Fundamentals

1. 我们为何交易?

  • 交易是人类天性
  • 交易的历史
    • 在古罗马广场上,有钱人交易货币、债券
    • 在14世纪威尼斯交易国债
    • 1531年比利时出现了最早的股票交易市场
    • 在1602航海时代荷兰东印度公司公募
    • 17世纪法国为探索路易斯安娜公募
  • 上述案例共同点:
    • 有钱人想变得更有钱;
    • 最终都失败
  • 交易听起来有利可图,但并非一直如此

2. 现代交易的基本概念

  • 市场基本因素:供需(从古至今)
  • 现代交易:高效的市场价格发现(技术因素)
    • 竞争点:
      • 精细程度
      • 洞察力

2.1 market sector

vs asset classes: 基于标的的不同

  • 商品(金属,农产品)
  • 能源(油,气)
  • 股票
  • 债权
  • 外汇

2.2 Asset classes

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

  • 债券,外汇,股票
  • 基于上述标的的衍生品
    • future contract (期货合约)
      • 必须交割
    • option contract (期权合约)
      • 可不交割但要付premium(权利金)
        • call option
        • put option

3. 现代交易系统

3.1 Exchange market data protocol

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

3.2 Market data feed handlers

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

  • subscribe
  • receive
  • decode
  • 检查错误,断网

3.3 Exchange order book

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

  • 价格
  • 数量
  • order types
  • ID

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

匹配算法包括:

  • FIFO
  • Pro-rata (按比例)

3.4 Limit order book

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

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

3.5 Order types

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

  • IOC (Immediate Or Cancel): 从不加入book要么被全部执行要不被取消
    • 优点:避免由于 order management 带来的麻烦
  • GTD (Good Till Day): 被记入book如果匹配成功则交易可执行部分剩余则加入book直到能被完全匹配
  • Stop orders: 等到stop price (a specific price)orders 才会被加入 book并成为GTD
    • 优点:可被用来止损,或者获利

3.6 Exchange order entry protocols

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

3.7 Order entry gateway

  • 交易者的 client app
  • 通过 order entry protocols 来与交易中心的匹配引擎进行交流(下单,更改价格...)

Drop-copy gateways:

  • 第二套gateway来确定交易的真实性

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

3.8.1 Position

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

  • Long position (多头头寸) = buy side execution

    • 多头赚钱market price > position price (i.e. buy low)
  • Short position (空头头寸) = sell sid execution

    • 空头赚钱market price < position price (sell high)
  • Being flat = no position

  • Open position (未平仓头寸) = 指尚未对冲或交割的头寸,即持仓者承诺要买入或卖出某些未履约的商品,或买入或卖出没有相反方向相配的商品。

  • Close position (平仓) = 期货交易者买入或卖出与其所持期货合约的品种、数量及交割月份相同但交易方向相反的期货合约,了结期货交易的行为。

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:

  • Long position 有 unrealized profit (loss) 当市场价格上涨(下降)
  • Profit/Loss is realized when open position is closed (平仓)
    • 平仓: sell to close a long position, or buy to close a short position.
  • After close position, PnL become realized PnL.
  • total PnL = realized PnLs + unrealized PnLs for open position.

4. 从直觉到程序交易

  • 大多数情况下交易策略来自于直觉。e.g.
    • trend-following (趋势跟踪),跟着大盘走(如果你觉得大盘还会涨、跌)
    • mean reversion strategies, 逆着大盘走(如果你觉得大盘已经到顶、底)

No trading idea is right all the time.

4.1 为何要自动交易?

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

缺点:

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

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

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

  • 早期的经典趋势交易:交易员通过图表观测趋势是否开始/持续。e.g. 股票价格连续一周每天上身5% 那就应该买入若股票价格两小时内下跌10%,那就要卖出

5. 算法交易的部件

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

  • Core infrastructure (核心基础设施) 负责:
    • deals with exchange-facing market data protocol integration 与交所的数据协议进行整合
    • market data handler: 作为handler读取市场数据
    • internal market data format normalization 在内部对市场数据进行标准化
    • historical data recording 记录历史数据
    • instrument definition recording/dissemination 记录并传播金融工具的定义
    • exchange order entry protocols 交所下单的通讯协议协议
    • exchange order entry gateway 负责下单
    • core side risk systems
    • broker-facing app, 与中介沟通
    • back office reconciliation app, 与后台调和
    • addressing compliance requirement 解决合规问题
    • ...
  • Algorithmic trading strategy (算法交易系统),负责:
    • normalizing market data 标准化市场数据
    • building order book 建立 order book
    • generating signals from incoming market data and order flow information 通过接收到的市场数据和下单情况产生交易信号
    • aggregation of different signals 整合不同的交易信号
    • efficient execution logic built on top of statistical predictive abilities (alpha) 基于统计判断能力(alpha)的高效执行
    • position and PnL management inside the strategies 仓位管理
    • risk management inside strategies 风险控制
    • backtesting 回测
    • historical signal trading research platforms 研究

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.

  • 交易信号是精心定义的
  • 从收到的市场数据信息limit order book 和交易信息中获取
  • 让参与者得到对其他参与者的相对优势 (edge or advantage vias-a-vis other market participants)
  • 交易员花费大量时间构建、更新、添加交易信号

5.4 Signal aggregators (信号整合)

  • 很多程序交易系统会整合数个交易信号来得到一个更强(better edge)的信号。
  • different aggregtion approach:
    • linear/non-linear combination 线性、非线性组合
    • regression 递归
    • ...

5.5 Execution logic 执行逻辑

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

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

slippage

  • slippage = 预期的交易价格和真实交易价格间的差异
  • 两个主要原因:
    • latency (延迟),当交易请求抵达交易所慢了一步
    • large volume (大当量),当挂单数量巨大而被分批次(在不同价位)被成交,那整个交易的 VWAP 就会与预期不同

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

fee

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

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

5.6 Position and PnL management (盈亏管理)

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

e.g.:

  • pairs trading (配对交易) 基于两个相关性较高的股票或者其他证券,如果在未来时期保持着良好的相关性,一旦两者之间出现了背离的走势,且这种背离在未来是会得到纠正的,那么就可能产生套利的机会。
    • 需要跟踪多个仓位并对多个金融产品进行盈亏管理。复杂度上升

5.7 风险管理

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

  • 违反交易所的规定会导致法律性惩罚。
  • 高频交易的风险在于bug
    • 需要大量测试,压力测试,鲁棒测试, etc.

5.8 Backtesting 回测

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

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

回测系统可以提供:

  • Profit and loss (P and L): 排除交易费用所产生的盈亏
  • Net profit and loss (net P and L): 包括交易费用的盈亏
  • Exposure: The capital invested 投入的本金
  • Number of trades 交易过程中产生的交易数量
  • Annualized return: 年化收益
  • Sharpe ratio (夏普率): 一项投资(例如证券或投资组合)在对其调整风险后,相对于无风险资产的表现。 计算方法为一项投资(例如证券或投资组合)在对其调整风险后,相对于无风险资产的表现

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