人工智能即将来临,我们不惧怕它。 我建议通过在证券交易所赚白菜来迷惑他。 对于初学者,我们将看到。
条款
代理是一个程序,在一个交易所中具有各种货币的帐户,其工作应导致其总价值增加。
代理资产-具有可用资金的帐户清单A = [A1,A2,..]其中A1,A2,...以相应货币表示的金额。
资产价值。 我们必须对资产进行通用的衡量,以便我们能够衡量资产。 认为这是$。 $(帐户)是资产的一部分。 我们还假设我们具有算法功能,可以通过$估算列表中每个帐户的价值。
代理可以关闭(仅依靠自己的资产)或打开(借用)。 为了简单起见,我们假设我们有一个封闭的。
每个业务代表操作都有其自己的值So(Ax-> Ay,Sum),我们将用度量$和时间To(Ax-> Ay)进行测量。
座席环境-具有类似或不同工作算法的其他座席或人员,以及当时有效的任何信息。
代理策略。 这是一种算法,用于接收有关帐户状态,交易所活动历史,其活动,当前交易所活动(眼镜)的信息,并作为响应执行或不执行一组操作。
策略只能基于交易所的当前活动(原始),
考虑来自其他交易所(中等)的信息,考虑活动的历史记录和检测到的统计模式(深度)。 悲观或乐观-对手术风险的评估有所不同。 部分或完整。 完整的策略涵盖代理功能的所有方面。 部分可以组合成一个完整的部分。
策略的最优性及其选择。 通常,一个代理有几种策略,它们之间的切换是随着环境中某些稳定(超过特定时间间隔)的变化而发生的。
代理惯性-代理忽略环境变化的时间。 或确定其抗环境干扰能力的策略。 惰性更强的代理人可能输赢,而不会屈服于环境的“恐慌”。
假设我们有三套不完整的策略:
St = [1,2,3,4] St = [5,6,7,8] St = [9,10,11,12]
这些策略的组合提供了64种独特的代理行为,这些行为
结果证明对于[O1,O2,O3]环境是正确的(有用),对于[O4,O5,O6]环境是无效的,或者对于[O7,..]有害的
分析各种环境中策略的工作及其组合
我们可以建立一种元策略,根据当前检测到的环境来切换代理的行为。
代理平台(以下简称平台,MetaBot)是一种特定的代理,可在连接的交换机上创建,协调,删除代理。 像代理一样,它在体系结构上由一组控制策略组成,这些策略可以组合在一起以改善整个系统的整体功能。 该平台存储所有操作的历史记录以及其他有用数据,这些数据使它的构成策略可以有效地(以美元为单位)管理下属代理,分析常规统计模式以及策略组合对特定环境中成功的影响的历史记录。 该平台由元策略驱动,其参数会随着时间的推移而发展以最大化利润。
交换代理程序的环境由其他代理程序和当前信息组成。 代理的环境变化分为最佳,正常,关键,灾难性等。 取决于操作的成功程度。 通知平台其状态和操作后,只要平台对其帐户的状态和动态“满意”,代理便会采取行动,否则它将关闭平台。 该平台以不同的方式评估总资产,并可以决定将资产从一个代理转移到另一个代理,该代理可以在一个交易所或不同交易所进行操作。 该平台的任务是使所有代理商拥有的总资产最大化。
考虑用于处理订单簿交换的代理策略(在Scala上)的简单实现的内容:
我们引入了将在系统运行期间发育的基因组。
StrategyParams是bot策略基因组,其中包含许多可以参数化该策略的基因:
case class StrategyParams(low: IntGene, middle: IntGene, high: IntGene, intense: DoubleGene, threshold: DoubleGene, delay: IntGene)
其中,低,中,高是分钟的平均资产值周期。
它们被用来预测价值的变动。
强烈意味着机器人活动或侵略性。 借助较大的参数值,该机器人可以进行大量交易,并且(或)非常乐观地评估预测。
阈值是指机器人对预测的最低置信度,它会提示机器人完成操作。 延迟-惯性,两次激活之间的最短时间。
据推测,在StrategyParams参数所描述的任何时期都有一种最佳的漫游器策略,可以从资产汇率的历史记录中计算得出。 可以使用进化基因组选择算法来计算其参数。 计算形式为:
def evalBots(trs: Seq[TimeRate]) = EvolutionFactory( candidate = defaultBotStrategyParams, populationConfig = PopulationConfig(500), evolutionConfig = EvolutionConfig(100), errorRate = (c: StrategyParams) => {errorBot(c, trs)} ).
trs-订单历史记录,
PopulationConfig-多少机器人同时竞争生存,evolutionConfig-生活和繁殖需要进行多少次迭代。 在迭代过程中,资产较少的机器人不太可能与其他机器人产生后代,而最终,这些机器人具有足够大的种群和退化进化的数量,应该使我们成为理想的机器人。
在一定时期(历史)内接收并计算了此类机器人后,您需要以某种方式将其用于将来的有效交易。 Platform-Metabot及其MetaStrategy将解决此问题。
考虑一个简单的平台策略实现的内容:
MetaStrategy(rateSensitivity: DoubleGene, volumeSensitivity: DoubleGene, profitSensitivity: DoubleGene, criticalForce: DoubleGene, volumesSize: IntGene, delaySwitching: IntGene)
其中rateSensitivity,volumeSensitivity,profitSensitivity描述平台行为对资产价格,交易量和预期经营利润减少参数的变化有多敏感。
CriticalForce根据对以上参数的综合评估设置阈值,超过该阈值即表示当前的Bot策略(而非平台)效率低下,并计算出其(当前Bot策略)更成功的版本。
执行片段:
val force = rateForce * volumeForce * profitForce if (force >= strategy.criticalForce.value.get) changeBot(force / strategy.criticalForce.value.get, extremeBot, tr)
在使用MetaStrategy参数描述了平台策略算法之后,我们可以开始一个类似的演进过程,以增长高效平台Metabot-bot的数量,其中最有效的平台将成为交易系统的基础。
为了测试这些想法的有效性,创建了一个原型加密货币交易系统,可以用作测试平台。 垃圾填埋场需要课程历程及其期间平均值的数据,这些数据存储在Influx中,由垃圾填埋场本身通过开放的bitfinex交换API提取而生成。 请参阅对象HistoryExtractor。
测试结果

在运行期间,我们设法为代理商找到了一些简单的策略,这些代理商在不使用Metabot管理器的情况下,经过2.5年的测试历史,每年可获得14%的利润。 尽管令人印象深刻,但它并不能保证将来会有同样的利益。 系统的实时行为未经测试。 使用为短期(一个月或更短的时间)设计的Metabot策略并没有带来利润,但是对于较长时期而言,有效的元策略很有可能。 由于巨大的计算复杂度(平均PC不间断运行数月),因此它们的计算很困难。 混乱的加密货币汇率只能在很小的程度上进行调整,但是...使用这种方法来交易其他资产(其波动性不是那么混乱并且具有季节性)可以提供更好的结果。
多边形源可在此处获得 。