楼主: 大多数88
1918 30

[量化金融] BSE:一种极限指令簿证券交易所的最小模拟 [推广有奖]

11
能者818 在职认证  发表于 2022-6-10 18:01:53
在下面的文本中,用户将被用作与疯牛病相关的实验者、研究者、教师和学生的通用术语。BSE具有以下特点:o虽然真正的金融交易所通常会同时维护数十、数百或数千种类型的可交易项目(即不同的库存或不同的商品)的LOB,但BSE只有一个LOB,用于记录单一匿名类型的可交易项目中的限额订单。o疯牛病允许用户控制疯牛病市场中各种供需动态的规格BSE包括许多预先编码的机器人交易算法,这些算法来自过去30年来有关自动交易的文献。这允许用户探索基于LOB的CDamarket的动态,而无需编写自己的robottrading算法BSE是用广泛使用的编程语言Python 2.7精心编写的一种简单、易懂、单线程的最小模拟,因此,只有初级编程经验的学生可以很容易地尝试改变现有系统的各个方面,或者通过添加自己的机器人交易算法来扩展它。自2012年10月以来,BSEsouce代码已作为开源代码从Github代码库中提供,并已被下载多次,许多个人参与了系统编辑和扩展的上传。第3.1节更详细地描述了BSE LOB;第3.2节简要概述了目前BSE中可用的机器人贸易商阵列;第3.3节讨论了如何组织市场会议,一些机器人交易员通过LOB在疯牛病中进行互动;第3.4节通过定义进入市场的客户订单流,详细说明了如何规定市场的供应和需求。3.1.

12
nandehutu2022 在职认证  发表于 2022-6-10 18:01:56
BSE限额指令簿(LOB)BSE是金融交易所在单个可交易证券中运行限额指令簿(LOB)的最小模拟。它抽象掉或只是忽略了在真正的金融变革中可以发现的许多复杂性。特别是,交易者可以在任何时候发布新的订单,立即替换交易者之前在LOB上的任何订单:也就是说,任何onetrader在任何时候在LOB上最多只能有一个订单。此外,按照目前的配置,BSE假设交易者和交易所之间的通信延迟,并且还方便地假设,在任何一个交易者发出更改LOB的订单后,由更新触发的任何交易都会立即解决,更新的LOB会在任何其他交易者发出另一个订单之前分发给所有交易者:即,所有LOB更新都假定在零延迟时进行。在所有交易者都是人类的时代,LOB的计算机化更新执行速度比人类的反应时间快得多,因此可以安全地假设传统有线或无线电信链路上的传输延迟为零,就像疯牛病一样。然而,现在在主要市场上活跃的许多贸易商不再是人类,而是高速自动化系统,传输能力可能会有很大影响。这只是疯牛病主要简化现实世界状况的一个方面。现实世界的交易所和市场确实比疯牛病复杂得多。

13
何人来此 在职认证  发表于 2022-6-10 18:01:59
然而,BSE中包含的抽象使其成为前沿研究的真正有用的平台。BSE在Python v.2.7中编写为一个单线程流程,旨在以批处理模式运行,将数据写入文件以供后续分析,而不是通过交互式图形用户界面(GUI)动态更新显示的单步操作。基于GUI的版本正在开发中,但即使这样,用户也需要切换到批处理模式,从数百或数千个重复的市场模拟实验中生成统计上可靠的数据,如第3.3节所述。为了便于发布,并帮助新Python用户,目前所有BSE都可以放在一个源代码文件中:BSE。py是最新的主要版本,可从流行的GitHub开源存储库下载(BSE,2012)。疯牛病。py的编写很容易理解;它肯定不会为效率赢得任何奖项;可能不适合eleganceeither。大约有1000行代码。BSE创建的输出数据文件。py都是由ASCIIcomma分隔的值(即.csv类型的文件),因为这种格式可以很容易地由所有的popularspreadsheet程序(如Microsoft Excel)导入,也可以很容易地由更复杂的统计分析系统导入,如Matlab或R提供的系统。通过检查BSE代码,您可以看到Exchange可以准确地保存哪个交易员提交了哪个订单,这样当两个交易员进行交易时,簿记可以是一个,但它“发布”给交易员的LOB慎重地披露了大量数据,以匿名化交易员的身份。这正是现实世界中LOB-basedexchanges所做的。

14
能者818 在职认证  发表于 2022-6-10 18:02:02
Exchange类的publish方法使用Exchange内部数据结构中的值将市场的LOB数据构建为Python字典结构,其中包含时间、LOB的bid端和LOB的ask端,分别称为bid LOB和ask LOB。Bid和Ask LOB也是字典结构。每个LOB显示:当前最佳价格;可能的最差价格(即最低允许投标价格或最高允许报价:这些值可用于交易算法,即用于制作“存根报价”:本文件后面给出了一个示例);订单数量;然后是匿名LOB本身。匿名LOB是一种列表结构,每个投标和投标都按价格顺序排序。列表中的每个项目都是一系列项目:一个价格,以及以该价格出价或出价的股票数量。LOB上未显示当前没有出价或要价的价格。交易员发布的报价具有traderidentification(TID)代码、报价类型(bid或ask)、价格、数量和时间戳。在当前版本的BSE中,为了更加简单,数量始终为1。在此文档中,我们将报价显示为一个列表:[TID,类型,价格,数量,时间],因此,如果交易员T22在开市后10秒的时间t=1.55美元买入一股,我们将报价写为:[T22,bid,155,10010]。图2显示了一个LOB初始为空的示例,在连续的行上,LOB在ITS更新后显示,以响应该行上显示的引号。请注意,在图2中,t=21时发出的订单来自交易员T11,因此取代了T11之前在t=2时发出的订单,这就是为什么0.22美元的出价从t=21时的出价LOB中删除的原因。

15
可人4 在职认证  发表于 2022-6-10 18:02:05
在这一阶段,出价askspread(即最佳出价和最佳出价之间的差额)为0.32美元。图2:LOB数据结构响应连续订单的变化。顶行显示最初为空的LOB,作为bid侧列表(中列)和ask侧列表(右列)。连续的行显示到达的订单序列(左列)以及更新后LOB的结果状态,以表示每个订单:请参阅文本以了解更多讨论。在金融市场术语中,如果交易者想以当前最佳出价卖出,这被称为“搭便车”;如果交易者想以当前最好的askprice买入,这被称为“解约”。这两个都是“跨越传播”的例子。所以,为了继续我们的示例,让我们假设交易员T02决定取消提问。在BSE中,这是由交易者发出跨越价差的指令发出的信号,即发出价格高于当前最佳ask的出价,然后在发出交叉指令时,交易以LOB上的任何最佳价格进行。“因此,继续图2中的事件序列,如果t=25s,交易者02通过出价0.67美元提高了ask,更新后的LOB将如图3所示。图3:说明LOB的变化,以响应t=25s发出的报价,一个跨越价差的报价,从而提升了最佳ask。请注意,如图2所示,T02已经对LOB进行了较早的出价,这是两个pri中的一个ced在27日,所以当BSE在t=25秒时收到T02的新出价67时,它首先删除了之前的出价(即,新订单取代了旧订单),然后交易系统检测到出价超过了最佳ask(从交易员T03在t=18秒时发送的订单中定价为62),因此交易所也从LOB中删除了该ask。

16
何人来此 在职认证  发表于 2022-6-10 18:02:08
随后,交易所和交易者立即进行一些记账:交易所在其“磁带”(交易所订单的时间序列记录)上记录交易价格和时间;交易的两个交易对手,交易员T02和T03,各自更新他们的“记录”(他们所进行交易的本地记录):这些使用“磁带”和“记录”是金融市场交易员的常用术语。“3.2 BSE Robot TradersBSE包括各种简单的自动交易算法(或“Robot traders”)示例。这些都是自动执行系统:也就是说,它们自动执行在何处发出的订单。在投资银行业中,从事这项工作的人工称为“sales traders”:humansales trader等待客户的订单到达,然后在市场上执行该订单:也就是说,salestrader只是执行订单,而没有对客户的买卖决定给出任何建议或评论。最简单的是,客户订单将说明客户想要交易的工具(例如,哪些股票或股份),她是想买还是卖,有多少,以及她想要的价格。如果客户希望尽快完成交易,她应该指定市场订单,即现在就以市场上最好的价格(即LOB)完成交易。但是,如果客户愿意等待,那么她可以指定一个限价单、一次购买的最高价格或一次销售的最低价格,然后销售交易员的工作就是等待,直到交易完成的条件合适为止。限价指令的执行是salestrader可以赚钱的地方。

17
可人4 在职认证  发表于 2022-6-10 18:02:11
例如,假设客户发送了一份订单,说明她想以不低于10.00美元的价格出售XYZ公司的一份股票,此时XYZ的价格为9.90美元,但价格一直在稳步上涨:如果销售交易员等待一段时间,并在XYZ涨到10.50美元时执行订单,交易员可以将10.00美元退还给客户,然后再收取额外的0.50美元,利润率为5%,作为交易费用;但是,如果交易者在XYZ价格达到10美元的准确时刻执行此订单,那么客户的订单已经得到满足,但没有额外的钱,交易没有保证金,交易者无法分享。类似地,对于购买ata限价15.00美元以上的客户订单,如果交易员可以以13.00美元的价格购买来代替执行订单,则需要保留或分享2.00美元的“利润”,利润率为13%。因此,疯牛病中的简单机器人交易员都可以被视为计算机化的销售交易员:他们接受客户的限价订单,并尽最大努力在市场上以高于客户提供的限价的价格执行订单(这是他们不应低于的价格,也不应高于的价格)。客户订单发给BSE中的交易员,然后交易员将自己的报价作为出价或询价发布到市场中,试图获得比客户指定的限价更好的价格。BSE是以面向对象的Python编写的。

18
大多数88 在职认证  发表于 2022-6-10 18:02:15
ageneric Trader类指定了任何机器人都需要实现的核心方法的存根实现,例如机器人如何计算其将作为订单发送给LOB的下一个报价的价格(getorder()),如何更新任何学习变量以响应marketevents(respond()),或者执行订单时需要进行的簿记和记录更新(bookkeep())。“然后,BSE中每种特定类型的机器人交易者的定义继承了这些通用方法,并根据需要对其进行扩展。为了BSE代码的简洁,每种类型的机器人交易者都有一个最多四个字符的标识符,类似于股票代码。BSE中当前可用的机器人交易者算法有:o赠品(GVWY):一个完全愚蠢的机器人,它发布的报价与其限价相同,从而最大限度地增加了找到另一个交易员进行交易的机会,但保证在其报价产生交易结果的情况下,诺普洛菲特也会这样做。GVWY交易员不使用任何LOB数据。o零智力约束(ZIC):戈德·桑德(Gode&Sunder)的ZIC交易者的一种实施,在其1993年的开创性论文中介绍,该论文表明,当通过市场机制效率的通用衡量标准进行评估时,ZIC交易者占据的市场与人类交易者占据的可比市场一样有效Shaver(SHVR):这是一个非常简单的交易,与GVWY不同,它实际上使用LOB数据。

19
大多数88 在职认证  发表于 2022-6-10 18:02:18
如果是销售订单,SHVR算法只需查看LOB上的最佳ask,并通过报价少一便士(即0.01:BSE中最小的货币单位)来降低价格,只要价格不低于销售订单的限价。类似地,如果使用购买订单,SHVR所报的比价比当前最佳出价高出一便士,只要该价格不超过购买订单的限价狙击手(SNPR):在圣达菲研究所组织的一场著名的早期实验市场自动交易公开竞赛中,托德·卡普兰(ToddKaplan)向一个交易机器人提交了一份报告,该机器人大部分时间都在无所事事,“潜伏在后台”,然后,如果市场即将关闭,或者如果买卖价差缩小到足够小的价值,卡普兰的策略进入市场是为了“窃取交易”。这一策略,现在被称为卡普兰的狙击手,赢得了比赛:更多细节见Rust et al.(1992)。在BSE中,SHVRS的代码扩展到包括基本的狙击能力:BSE SNPR机器人读取一个系统范围的全局变量,该变量指示市场时段剩余时间的百分比,潜伏一段时间,然后随着时间的推移,迅速增加其在最佳价格下的拥有量。oZero Intelligence Plus(ZIP):ZIP交易算法(Cliff,1997)旨在解决ZIC交易员的缺点。ZIP交易者使用简单的机器学习和浅层启发式决策树来动态改变itaims在当前工作的订单上实现的利润。2001年,Das等人。

20
nandehutu2022 在职认证  发表于 2022-6-10 18:02:22
在IBM的实验报告中,他们证明ZIP和alsoIBM自己的“MGD”算法是由Gjerstad&Dikhaut(1998)首次报告的analgorithm修改而来的,可以优于人类交易员控制的实验室实验自适应积极性(AA):Vytelingum(2006)在其博士研究中对ZIP算法进行了重大扩展,添加了一个积极性变量,该变量决定了贸易商提高利润的速度,并且该变量会随着时间的推移自适应地改变,以响应市场中的事件。AA已被证明在ZIP和MGD等优先排序算法中占据主导地位(Vytelingum、Cliff和Jennings,2008)。在laterwork(De Luca&Cliff,2011)中,AA被证明不仅主导着所有其他算法交易策略,而且还主导着人类交易员。BSE GitHub存储库(BSE,2012)中提供了这些机器人交易员的Python源代码。3.3与机器人贸易商一起使用LOB BSE市场会话的核心是一个while循环,每个时间步重复一次,直到达到预先指定的时间限制。在每个循环周期中,都会发生以下情况:o通过调用BSE customer\\u orders()方法,检查是否需要将任何新的客户订单分发给任何交易员。对该方法的调用包括一个参数order\\u schedule,该参数指定如何生成客户订单的各个方面,例如新订单是随机到达还是定期到达,销售订单和购买订单之间的余额是多少,以及每个订单的价格是如何生成的。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2026-1-4 11:08