AI4Finance-Foundation / FinRL_Market_Simulator

https://ai4finance.org
MIT License
69 stars 32 forks source link

💬 Adding Rule trading policy to the Market Simulator #6

Open Yonv1943 opened 1 year ago

Yonv1943 commented 1 year ago

往市场上挂出去的订单,在规定时间内没有被成交掉,那么我们会撤单,并重新发布新的订单。

RL交易策略会通过撤单,让自己只在市场上维持一个订单

市场模拟器的订单簿挂出来的单子,需要填充其他策略去丰富,只往里面放 RL的交易策略是不够的。

RL交易策略会通过撤单,让自己只在市场上维持一个订单

有以下3个原因,RL交易策略在发布新订单后,撤掉旧的订单。令RL策略只在市场上维持一个订单的好处是:

  1. 简化交易智能体的状态(只需要用固定长度的特征表示订单状态)
  2. 价格变动,将导致有价格优势的新订单优先于旧订单被成交——不被优先成交的旧订单意义很小
  3. 买入和卖出两个限价单被挂出去,由于交易规则会按照先挂出的订单限定的价格去成交,导致先挂出去的单子获益反而更小

1. 简化交易智能体的状态(只需要用固定长度的特征表示订单状态)

  1. 设置交易间隔为1秒,设置撤单时间为常见的6秒,那么同一时刻,这个交易程序往市场上挂出去的订单最多将会是6个订单。

然而,在市场模拟器里,我们需要用固定长度的特征表达当前智能体的状态state。 这6个订单的撤单时间、排队状态也不一致,不方便用固定长度的特征表示成方便RL智能体学习的形式。

2. 价格变动,将导致有价格优势的新订单优先于旧订单被成交——不被优先成交的旧订单意义很小

尽管先挂出去的订单在成交队列上更靠前,但是有时候因为价格的变动,新挂出去的订单的成交顺序,会因为更靠近 best price 而比旧订单更优先被成交,这种情况下,没有维持旧订单的必要。

交易策略在不同价格档位挂单,有以下两种情况:

3. 买入和卖出两个限价单被挂出去,由于交易规则会按照先挂出的订单限定的价格去成交,导致先挂出去的单子获益反而更小

例如:现有一前一后,有两个限定成交价格的单子:一个想要以1.01元买入,另一个想以1.02元卖出。当市场上只有这两个单子的时候,成交价是以先发出去的单子为准的:也就是以1.01元成交。

先发出1.01元限价单的人吃亏了。如果他及时撤走他的旧订单,重新挂出符合市场价的订单,那么单子就能以1.02元的价格成交。因此很多策略在挂出去新单子之后,会同时撤掉旧单子。

上面只是举出一个例子,在实际交易中,也有可能是由市价单来吃掉先前发布的限价单。 无论如何,在市场上挂出时间太长的单子,是策略根据旧有的信息选定的价格,只会对同一个档位的其他订单有排队优势。

另一方面,对于交易活跃的商品,挂出去的订单并不会存在太久,旧订单容易被成交。因此我们不需要在同一个档位维持两个订单。

由于RL策略总是在新的时间间隔后,撤掉旧的清单并重新挂出,因此订单簿需要填充其他策略去挂出订单

市场模拟器里,除了我们的RL交易策略,还需要填充进去一些规则策略。这些规则策略(Zero-Intelligence Traders)与基于 Artificial Intelligence 不同,我们找到一篇论文对它们进行了概括 Parameterised-Response Zero-Intelligence Traders - Dave Cliff - 2022-11-22

我们整理了一些经常被使用的规则策略,主要有以下几类:

1. 主要的交易策略

2. 不同场景下使用的交易策略 Algorithm-Trading-and-DMA

AlgoTrading AlgoTable Table of Trading Algorithms, refer from Mi Blog

HJiashu commented 1 year ago

zit.py.zip

Yonv1943 commented 1 year ago

zit.py.zip

zit: Zero-Intelligence Traders