主页 > 以太坊imtoken > 我建立了一个机器学习交易系统,我的 5,000 美元投资变成了 200,000 美元

我建立了一个机器学习交易系统,我的 5,000 美元投资变成了 200,000 美元

以太坊imtoken 2023-01-18 15:35:46

在开始文章之前,还是要提醒开发者:投资有风险,交易需谨慎。 通常,大多数人认为市场是不可预测的,并且有很多学术研究为此提供数据支持,但这种观点过于武断。 毕竟,还是有很多专业的交易员,可以根据自己的一套规则,给投资者一些专业的知识。 观点。

在构建算法之前,我们需要了解市场交易的参与者:

在依赖数据分析的人看来,散户和机构投资者的行为是比较随机的。 这种类型的市场活动是不可预测的。 这种随机活动会推高市场价格。 如果你足够幸运,你可以分享一份汤。 但有时你会站在错误的一边。 因此,从长远来看,最终的利润可能为零。

我们应该对专业交易员和算法更感兴趣。 两者本质上是一样的,都是根据一套规则做出决定。 如果可以知道具体规则,则可以设计一个系统来自动执行这些规则。 例如,如果一个算法可以计算出它在市场显示 MACD(一种广泛使用的技术分析指标)信号时买入,它可以稍微修改参数以在该指标出现之前买入并推高价格。 以后再卖。 当然,这只是一个非常简单的例子。 大多数算法都很复杂,比如基于机器学习的模型,也忽略了市场流动性、交易延迟和交易费用等问题。 关键是我们必须知道规则和算法才能设计系统。

时间尺度是一个重要因素。 与实时(秒级)数据相比,每日交易数据更具随机性。 因为时间尺度越大,市场活跃度越受政治新闻、法律裁决、公众情绪、社会炒作、商业决策等因素的影响。 贸易公司的大宗交易也会产生重大影响,但并不经常发生。 这些都不是算法可利用的,我们也无法对其进行建模。 如果将营销活动定位在分钟级或秒级,就可以发现一些规律。 这些模式可以被算法利用usdt哪个平台的交易量大,我们的目标是利用这些模式来获利。

系统主要特点

买卖发生在两个或多个市场参与者之间,其中有人赚钱,有人赔钱。 大家都想赚钱,那么你的技术优势是什么? 在交易领域,我们称这种竞争优势为edge,可能来自这几个方面:

人们常犯的一个错误是过度依赖模特,因为它看起来太“性感”了。 许多开发者尝试通过深度学习或增强的深度学习算法来构建交易系统,但大多数都失败了。 他们认为自己的优势在于模式,而忽略了其他因素。 他们没有优化服务器布局,没有使用开源软件下单和收集数据,也没有使用非常容易获得的公共数据集来训练模型。 或许,这能为他们带来一点优势,但不足以弥补其他方面的失误。

我也使用一些机器学习模型,但最大的优势来自于花费大量资金构建基础设施。 几乎所有的开源交易软件都不够好,它们可能适合学习目的,但不适用于现实生活。 我一开始也是用的开源组件,但经过多次迭代,我自己开发组件,包括实时数据采集、清洗、回测和模拟、订单管理和规范化、监控和实时交易。

选择市场

市场是在交易平台上交易的资产。 例如,BTC/USDT 在 Binance 上交易,BTC/USD 在 Coinbase 上交易。 现在有数百个不同的数字货币交易平台,每个平台可以交易数十种资产。 我们应该如何选择? 理想的市场应该具有高流动性、低交易费用、快速、安全和可靠。

一般而言,流动性是指在不显着影响市场价格的情况下可以交易的数量。 流动性好的市场点差低,滑点小,交易成本低,可以进行大额交易。 交易量是衡量流动性的指标。 交易量大的市场通常(但不一定)具有高流动性。 不幸的是,即使 cer.live 正在尝试,也没有公共评估系统可以告诉我们哪个交易平台是可靠的。 搜索该站点是无用的,因为交易所会向站点支付费用以提高自己的排名。

评估市场的唯一可靠方法是自己收集和分析数据。 交易是真的还是假的? 点差和滑点的分布是怎样的? 一些交易平台公然通过算法伪造交易数据,而另一些交易平台则使用更复杂的技术使他们的数据看起来更真实。

交易费用算法的具体实现

为了盈利,我们的交易利润必须高于所有交易成本的总和。 对于大多数人来说,交易费用占了大头,而滑点往往被忽略,但它实际上很重要。 假设我们买入 qty BTC 并在稍后的某个时间点卖出,净交易成本为:

trade_cost(qty) = (2 * qty * exchange_fee) + (qty * spread) + slippage_buy(qty) + slippage_sell(qty)

(2 * qty * exchange_fee) 是交易费用。 假设手续费为0.01%,一买一卖需要支付两次。

(qty * spread) 是买卖价差,我们以买入价买入,以卖出价卖出。 即使市场完全不动,我们仍会以略高于要价的价格买入。 点差会随着时间而变化,因此需要将其纳入交易决策中。 如果我们在 Binace 上交易 BTC/USDT,每日价差分布可能如下所示。 大部分时间低于 1 美元,在不可协商的时间可以达到 5 美元以上。

usdt交易是骗局么_usdt哪个平台的交易量大_大数据交易买卖平台

slippage_buy(qty) 和 slippage_sell(qty) 是市场流动性不足导致的价格滑点。 交易量越大,我们要付出的滑点成本就越高。 BTC/USDT滑点在币安上的分布如下图所示。 每行对应一个特定的交易大小,范围从 0.1 到 2.0 BTC,x 轴代表成本占支付价格的百分比。 正如我们从图表中看到的那样,在流动性较低时进行交易意味着滑点成本很容易超过交易费用和点差。

usdt交易是骗局么_usdt哪个平台的交易量大_大数据交易买卖平台

这些成本有多重要? 这取决于具体情况。 如果我们每天只交易一次,多关注市场的大波动,那么大部分成本都可以忽略不计。 如果价格能波动10%,那么0.5%的交易手续费根本不算什么。 交易频率越高,这些成本就越重要。 市场在短时间内一般不会有太大的波动,因此交易成本就显得尤为重要。

另一个重要因素是交易量。 更大的交易量意味着更高的利润,但也意味着更高的交易费用。 交易费用和点差与交易量呈线性关系,但滑点不会。 使用限价收盘单代替市价单是保护自己免受重大滑点成本影响的一种方法,但需要额外的基础设施来管理某些订单。 此外,交易频率越高,我们可以在不被交易成本抵消的情况下获利的数量就越少。

时间维度问题

我们怎么知道我们应该进行高频交易还是每天只交易一次? 为了权衡取舍,让我们先看看两个极端。

时间越短,市场波动越小。 每笔交易只会获得很小的利润,但是我们可以增加交易的频率。 但如前所述,高交易成本会吞噬这些利润。 即使我们能够完美预测毫秒级的行情波动,这个模型也不会很好用。 向交易平台发送HTTP请求,等待交易平台的撮合引擎处理,通常需要几十到几百毫秒的时间。 订单处理完毕后,行情再次发生变化,之前的预测失效。

另一个极端是基于某事进行交易,或者进行日常交易。 次日交易让我们可以完全忽略交易成本,延迟变得不那么重要了。 然而,长期市场波动可能会受到现实世界因素的影响,例如社会新闻、事件或其他随机事件(例如机构投资活动)。 如果我们仅仅依靠模式匹配(机器学习),我们就不能指望做出好的预测。 我们拥有的数据量非常小,根本不足以训练模型。 我们也无法可靠地测试和评估我们的算法。 数据这么少,噪音这么大,根据这些数据做测试就像猴子扔飞镖一样。

因此,我们需要在覆盖交易成本、拥有足够的数据集和从数据中识别模式之间做出权衡。 时间尺度越小,可用的模式和样本就越多,但也要注意交易成本和延迟,这两者都会受到市场流动性和交易 API 的影响。

除了使用自然时钟间隔(例如秒),我们还可以使用基于其他指标(例如交易量)的间隔。 例如,我们可以将间隔定义为 1.0 BTC,而不是 1 秒,并且此交易可能每秒或每分钟发生一次,具体取决于市场的繁忙程度。 这是因为我们希望在市场活动激烈的时期更频繁地交易,而在市场活动不那么激烈的时期交易得更少。 基于交易量的聚合数据包含更多归一化的特征分布和标签,更有利于机器学习算法的训练。 但是,这种交易方式也有一些缺点。 例如,基于成交量的交易可能为时已晚,因为在交易高峰之后,市场再次向前移动。 理想情况下,我们希望在其他市场参与者之前下订单,即在交易量上升之前。

总的来说,时间尺度和如何定义时间间隔是需要优化的超参数。 高流动性、低交易费用和低 API 延迟的市场使我们能够在更频繁的交易中赚取更多利润。

优化函数

我们需要选择最优的指标数据来训练机器模型,而基于原始价格数据训练回归模型是一个显而易见的选择。 但是价格数据不是固定的,大多数现代机器学习技术都需要或使用固定数据来获得更好的结果。 因此,在金融领域,我们通常对回报而非价格建模。 时间 t 的收益 r(t) 表示如下:

r(t) = (p(t) / p(t-1)) - 1

收益大于零表示价格上涨,收益小于零表示价格下跌。 时间 t 可以用上一节中讨论的方式定义。 您可以计算每分钟的利润、每天的利润或基于交易量的利润。

另一个是对数回报,它测量相同的指标,但更符合正态分布,并为训练机器学习算法提供更方便的统计特性:

logr(t) = log(p(t)) - log(p(t-1))

我们可以考虑在固定时间尺度的对数收益数据上训练回归模型,这几乎已经成为一种标准。 但是,我们还有其他选择。 例如,在《Advances in Machine Learning for Finance》一书中,作者讨论了如何选择合理的阈值,将数据转化为分类问题。

在实践中,我们有很多方法来定义 p(t)。 对于BTC,通常是指中间价。 但是,我们不能根据中间价进行交易。 买入时价格高于中间价,卖出时价格低于中间价。 如前所述,我们还需要支付滑点成本,这是交易量的函数。 因此,价格实际上是时间、交易(买入或卖出)和交易量的函数,即 p(t,s,q)。 上面的公式应该是这样的:

logr(t, quantity) = log(p(t, BUY, quantity)) - log(p(t-1, SELL, quantity))

我们还提供其他类型的价格,例如微价。 选择合适的价格类型有多重要? 这取决于时间尺度和市场流动性。 在流动性好、滑点成本低的市场中,以中间价为基础的收益模式更为有效usdt哪个平台的交易量大,但在流动性差的市场中则完全无用。

培训、回测和实时交易

一般的交易算法训练过程如下:

我们在模型训练时所做的优化,比如对数收益的预测精度,只是盈亏指标的代理指标。 盈亏指标才是我们真正关心的,所以我们需要回测。 回测是指使用训练好的模型,根据历史数据进行全方位的模拟。 回测软件的商业版本可能非常昂贵,并且它们模拟交易延迟、非标准订单类型、交易佣金和滑点。 他们还可以自动优化超参数并输出图表和统计数据以评估模型。

但是再好的回测软件,与真实的交易环境还是有区别的。

usdt交易是骗局么_usdt哪个平台的交易量大_大数据交易买卖平台

虽然回测软件可以模拟延迟,但现实世界很难预测。 现实世界中的延迟在低活动期间可能是稳定的,但在高活动期间可能会很大。 它们也有季节性,API 也是如此。 在模拟环境中,一切都是完美的,但在现实世界中,API 会出现问题,比如请求会被限制,繁忙时段会随机拒绝订单。 在现实世界中,我们可以影响其他市场参与者,但这些行为是无法模拟的。 回测也受到数据的限制。 我们从交易 API 获得的历史数据通常是嘈杂和不完整的——我们不能保证它们真实反映了当前的交易状态。

所以,回测主要是作为一个过滤器,或者说是一个乐观的估计。 即使一个模型在回测中表现不佳,在现实世界中仍有可能表现良好。 仅仅因为一个模型在回测中表现良好并不能保证它在现实世界中也会表现良好。 除非您非常小心,否则回溯测试很容易过度拟合并产生错误的结果。

这就是为什么许多关于交易系统的学术论文在实践中不是很有用的原因。 研究的最后一步通常是对历史数据进行回溯测试,如果模型运作良好,研究人员称其为成功,但他们忽略了一个事实,即他们的模型在现实世界中可能永远无法盈利。 研究人员无法使用实时交易基础设施来测试他们的模型,如果他们可以,并且算法在现实世界中运行良好,他们当然不会发表论文。

训练交易机器学习算法很困难。 在许多其他机器学习场景中,训练测试性能与实际性能直接相关。 例如,如果我们使用适当的训练/验证/测试拆分来测试推荐系统,并且数据分布不会随时间发生显着变化,那么我们可以非常确定在测试数据集上表现良好的模型在生产。 中也是如此。 在交易的世界里,我们的训练和回测与现实世界大相径庭,我们无法做出任何保证。 我们只能希望在某些代理指标上训练的模型在回测中表现良好,并且它们在现实世界中也能表现良好。

其他问题

除此之外,我们还有许多其他问题需要解决。

容错:如果出现问题怎么办? 我们如何恢复?

相关资源摘要

我希望本文中提出的一些想法能够为想要构建自动交易系统的读者提供一些见解。 复杂的问题往往没有通用的解决方案,充分了解问题的各个方面,然后根据具体情况做出正确的决定是很重要的。

原文链接:

福利来了! AI前线社区再次开放~与小编大咖近距离交流的机会触手可及! 在公众号后台回复关键字“进群”获取进群二维码(还有AI礼包哦!)

福利时刻

QCon Beijing 2020 是一个新的起点,与行业领导者一起关注人工智能领域的新兴技术和关键发展,并讨论应用于机器学习问题的工程挑战和解决方案。 目前大会报名立减30%,点击【阅读原文】或识别二维码了解更多。 如有疑问,请联系售票小姐姐Ring:17310043226(微信同号)

大数据交易买卖平台_usdt交易是骗局么_usdt哪个平台的交易量大

今日推荐

点击下方图片阅读

复制粘贴很酷:流传最广的一段 Java 代码暴露了一个 bug

usdt交易是骗局么_usdt哪个平台的交易量大_大数据交易买卖平台

你也在“看”吗?