« 上一篇下一篇 »

量化交易系统开发的一些随笔

1.信号研究,因子研究,策略研究, 比如说通过各种数学方法如线性回归,金融时间序列分析,统计学习,机器学习等对历史数据进行分析,通过一定的规律找到开仓和平仓的信号(如趋势信号,均值回归信号)

2.把第一步的研究成果写成策略代码,拿历史数据进行回测,看看结果如何

3.如果上一步OK的话,就把策略代码对接实盘(或者先模拟盘),真实跑起来


从软件角度来看上面三个步骤的话,对应有三种软件概念:

1. 策略(信号,因子)研究平台

2. 策略回测平台

3. 实盘(模拟盘)量化交易平台


关于历史数据:

比如有一年的历史数据,可以拿3/4出来给第一步做信号研究,剩下1/4给第二步做历史回测。

===========================================================

最重要的一些需要订阅的交易所数据.


市场(公共)数据:

1.K线数据 (也可以自己通过采集Ticker数据计算组合出来) (针对于某个symbol)

2.Ticker数据(这个数据一般就是买一,卖一,最新成交价等,本质其实是由 Orderbooks(深度)数据 和 Trades数据 组合而来的) (针对于某个symbol)

3.Orderbooks(深度)数据 (订单簿,市场的买卖挂单深度) (针对于某个symbol)

4.Trades数据(成交列表,最新成交价本质就是最后一笔成交的价格) (针对于某个symbol)


市场用户(私有)数据:

1.账户数据(比如持有的比特币数量,usdt数量等等,如果是期货账户就是类似保证金数量等等)

2.position数据(比如持仓量,开仓均价,未实现盈亏,强平价格等,这个是期货才有的,现货不存在仓位的概念) (针对于某个symbol)

3.orders数据 (当前用户挂单列表) (针对于某个symbol)

4.fills数据 (挂单成交后的成交数据) (针对于某个symbol)


其他的一些重要数据:

比如 杠杆倍数,如果是永续合约比如交换费率,交割合约比如到期时间,报价的最小单位, 买卖可以操作的最小单位数量等

===========================================================

把现货交易和期货交易统一到同一个概念下面,对于现货而言没有仓位这个概念,所以对于现货我们可以定义一个虚拟仓位的概念,同时把账号里面'钱'看成是期货里面的保证金


先说几个关键词:基础货币,标的物,保证金抵押物,结算货币,计价货币,杠杆倍数


比如说用人民币买卖苹果,假设某一刻我有5吨苹果,1000元钱,那么:


交易对: 苹果/人民币

标的物: 苹果(单位:吨)

保证金(抵押物): 人民币(单位:元)

计价货币: 人民币

结算货币: 人民币

杠杆倍数: 因为是现货所以是一倍


引用期货的概念,可以这样理解: 我现在持有(虚拟)仓位5吨苹果,我账户拥有保证金1000元,买动作发生时,仓位增加,账户可用保证金减少,卖正好相反

--------------------------------------------------------------------------------------------------------

现货模拟期货概念,例子一:


交易对: BTC/USDT(现货)

标的物: BTC(单位:个)

保证金(抵押物): USDT(单位:个)

计价货币: USDT

结算货币: USDT

杠杆倍数: 因为是现货所以是一倍


假设某一刻我某交易所现货账户里有5个BTC,1000个USDT,那么可以这样理解: 我现在持有(虚拟)仓位5个BTC,我账户拥有保证金1000个USDT,买动作发生时,仓位增加,账户可用保证金减少,卖正好相反

备注: 账户里面的BTC看成是苹果,就是要买卖的东西,USDT看成是人民币,也就是'钱'

--------------------------------------------------------------------------------------------------------

现货模拟期货概念,例子二:


交易对: ETH/BTC(现货)

标的物: ETH(单位:个)

保证金(抵押物): BTC(单位:个)

计价货币: BTC

结算货币: BTC

杠杆倍数: 因为是现货所以是一倍


假设某一刻我某交易所现货账户有100个ETH,3个BTC,那么可以这样理解: 我现在持有仓位100个ETH,我账户拥有保证金3个BTC,买动作发生时,仓位增加,账户可用保证金减少,卖正好相反

备注:账户里面的ETH看成是苹果,就是要买卖的东西,BTC看成是人民币,也就是'钱'

--------------------------------------------------------------------------------------------------------

关于期货交易的 (买入开多,卖出平多), (卖出开空, 买入平空), (加仓, 减仓)等在现货里面的概念, 我们以ETH/BTC(现货)来说明:


买入开多: 假设我账户里面ETH为0, 有若干BTC, 这个时候我买入ETH, 就相当于 买入开多 

卖出平多: 我把账户里面的ETH全部卖掉, 都换成了BTC, 就相当于 卖出平多

(卖出开空, 买入平空): 这两个在现货交易里面没有, 现货无法做空

加仓: 我账户里面本来就有一定数量的ETH和BTC, 然后我买入一些ETH, 这就叫 加仓

减仓: 我账户里面本来就有一定数量的ETH, 然后我卖出一些ETH, 但不全部卖完, 这就叫 减仓

满仓: 我把账户里面的BTC全部买成了ETH, 就叫满仓

--------------------------------------------------------------------------------------------------------

真实的期货交易(以bitmex,okex上的反向合约为例子):


交易对: BTC/USD(期货)

标的物: N张合约(单位:张, 比如一张合约1USD或者100USD等, 本质上仓位标的物就是USD)

保证金(抵押物): BTC(单位:个)

计价货币: USD

结算货币: BTC

杠杆倍数: 可以自由设置


总结1: 理解了上面的例子, 就可以把现货和期货的交易概念很好的统一起来, 包括仓位, 保证金, 期货交易的(买入开多,卖出平多), (卖出开空, 买入平空), (加仓, 减仓)等概念也可以一一和现货交易对应起来, 但是可惜的是对于交易手续费还是不能完美的统一起来, 对于现货而言买入操作的手续费是从<标的物>里面扣,卖出操作是从<保证金>(账户里面的'钱')里面扣, 而对于期货交易, 不管卖出还是买入都是从<保证金>里面扣除手续费.


总结2: 数字货币交易目前玩的最多的主要有四类: 

1.现货交易(容易理解)

2.杠杆交易(用一定数量的币做担保向平台再借入一定数量的币,进行现货交易)

3.交割合约交易(类似期货)

4.永续合约交易(类似永不交割的期货)

数字货币交易大量借鉴了传统金融市场的概念,如股票交易,商品期货交易,股指期货交易,外汇交易,外汇期货交易,ETF交易等,大家各有各的概念,但是很多东西本质都是相通的,重在理解

===========================================================

一些数学模型:


卡尔曼滤波

马尔可夫过程

ARMA

ARIMA

ARCH

GARCH

SVM

......