___ _ _ _ _ _ _____ _ _ ____ _
|_ _|_ __ | |_ ___| | (_) __ _ ___ _ __ | |_ |_ _| __ __ _ __| (_)_ __ __ _ | __ ) ___ | |_
| || '_ | __/ _ | | |/ _` |/ _ '_ | __| | || '__/ _` |/ _` | | '_ / _` | | _ / _ | __|
| || | | | || __/ | | | (_| | __/ | | | |_ | || | | (_| | (_| | | | | | (_| | | |_) | (_) | |_
|___|_| |_|_____|_|_|_|__, |___|_| |_|__| |_||_| __,_|__,_|_|_| |_|__, | |____/ ___/ __|
|___/ |___/
₿ Ξ ₳ ₮ ✕ ◎ ● Ð Ł Ƀ Ⱥ ∞ ξ ◈ ꜩ ɱ ε ɨ Ɓ Μ Đ ⓩ Ο Ӿ Ɍ ȿ
?智能交易信号? https://t.me/intelligent_trading_signals
该项目旨在使用最先进的机器学习(ML)算法和特征工程开发用于自动交易加密货币的智能交易机器人。该项目提供以下主要功能:
信令服务在云端运行,并将其信号发送到此 Telegram 频道:
?智能交易信号? https://t.me/intelligent_trading_signals
每个人都可以订阅该频道以了解该机器人生成的信号。
目前,该机器人使用以下参数进行配置:
当分数低于阈值并且没有通知发送到通道时,存在静默期。如果分数大于阈值,则每分钟都会发送一条通知,如下所示
₿24.518???得分:-0.26
第一个数字是最新收盘价。得分-0.26意味着价格很有可能低于当前收盘价。
如果分数超过模型中指定的某个阈值,则会生成买入或卖出信号,这意味着现在是进行交易的好时机。此类通知如下所示:
?买入:₿ 24,033 得分:+0.34
为了使信号服务正常工作,必须训练多个 ML 模型,并且模型文件可用于该服务。所有脚本通过加载一些输入数据并存储一些输出文件以批处理模式运行。批处理脚本位于scripts
模块中。
如果一切都已配置,则必须执行以下脚本:
python -m scripts.download_binance -c config.json
python -m scripts.merge -c config.json
python -m scripts.features -c config.json
python -m scripts.labels -c config.json
python -m scripts.train -c config.json
python -m scripts.signals -c config.json
python -m scripts.train_signals -c config.json
如果没有配置文件,脚本将使用默认参数,这对于测试目的很有用,而不是为了显示良好的性能。使用为每个版本提供的示例配置文件,例如config-sample-v0.6.0.jsonc
。
这两个脚本的主要配置参数是data_sources
中的源列表。此列表中的一项指定数据源以及用于区分不同源中具有相同名称的列的column_prefix
。
下载最新历史数据: python -m scripts.download_binance -c config.json
将多个历史数据集合并为一个数据集: python -m scripts.merge -c config.json
该脚本用于计算派生特征:
python -m scripts.features -c config.json
要生成的功能列表是通过配置文件中的feature_sets
列表配置的。如何生成特征由特征生成器定义,每个特征生成器在其配置部分中指定了一些参数。
talib
特征生成器依赖于TA-lib技术分析库。下面是其配置示例"config": {"columns": ["close"], "functions": ["SMA"], "windows": [5, 10, 15]}
itbstats
特征生成器实现了可以在 tsfresh 中找到的函数,例如scipy_skew
、 scipy_kurtosis
、 lsbm
(低于平均值的最长罢工)、 fmax
(最大值的第一个位置)、 mean
、 std
、 area
、 slope
。以下是典型参数"config": {"columns": ["close"], "functions": ["skew", "fmax"], "windows": [5, 10, 15]}
itblib
特征生成器在 ITB 中实现,但它的大部分特征可以通过 talib 生成(更快)tsfresh
从 tsfresh 库生成函数该脚本与特征生成类似,因为它向输入文件添加新列。然而,这些列描述了我们想要预测的东西以及在在线模式下执行时未知的东西。例如,未来可能会涨价:
python -m scripts.labels -c config.json
要生成的标签列表通过配置中的label_sets
list 进行配置。一个标签集指向生成附加列的函数。它们的配置与功能配置非常相似。
highlow
标签生成器返回 Truehighlow2
计算未来的增加(减少),前提是在此之前没有显着的减少(增加)。这是其典型配置"config": {"columns": ["close", "high", "low"], "function": "high", "thresholds": [1.0, 1.5, 2.0], "tolerance": 0.2, "horizon": 10080, "names": ["first_high_10", "first_high_15", "first_high_20"]}
topbot
已弃用topbot2
计算最大值和最小值(标记为 True)。每个标记的最大值(最小值)都保证被低于(高于)指定级别的最小值(最大值)包围。相邻最小值和最大值之间所需的最小差异通过level
参数指定。容差参数还允许包括接近最大值/最小值的点。这是一个典型的配置"config": {"columns": "close", "function": "bot", "level": 0.02, "tolerances": [0.1, 0.2], "names": ["bot2_1", "bot2_2"]}
该脚本使用指定的输入特征和标签来训练多个 ML 模型:
python -m scripts.train -c config.json
prediction-metrics.txt
文件配置:
model_store.py
中描述train_features
中指定labels
中指定algorithms
中指定此步骤的目标是聚合不同算法针对不同标签生成的预测分数。结果是一个分数,应该由下一步的信号规则消耗。聚合参数在score_aggregation
部分中指定。 buy_labels
和sell_labels
指定由聚合过程处理的输入预测分数。 window
是用于滚动聚合的先前步骤的数量,而combine
是一种将两种分数类型(购买和标签)组合成一个输出分数的方式。
聚合过程生成的分数是某个数字,信号规则的目标是做出交易决策:买入、卖出或什么也不做。信号规则的参数在trade_model
中描述。
该脚本使用许多买卖信号参数模拟交易,然后选择性能最佳的信号参数:
python -m scripts.train_signals -c config.json
该脚本启动一项服务,定期执行一项相同的任务:加载最新数据、生成特征、进行预测、生成信号、通知订阅者:
python -m service.server -c config.json
有两个问题:
python -m scripts.predict_rolling -c config.json
python -m scripts.train_signals -c config.json
配置参数在两个文件中指定:
App
类的config
字段中的service.App.py
-c config.jsom
服务和脚本的参数。当此文件加载到脚本或服务中时,此配置文件中的值将覆盖App.config
中的值以下是一些最重要的字段(在App.py
和config.json
中):
data_folder
- 仅批处理离线脚本所需的数据文件的位置symbol
它是一个交易对,如BTCUSDT
labels
被视为标签的列名称列表。如果您定义一个用于训练然后用于预测的新标签,那么您需要在此处指定其名称algorithms
名称列表train_features
用作训练和预测的输入特征的所有列名称的列表。buy_labels
和sell_labels
用于信号的预测列的列表trade_model
信号器的参数(主要是一些阈值)trader
是交易者参数部分。目前,尚未经过彻底测试。collector
这些参数部分用于数据收集服务。有两种类型的数据收集服务:与向数据提供者发出的定期请求同步,以及订阅数据提供者并在新数据可用时立即获取通知的异步流服务。它们正在工作,但尚未经过彻底测试并集成到主要服务中。当前主要使用模式依赖于手动批量数据更新、特征生成和模型训练。拥有这些数据收集服务的原因之一是 1) 获得更快的更新 2) 获得正常 API(如订单簿)中不可用的数据(存在一些使用此数据的功能,但它们未集成到主工作流程中)。有关更多详细信息,请参阅 App.config 中的示例配置文件和注释。
每分钟,信号发送器都会执行以下步骤来预测价格是否可能上涨或下跌:
笔记:
启动服务: python3 -m service.server -c config.json
交易者正在工作,但没有经过彻底的调试,特别是没有测试稳定性和可靠性。因此,它应该被视为具有基本功能的原型。它目前与信号器集成,但在更好的设计中应该是一个单独的服务。
回测
外部集成