量化24小时 - 第三部分 NodeJS 编写基于事件的量化回测

准备工作

准备了一些初步思路, 大致分为 Engine 引擎, Strategy 策略, Exchange 交易所, DataSource 数据源 4 大部分.

  1. DataSource 数据源 用于提供数据, 数据应该是另一个服务抓取到数据库, 或者是通过 websocket 推送的.
  2. Exchange 交易所 打通不同交易所 API, 并且提供相同数据接口和数据返回结构.
  3. Strategy 策略 根据不同的思路, 可以实现一定的程序化交易流程, 把流程整理成可持续的代码.
  4. Engine 引擎 用于从 数据源 抓取数据, 调用 策略 给出买卖指令, 发送到 交易所 执行买卖指令.

回测数据流

设置参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
const Exchange = require('./exchange/FakeExchange'); // 模拟交易所
const DataSource = require('./datasource/FakeDataSource'); // 模拟数据源

const Strategy = require('./strategy/DoubleMA'); // 双均线策略
const Engine = require('./engine/BackTestingEngine'); // 回测引擎

// 交易所
const exchange = new Exchange();

// 数据源
const datasource = new DataSource();

// 策略
const strategy = new Strategy();

// 不同策略独立的配置
strategy.init(5, 20);

// 所有策略公有配置
strategy.setSlippage(0.002); // 设置滑点
strategy.setRate(0.0016); // 设置手续费率
strategy.setPriceDecimal(2); // 设置价格精度
strategy.setCapital(10000); // 设置初始资产

// 引擎
const engine = new Engine();
engine.setMode(Engine.BAR_MODE);
engine.setDateSource(datasource);
engine.setExchange(exchange);
engine.setStrategy(strategy);

// 启动回测引擎
engine.run();

// 回测情况下, 结束后清空头寸
strategy.close();

console.log(strategy);

数据流

引擎根据设置的 bar mode 选择拉取的数据, 并且以事件的形式发送到 Strategy 的 onTick 或者 onBar 方法.

在 Strategy 中, 经过计算, 得出是五种操作 pass, openLong, openShort, closeLong, closeShort 的哪一种, 然后将抛出对应事件.

事件在 Engine 中监听, 抓到事件后, 向 Exchange 下达对应的指令.

当 Exchange 完成指令后, Engine 拿到执行结果, 触发 Strategy 的 onOrder, onTrade, 以及 onOpenLong, onOpenShort, onCloseLong, onCloseShort 方法, 在 Strategy 中执行 position, capital 以及 orders 的操作.

至此基本完成整个策略引擎的数据流程.

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.