Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

💬 Adding Rule trading policy to the Market Simulator #6

Open
Yonv1943 opened this issue Jan 14, 2023 · 2 comments
Open

💬 Adding Rule trading policy to the Market Simulator #6

Yonv1943 opened this issue Jan 14, 2023 · 2 comments
Labels
enhancement New feature or request

Comments

@Yonv1943
Copy link
Collaborator

Yonv1943 commented Jan 14, 2023

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

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. 主要的交易策略

  • 基于TWAP,VWAP指标,根据ML回归模型预测交易量
  • (基于TWAP, VWAP 指标,根据DL回归模型预测交易量)
  • (基于TWAP,VWAP指标,根据预测交易量的基础上,预测未来一段时间内价格变化趋势(是否发生上涨、下跌、波动))
  • Iceberg:隐藏自己的订单,等上个订单被完全成交后,再发布新的订单
    • 有超参数根据激进程度,控制每次放出去的订单
    • 有超参数根据订单剩余数量,控制未成交订单是否撤单并重新发布更快成交的价格
  • Market Impact:计算出当前交易程度过去对市场的冲击,然后计算新发布的订单,在不同订单量和档位的订单的市场冲击,在订单执行进度和降低市场冲击 之间做 trade off

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

AlgoTrading AlgoTable
Table of Trading Algorithms, refer from Mi Blog

  • Percent of Volume (POV) 减少自己对某个订单的持有。以用户指定的市场成交量比参与交易直到母单全部成交或者时间结束,在精确地以一定量比参与市场的基础上降低对市场的冲击。
  • 特定交易时间段的策略 Auction session instructions
    • market on open (MOO): 开盘集合竞价
    • market on close (MOC): 收盘
    • limit on close (LOC): 收盘限价单,限制交易价格or只有满足一定数量才交易
  • 当市场价变动到某个条件后,触发 Order types
    • Stop Orders: 当市场价超出自己限定的止盈止损范围后,及时把自己子订单发布出去,直到母订单被执行完毕。
    • Sniper rders: 当市场价达到自己限定的范围后,就发自己的订单,去吃掉市场上的这些订单
@Yonv1943 Yonv1943 changed the title ✨ Adding Rule trading policy to the Market Simulator 💬 Adding Rule trading policy to the Market Simulator Jan 14, 2023
@HJiashu
Copy link

HJiashu commented Jan 14, 2023

zit.py.zip

@Yonv1943 Yonv1943 changed the title 💬 Adding Rule trading policy to the Market Simulator 💬 🚧 Adding Rule trading policy to the Market Simulator Jan 14, 2023
@Yonv1943 Yonv1943 changed the title 💬 🚧 Adding Rule trading policy to the Market Simulator 💬 Adding Rule trading policy to the Market Simulator Jan 14, 2023
@Yonv1943
Copy link
Collaborator Author

zit.py.zip

zit: Zero-Intelligence Traders

@YangletLiu YangletLiu added the enhancement New feature or request label Feb 19, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants