摩根大通说要解决人工智能在算法中,如何进行电子交易等难题

人工智能

636人已加入

描述

J.P. Morgan(摩根大通)一直是银行金融行业中积极应用大数据和人工智能技术的典范和先行者。他们的 NeurIPS 2018 论文《数据驱动的学习在电子交易中的特质和难题(Idiosyncrasies and challenges of data driven learning in electronic trading)》探讨了算法交易中机器学习等技术的应用情况,也分享了摩根大通的最新经验。机器之心对该论文进行了全文编译,对该论文的介绍也可参阅机器之能的文章《如何在算法交易中使用 AI?摩根大通发布新版指南》。

1 引言

由养老基金和其它资产管理机构持有的金融工具投资组合会经历周期性的再平衡,有时候这个过程会很剧烈。代理电子交易(agency electronic trading)是大银行和专业经纪公司等经纪商所提供的一种服务,可帮助提升这些交易的效率。高效的投资组合转换能帮助客户节省很多东西,进而又能助益这些投资组合的最终受益人——教师、医生、消防员、政府公务员、工人、对冲基金运营人等。

资产交易的全球化、超快速信息技术的蓬勃以及快如闪电的通信技术已让人类无力从事例行的低层决策过程。如今,股票和电子期货合约的大多数微观交易决策都是由算法制定的:它们定义在何处以什么价格交易多少数量。图 1 给出了这种算法的一个示例。

摩根大通

根据自己的总体投资量和执行目标,客户通常会向执行经纪商下达带有特定限制条件和偏好的指令。举几个例子,客户可能希望保证他们的投资组合转换中的货币中立性,这样卖出的数量就大致等于买入的数量。客户也可能表达他们的风险偏好并指示被执行的证券篮子以一种受控的方式暴露给特定的企业、国家或行业。对于单个订单执行,客户可能希望控制该订单执行影响市场价格的方式(控制市场影响),或控制订单受市场波动性的影响方式(控制风险),或指定一种紧急程度以在市场影响和风险之间取得最优的平衡。

为了满足这些多方面的且有时候互相冲突的目标,电子交易算法会运行在多种粒度层级上。市场分析和量化模型可以为每个层级的决策提供信息。传统上,电子交易算法是科学的量化模型的一种混合体,能从量化角度表达世界的运作方式以及规则和启发性知识,这些来自于人类交易员和算法用户的实际经验、观察和偏好。传统交易算法以及伴随它的模型通常会被封装成数以万计行数的代码,这些代码是人工编写的,难以维护和修改。为了应对不同客户的目标以及金融市场的变化,人工编写的算法往往会遭遇“特征蔓延(feature creep)”问题,并最终会累积很多用于处理特殊情况的逻辑层、参数和修改调整。

金融服务业是一个受到严格监管的行业。在某些地区,参与者会面临非常特定的要求,比如 ESMA(欧洲证券和市场管理局,2014)有“最优执行(best execution)”的概念。在符合这些要求的同时实现算法交易的效率是很有难度的:不断变化的市场条件和市场结构、监管限制以及客户的多种目标和偏好让设计开发电子交易算法的任务步履维艰。使用以数据为中心的方法、神经处理和机器学习带来了一个很有吸引力的机会,即有可能通过这些方法简化电子交易业务中应用的开发并提升其效率。

在这篇短论文中,我们试图搭建学术界和金融业的已有方法之间的桥梁。我们给出了电子交易领域出现的实际难题和特质,我们希望这能为学术研究者带来一些灵感。

2 量化金融领域中三大类以数据为中心的应用

在这一章节,我们首先会介绍 Peter Norvig 在 Norvig [2011] 中提出的论点并会做进一步的延展。下面的三大类方法与该领域连续三代研究者浪潮紧密相关。

2.1 数据建模方法

这类方法的特点是相信自然(以及金融市场)可被描述成一个黑箱(black box),其中有实际生成观察数据的相对简单的模型。量化金融的任务是为这个数据生成过程找到一种合理的函数近似,即一种量化模型,并从数据中提取出它的参数。然后,该模型的输出会被送入量化决策过程。市场和市场参与者的行为的复杂性是数据建模方法所面临的主要难题:简单模型不一定能得到环境的所有本质属性。可以认为简单模型往往会让人感到错误的确定性,并由此容易造成惨重的损失。

2.2 机器学习方法

对于自然和金融市场是否简单的问题,机器学习方法走向了一条不可知论的道路。我们确实有很好的理由认为它们并不简单:从实践中看,金融世界更像是达尔文式的,而非牛顿式的;也就是说在不断演进,我们观察到的包括电子市场中交易在内的过程最好被描述为涌现出的行为,而不是生成数据的机器。机器学习方法会使用复杂且有时含混不清的函数来建模这些观察。研究者并不会宣称这些函数能揭示其基本过程的本质。与在数据建模方法中类似,机器学习模型建立后,其输出会被送入决策过程。复杂的模型也容易出现故障:模型故障的风险会随模型复杂度的增长而增大。

2.3 算法决策方法

我们在这里关注的重点是决策,而不是建模。我们绕过学习“世界如何运作”的阶段,而是直接训练电子经纪人/智能体(agent)来分辨好的决策和坏的决策。这种方法的难题是我们是否有能力理解和解释算法经纪人的决策、理解它的策略以及确保它能在所有(包括假设的)环境中都能有合理的行为。在算法决策方法中,智能体会学习到特定的动作是差的,因为它们会导致出现负面结果(固有差错)。但我们仍然必须注入值和规则以及约束,以让智能体不会采取我们认为禁止的行为(非法行为),毕竟智能体无法从其环境和历史中学到这些。

在这篇论文中,我们将展示一种强化学习的实际应用中智能体的约束和奖励之间的相互作用。我们还将概述特定的难题以及我们使用计算资源解决它们的方法,还将介绍多个行业与学术界中其它团队取得的许多成果。

3 从低维到高维再回到低维

3.1 高层面决策

从非常高层面的角度看,很显然每个订单都有一个最优的执行速率或执行时间表,也就是说,订单在市场中以怎样的速度执行或执行的持续时间如何。

首先,几乎任何规模的订单都可以即时执行——只要客户不在意执行成本并愿意付费。在正常情况下,这种执行方式无疑是不合理的、低效的而且有可能成本极其高昂。这样的执行有很高的可能性会影响市场价格。

另一方面,如果父订单(parent order)通过其子订单(child order)以无限慢的速度执行,则其几乎不会给市场带来压力。这样的执行也是不合理的,因为没有任何客户不在意不受干扰的市场价格与该订单相悖的可能性(买单时上涨,卖单时下跌)。执行时间越长,市场价格违背客户的最佳利益的可能性就会越高,也就是说会有更高的风险。

通过简单考虑这两种极端情况,很容易就能看出必然存在一个最优的执行速度或最优的执行时间安排。我们还能轻松看出客户的偏好和容忍度也会带来影响:有效速度是由客户对市场价格的容忍度和对风险的偏好决定的。这种高层面决策案例的不确定性来自高层面的分析和量化模型。

这也表明了一个我们常常会在电子交易以及其它量化金融领域发现和重新发现的重要事实:没有解决方案,只有权衡取舍。

3.2 低层面决策

一旦找到了大致的最优速度或时间表,下一级的决策就是实现这个时间表。为了按照时间表行事,经纪人通常会尝试与市场的其它部分融合到一起:特立独行对自己有害,因为这会揭示出该经纪人的意图。经纪人会在规模和价格上模仿其他参与者的订单来创建市场订单。

正是在这里,我们发现了维度爆炸的问题。

描述限价订单簿(limit order book)的市场状态是一种维度可变且维度很高的问题。每个价格层级都有一些来自不同市场参与者的不同规模的订单队列。这些队列可能任意长,也可能为空。在任意特定时间,最重要的价格层级是对应当前主要买价和卖价的层级。但是,在更深的层级以及投机性的距离很远的层级也会存在显著的订单量。随着交易发生以及订单的接收和撤销,订单簿一直处于变化之中。观察中的任何市场状态都有可能演化成其它市场状态,而这些市场状态的数量近乎无限多。

在这样的环境中,即使只考虑订单时间、价格、规模和持续时间的最基本层级,可行决策集也会非常庞大和密集。经纪人必须决定以怎样的价格和数量下单,而且如有需要,还会以不同的价格下多个订单或者在我们已有订单的地方以不同价格增加额外下单。如果一个订单的价格不是市场价格,那么该订单会一直留在订单簿中,直到市场价格触及订单价格(如果能触及到的话)。其动作空间必须是动态且复杂的,因为为了改善价格,按深度下单是必需的;而且订单会根据订单簿中的价格-时间优先级逐渐履行。根据可行的执行时机,最终的情况可能很复杂——可能存在多个合适的交易时机和订单类型。

一局国际象棋大约要下 40 步。一局围棋大约是 200 步。如果一个中频电子交易算法每秒钟重新考虑一次其选择,那么就相当于每小时 3600 步。对于国际象棋或围棋,每一步都是操控一个符合条件的棋子,并且要操作的也只有棋子。

对于电子交易,每个动作都是操作子订单的集合:它由具有不同特征(价格、规模、订单类型等)的多个并发订单构成。比如,一个动作可能会同时提交一个被动买单和一个攻击性买单。其中的被动子订单会以指定的价格留存在订单簿中,由此能为其他市场参与者提供流动性。提供流动性可能最终会在交易发生时通过获得价差(spread)来获利:相对于在同一交易中获取流动性的参与者,能以更好的价格完成交易。而攻击性子订单可用于取得参与一次价格变动的机会。两者可构成一个动作。最终得到的动作空间会非常大,而且会随组合的特征数量而指数增长。

我们还不完全清楚如何定义每个动作的有效性。有人认为,对于电子交易智能体,决策的有效性和最优性可体现在检测和把握机会(“好”交易)以及避开陷阱(“坏”交易)上。这种细粒度的定义的问题不仅在于很多机会的持续时间很短,而且可能都只存在微秒级的尺度上。更重要的是,事实上只有在交易执行(或避开)之后,我们才能确定该交易究竟是好是坏。

这样的后果是局部最优性不一定能转化成全局最优性:现在被认为是糟糕的交易到那天结束时可能会被证明是一个出色的交易。在这种情况下,我们感兴趣的既有探索和重新定义“什么是机会”,而且还有定义“如何采取行动”。我们将电子交易的这一独特方面称为“非局部最优性(non-local optimality)”。

对于电子交易智能体而言,还有一个可能的目标(但并不一定是特有的或最好的),即要能与市场的其他部分融合到一起。如果需要这一目标,可以使用一个奖励函数来实现相对于交易量加权的平均价格的最优执行价格。这一策略必须找到一个平衡,以兼顾交易过快和价格变动造成的市场影响以及因交易过慢而遭受外部因素影响价格的市场风险。这一问题的一大重要部分是以某种方式整合状态信息和动作空间,使之适用于拟合模型以及使用机器学习方法。这涉及到归总市场状态,其中可能包括巨大的可变且常变的维度和订单状态,而且父订单和子订单都会被纳入模型输入中。然后从可变数量的动作中选出一个作为响应。

3.3 之前的工作

这一领域之前的研究工作覆盖了很广的范围,但基本上都针对的是这一问题的单个方面。某些研究包括在小维度环境中为强化学习进行预先设置,另一些则考虑以一种简明且固定维度的方式来表征数据。Akbarzadeh et al. [2018] 则研究了通过执行在线学习来驱动算法。但是,因为只能下市场订单,其性能很受限。

Nevmyvaka et al. [2006] 定义了一整个强化学习问题,但受到了动作空间的严格限制——只承认单个订单,新订单会取消掉旧订单。Zhang et al. [2018] 将限价订单簿总结成了 40 维的向量,其中包含来自价差任一侧的 10 个价格层级的价格和交易量信息。这些信息基于前一天的交易进行了归一化,并被用于预测市场波动。Doering et al. [2017] 更进一步,设计了 4 个包含订单簿、交易、新订单和订单取消情况的矩阵,代价是维度增大了 4 倍且要使用非常稀疏的数据。

未来的研究方向主要面向基于强化学习方法的交易智能体的继续研究和开发。这方面的核心是有效的降维方法,以便整合尽可能多的有关当前市场和已有订单状态的信息,这两者都需要对高度可变的维度数据进行固定维度的表征。现有的方法是通过假设存在固定数量的特定价格的未完成子订单来简化订单管理流程;相比于人类交易员可采用的动作,这类方法有太大的局限性。

3.4 简要描述我们的方法

我们现在正在运行我们的基于强化学习的限价下单引擎。我们成功使用一个有限定的动作空间训练了一个策略。为了解决前面描述的问题,我们使用了利用领域知识的分层学习和多智能体训练。我们在多个局部短期目标上训练了局部策略(比如如何提交攻击性订单与如何提交被动订单),这些局部短期目标在奖励、步骤和时间范围特征上各有不同。然后我们将这些局部策略组合起来,然后更长期的策略是学习如何组合这些局部策略。

我们还相信逆向强化学习很有发展潜力:利用人类和算法策略在金融市场上的行为的大规模历史来构建局部奖励是一个很活跃的研究领域。

4 在开发电子交易 AI 方面超越策略学习

4.1 策略学习算法

强化学习的核心目标是最大化总和奖励,这类似于真实的商业目标。根据该目标优化一个参数化动作策略的策略学习算法一直都是强化学习研究领域内一个研究焦点。近期已有一些研究将著名的策略学习算法用到了电子交易业务上 [Akbarzadeh et al., 2018] [Nevmyvaka et al., 2006]。我们将介绍除了策略学习算法的能力之外的强化学习的其它方面。

4.2 分层决策

AI 在电子交易中的真实应用通常都有较长的时间范围。客户订单需要很多分钟甚至几个小时(有时需要数天)才能成交,而智能体需要每几秒一次甚至更快速地做出决策。这种时间范围问题极大地限制了智能体的采样频率,使其远低于完全整合所有可用的市场动态信息所需的频率。

此外,智能体做决策的时间并不均匀。它做决策不根据时间,而是响应自己的动作的影响以及环境的显著变化。

因此,强化学习中的时间抽象就变成了应对长时间范围和时间不均匀性的关键问题。在这里将其比作是跳帧可能并不合适——即只每隔一些时间步骤做一次决策。Semi-MDP(sMDP/半马尔可夫决策过程)一直以来都是用于发现强化学习智能体的时间抽象行为的突出场景 Sutton et al., 1999]。但是,针对何时采取行动以及做何种决定训练单个策略仍然具有很低的样本效率。将 sMDP 与分层强化学习(HRL)结合到一起是一种可能的解决方案。在 HRL 方法中,决策模型由具有不同决策频率(从元策略到原始策略)的策略层构成。

我们的电子交易智能体构建方案主要基于 Kulkarni 对基于规则的深度 HRL 的解释 [Kulkarni et al., 2016],因为我们能够制定出合理的规则来构建基于领域经验的元策略。我们也注意到了端到端(无规则)分层强化学习的进展,其中元策略的时间抽象属性源自原始策略的行为或目标的聚类 [Bacon et al., 2017][Fox et al., 2017][Vezhnevets et al., 2017]。

但是,AI 智能体使用时间抽象的能力方面的核心问题仍未得到解决:智能体在总体目标的背景中对子目标和内在奖励的解释、时间抽象在收敛时的崩溃、在需要重度探索的环境中的样本效率和深度的层次结构。

4.3 算法、监管和计算难题

电子交易智能体运行在复杂的、不断演进且快速变化的环境中。复杂度得到提升的智能体能得到更好的决策和效果,这是个加分项,但这也可能影响智能体的计算性能,并最终让其无法实际部署。

另一个限制经纪商电子交易智能体的复杂度的约束是对理解、预测和解释其决策的需求——从最高层面的决策到最低层面的决策都需要。

某些地区要求交易算法的行为是可预测的、可控制的和可解释的:这些智能体必须不能扰乱所谓的“有序的市场条件”,智能体的运营者必须要能解释其智能体如何能为其客户得到最佳的可能结果。

分层方法在这里很有帮助:人们观察到智能体的决策可以被分成不同的组别,这些组别所需的采样频率和粒度都不相同。我们在前面已经提到,分层式架构和 HRL 让我们有可能分隔智能体模块之间的职责。我们仍然可以在它们各自之中使用神经处理和强化学习,同时我们也会有能力管理智能体的整体复杂度,我们也能更好地理解智能体的行为以及如此行为的原因。

5 分层强化学习方案

5.1 在需要重度模拟的学习任务上对元策略进行基于搜索的优化

训练强化学习智能体需要很多情节展开,而由于智能体与其环境之间的反馈循环,其中每一段情节展开都不能并行。基于梯度的智能体训练会遇到大量经历对(experience pairs)占满内存的情况,而这些经历对往往很冗余且充满噪声。除非学习算法有强大的离策略,否则优良的行为会在训练过程中被遗忘,同时涉及到一个变动目标的梯度优化又很难确保成功。因为这个原因,虽然近期在策略学习算法方面出现了一些进展,但使用参数搜索算法实现无梯度优化仍然是一个实用的选择。

通过完全控制情节效用(episodic utility),应用超参数优化技术来训练参数化的智能体,我们已经赢得了显著的时间效率 [Osborne et al., 2009][Bergstra et al., 2011],这也提升了整体的执行表现,同时无需应对奖励的设计问题。这里我们也强调一下参数搜索算法的学习效率。

计算的局限性限制了对全序列优化方法的使用。我们缓解这一问题的方法是探索在每次试验中使用具有更少采样情节的确定性更低的优化,但以并行的方式运行它。无关路径的早停是在两者之间的很好妥协。但是,我们希望使用一种贝叶斯的早停方法继续这方面的开发。

5.2 用于低层面决策过程的可扩展深度强化学习

前面我们提到了一些我们在开发电子交易智能体方面所面临的难题:环境是部分可观察的、细粒度的市场动态、智能体的观察及其整体业务目标之间存在可能的时间范围的不可通约性(incommensurability)、巨大的状态空间、有延迟且可能错开的奖励。

和每个市场参与者一样,我们的智能体也会改变它们运作其中的环境。我们在一个结构化的模拟环境中训练了我们的智能体,该环境试图重现真实市场的某些属性,但目前还无法重现其所有属性。尤其需要指出的是,我们想要构建的是一个能够模拟真实市场对智能体行为的响应的环境。

初步证明,这需要一种支持可扩展模拟和可扩展强化学习算法的架构。Gorila 架构 [Nair et al., 2015] 表明 DQN 算法 [Mnih et al., 2013] 可以大规模部署,实现更优的结果。对于 A3C [Mnih et al., 2016],IMPALA 算法 [Espeholt et al., 2018] 最近也取得了相似的成绩。一般而言,人们有兴趣研究其它强化学习算法方案能否以及如何得到扩展以利用大规模集群计算,从而得到更好的执行策略。对于想要利用可用的计算资源针对自己的用例使用特定算法的从业者而言,基于证据的引导会非常有用。

开源强化学习框架的出现是一个激动人心的进展,其中包括 OpenAI baselines [Dhariwal et al., 2017]、ELF [Tian et al., 2017]、Horizon [Gauci et al., 2018]、dopamine [Bellemare et al., 2018]、 TRFL [Deepmind, 2018] 和 Ray RLlib [Moritz et al., 2017]。这些框架和工具让更多人都能用上当前最先进的强化学习算法。但是,前面提到的强化学习框架都还很早期,远不够成熟,还没有达到 Google TensorFlow、PyTorch 或 Caffe 等常用的深度学习库那样的“生产可用”的程度。如果围绕强化学习框架有类似深度学习领域那样的强大生态系统和社区,那将会极大地促进强化学习方法的更广泛应用。

我们发现 Ray RLlib 非常有用。这是基于分布式强化学习思想从头构建起来的。它基于一种坚实的基础设施,其利用了任务并行以及行为者(actor)模型 [Agha and Hewitt, 1987] 编程模式,这种编程范式已被证明在设计高效的大规模分布式计算系统方面非常成功 [Armstrong, 2010]。

强化学习实验可能非常耗时,而且往往需要完成一系列子实验,有时候还会因错误而中断。Ray 的设计 [Moritz et al., 2017] 还解决了容错问题。一般来说,强化学习实验必需一些多功能和高效的工具来提升生产力,比如易用且低开销的监控和分析强化学习训练的工具。

从计算性能的角度看,强化学习算法的另一大难题是基于可用的计算资源为任务选择合适的实现方式,从而确保算法有最快的全局收敛速度。以最优的方式利用多核 CPU、GPU 和 TPU 等资源是很困难的。Ray 通过其资源感知型调度器而部分地解决了这一问题。它允许用户以代码注释方式声明资源需求,比如 CPU、GPU 或自定义资源的数量。这能在高层面上调整任务的计算性能,而无需用户理解或干预任务调度。

6 经典强化学习理论的不足和结果的不确定性

大多数标准的强化学习应用都假设智能体的奖励是确定性的。但与这个假设相反,在电子交易智能体的运作环境中,结果通常具有内在的不确定性。人们倾向于将这种不确定性声明为“噪声”,来自一个隐含的数据生成过程,这确实也是默认的近似方法。在数据驱动机器学习方法和算法方法中,结果的不确定性不是“噪声”,这就是它的工作方式。我们不能简单地就将市场的不确定性排除在外,因为它有重要的用途。

正如我们在本论文其它章节谈到的,电子交易的结果的值是多维度的,且这些维度往往是不可通约的。在监管建议和限制以及客户的指示面前,我们还需要一种稳健的方法来整合软性限制和禁止行为的层次结构。

结果的固有不确定性和奖励的丰富多维度结构给标准强化学习理论带来了挑战;在标准强化学习理论中,智能体学习能得到平均更好的标量值结果的动作。在金融领域,我们也很重视总体结果,但我们还重视结果分布的细节。我们需要一种能将这两者结合起来的方法。

已有研究者提出了一种对标准强化学习方法的轻度扩展:整合了用于评估多维度和不确定结果的价值的效用函数。和在投资组合构建等其它金融应用中一样,智能体会在一种确定性等效的意义上学习优良的动作:不确定的结果和它们聚合的总体结果通过取结果的效用函数在它们的未来分布上的期望来进行排序。

考虑一个例子:一个有限过程(为了让我们忽略折扣因子)有一个标量的不确定的奖励,而该过程的全局奖励是局部奖励的总和。这个案例反映了一种经典的电子交易设置:为了在交易资产的每股基础上得到最好的可能结果。奖励的整体总和仍然是不确定的。这种标准强化学习公式的确定性等效(CE)的修正如下(参见 Bühler et al. [2018] 和 Mihatsch and Neuneier [2002]):

其中 U 和是效用函数及其倒数,E 表示期望,CE 表示确定性等效:是在状态 s_i 的策略 π 动作,是其不确定的奖励。

相比于传统的强化学习,效用函数和确定性等效的动作排序的使用能带来更加丰富的智能体结构:在 CERL 中,智能体需要一种基于其风险偏好和限制(但很初级)的特性,还需要由其整体业务目标确定的目标。如果客户反对风险,则一个动作的增大的结果不确定性会降低其确定性等效的奖励。这带来的结果是折扣因子 γ 的出现。经典强化学习通常将其用作是无限或近乎无限过程的一个外部参数。在 CERL 中,它则是自然衍生出来的,是在我们展望未来时扩大结果分布(等效于风险增大)所得到的结果。

7 总结

仍有很多问题有待解决。我们希望它们能为难题的解决提供一些新角度:

是否存在一种用于考虑多维度奖励的严格方法?

如何将不确定持续时间的概念整合进 MDP 范式中?

如何解决结果/奖励不确定的问题?

如何为在市场中运作的智能体创建接近真实的训练环境?一种可能的解决方案是开发全规模的人工环境,能够根据多个异构智能体的基于规则的行为,接近真实地将市场重现为涌现出的现象。模拟的多智能体市场既有实用价值,也有学术价值。

如何严格地将有冲突的/互补的局部和全局奖励结合到一起?

除了使用领域知识来分割不同时间尺度的过程和使用分层训练,是否有设计在多个时间尺度运作的智能体的严格方法?

可扩展性:在电子交易中,在相似但最终不同的环境中训练许多智能体在计算上似乎是高效的,而不是训练一个用于处理所有环境的智能体。是否有一种方法能让智能体针对不同的环境进行训练,以让它们从彼此的技能中受益?除了测试它们的功能之外,是否有办法知晓两个训练后的智能体在本质上是否相似?

不管是在经典强化学习中,还是在 CERL 中,都没有以贝尔曼方程为基础,并且最终似乎仅适用于全局奖励是局部奖励的连续聚合的过程。可以开发出一种整合了上述特征的更通用的序列决策方法吗?

是否存在一种平衡的且系统性的方法,其一方面允许强化学习训练的智能体解决越来越复杂的问题,另一方面又仍能保持我们理解它们的行为以及解释它们的动作的能力?

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分