
金融科技后端【免费下载链接】gekkoA bitcoin trading bot written in node - https://gekko.wizb.it/项目地址https://gitcode.com/gh_mirrors/ge/gekko点击查看免费下载导读本文围绕 Gekko一个基于 Node.js 的比特币/加密货币交易机器人仓库位于当前项目根目录的**历史数据导入Importing**功能展开。回测backtesting必须依赖历史行情数据而 Gekko 提供了一条从交易所直接拉取历史成交trades并加工成蜡烛图candles落库的自动化链路。读完本文你将掌握两种导入方式——通过 Gekko UI 的图形化导入向导以及通过命令行的--import模式并能理解底层importer模式从拉取成交到批量写入数据库的完整工作流程以及哪些交易所支持该功能。为什么需要导入历史数据在 docs/features/backtesting.md 中已经说明要对策略进行回测必须有可用的历史市场数据。获取这类数据最便捷的方式就是让 Gekko 直接从交易所的历史成交数据接口中导入。需要特别注意的是并非所有交易所都支持导入具体支持范围请参见 docs/introduction/supported_exchanges.md 中的支持列表。Gekko 对交易所的能力做了三种区分Monitoring监控从交易所获取实时市场数据用于存储和运行交易模拟Live Trading实盘交易基于策略信号自动下单将 Gekko 变成真正的交易机器人Importing导入从交易所获取历史市场数据方便你一次性拉取一个月甚至更长时间的数据用于回测。支持导入Importing 列为 ✓的交易所包括 Binance、Poloniex、GDAX、Kraken、Bitfinex、coinfalcon、The Rock Trading、Luno以及标有*自 0.6 起暂时停用的 BTCC 等而 Bitstamp、Bittrex、EXMO、Gemini、Okcoin.cn、Cex.io、BTC Markets、zaif、bx.in.th、bitcoin.co.id 等交易所则不支持导入✕。Bittrex 不支持导入的原因在仓库中被标注为 API 问题。以上支持情况以仓库文档为准导入功能对交易所的可用性取决于对方是否开放可用的历史成交数据接口。方式一通过 Gekko UI 导入如果你使用 Gekko 的 Web UI导入操作非常简单不需要接触配置文件在导航栏进入Local tab本地数据标签页滚动到页面底部点击Go to the importer进入导入器在导入页面底部选择市场market和日期范围daterange点击import按钮Gekko 便会自动从交易所下载历史市场数据。导入期间UI 会展示实时的导入进度当前处理到的市场时间戳等。这一交互流程背后的实现位于 web/routes/import.js前端提交一个包含config对象的 POST 请求后后端以mode importer启动流水线pipeline并把本次导入登记到importManager缓存中流水线运行过程中通过 WebSocket 广播import_update事件携带latest与done字段来驱动界面上的进度条出错时则广播import_error。也就是说UI 导入本质上是对命令行导入模式的封装二者共享同一套核心实现。方式二通过命令行导入如果你在命令行环境运行 Gekko可以参考 docs/commandline/Importing.md 中的说明步骤如下。步骤 1启用并配置 candleWriter 插件导入的目的是把数据存进数据库因此必须启用candleWriter插件关于插件启用方法见 docs/commandline/plugins.md。该插件负责把导入得到的蜡烛图写入数据库。在插件清单 plugins.js 中candleWriter被声明为支持importer模式的插件。candleWriter 本身依赖一个数据库适配器adapter默认配置位于 config/plugins/candleWriter.tomlenabled true adapter sqlite即默认使用 SQLite 存储你也可以在 config/adapters 下切换为mongodb.toml或postgresql.toml。以 MongoDB 为例其适配器配置如下connectionString mongodb://mongodb/gekko path plugins/mongodb version 0.1 [[dependencies]] module mongojs version 2.4.0步骤 2正确配置 config.watch确保配置文件中的config.watch设置正确它决定了从哪个交易所、哪个市场对交易对导入数据。步骤 3配置 importer.daterange在配置文件中设置importer.daterange的from与to属性指定要导入的时间范围例如[importer] [importer.daterange] from 2015-09-01 to 2015-10-01从 core/markets/importer.js 的源码可以看到日期范围的解析逻辑from与to会通过moment.utc()解析为 UTC 时间如果省略to代码会默认将其设置为moment().utc()即当前时刻并在日志中提示No end date specified for importing, setting to ...如果from或to非法!from.isValid()/!to.isValid()进程会直接以错误退出util.die(invalid from)如果to from同样会报错This daterange does not make sense.。步骤 4运行导入命令node gekko --config config.js --import启动后控制台会输出类似如下的日志2016-06-26 09:12:16 (INFO): Gekko v0.2.2 started 2016-06-26 09:12:16 (INFO): Im gonna make you rich, Bud Fox. 2016-06-26 09:12:17 (INFO): Setting up Gekko in importer mode 2016-06-26 09:12:17 (INFO): 2016-06-26 09:12:17 (INFO): Setting up: 2016-06-26 09:12:17 (INFO): Candle writer 2016-06-26 09:12:17 (INFO): Store candles in a database 2016-06-26 09:12:17 (INFO): 2016-06-26 09:12:17 (WARN): The plugin Trading Advisor does not support the mode importer. It has been disabled. 2016-06-26 09:12:17 (WARN): The plugin Advice logger does not support the mode importer. It has been disabled. 2016-06-26 09:12:17 (WARN): The plugin Profit Simulator does not support the mode importer. It has been disabled. 2016-06-26 09:12:18 (DEBUG): Processing 798 new trades. 2016-06-26 09:12:18 (DEBUG): From 2015-09-09 12:00:04 UTC to 2015-09-09 13:58:55 UTC. (2 hours) 2016-06-26 09:12:20 (DEBUG): Processing 211 new trades. (...)日志中那些WARN很值得注意Trading Advisor、Advice logger、Profit Simulator 等插件不支持importer模式因此被自动禁用。这一行为来自 core/pluginUtil.js 的load函数——插件清单中每个插件都声明了自己支持的modes数组若当前 Gekko 模式此处为importer不在其中插件会被跳过并打印上述警告。这就是为什么导入模式下只有 candleWriter及数据库写入参与工作而策略、交易建议相关插件不会运行。底层原理importer 模式的数据流导入过程远比下载数据四个字复杂。从源码可以还原出完整的数据流水线入口在 core/markets/importer.js检查交易所能力通过exchangeChecker.cantFetchFullHistory(config.watch)校验所选交易所是否支持拉取完整历史成交不支持则直接终止util.die(error, true)。对应实现位于 exchange/exchangeChecker.js。选择抓取器fetcher按config.watch.exchange从importers/exchanges目录加载对应交易所的抓取实现如 importers/exchanges/binance.js、poloniex.js、kraken.js等并传入from/to日期范围。逐批拉取成交fetcher 通过事件总线bus发出trades事件将一段时间的成交数据交给Market.processTrades。成交 → 蜡烛图processTrades把成交写入TradeBatchercore/budfox/tradeBatcher.js后者按时间窗口聚合成批次后触发new batch事件交由CandleManagercore/budfox/candleManager.js加工成 OHLCV 蜡烛并发出candles事件。推送蜡烛pushCandles把蜡烛逐根 push 进一个Readable流objectMode: true由流水线下游的 candleWriter 消费。收尾fetcher 发出done事件后Market在processTrades中检测到this.done为真打印Done importing!并发出end事件结束导入。抓取器的分块策略以 Binance 为例importers/exchanges/binance.js 展示了抓取器如何处理大时间范围它采用**按小时分块1h step**的推进方式——每次getTrades(from, handleFetch)只拉取从当前from起的一小段成交拉完后将from前进 1 小时并补偿可能的闰秒from.clone().add(1, h).subtract(1, s)再继续下一段当from越过终点end时发出done事件并过滤掉超出end的成交。这样既避免了一次性请求过大数据量也便于断点式推进。日志中 Processing 798 new trades 与 From ... to ... (2 hours) 正是这种分批处理过程的体现。导入进度如何上报在Market.processTrades中如果 Gekko 以子进程模式运行gekkoEnv child-process每处理一批成交都会通过process.send({event: marketUpdate, payload: lastAt})把最新成交时间戳上报给父进程父进程侧由 core/workers/pipeline/messageHandlers/importerHandler.js 接收并回调UI 正是借此持续刷新已导入到哪个时间点的进度信息。整个 pipeline 的调度在 core/workers/pipeline/parent.js 中完成。蜡烛如何落库candleWriter 的写入端由所选数据库适配器提供。以 MongoDB 为例plugins/mongodb/writer.js 中的processCandle会把蜡烛先缓存在candleCache数组中攒满 100 根或进入finalize时一次性批量写入historyCollection集合名来自 plugins/mongodb/util.js 的settings.historyCollection。批量插入使用{ ordered: false }这样即使个别蜡烛因重复键等原因失败也不会拖垮整批写入失败详情仅记入 debug 日志。写入的每条蜡烛记录包含start开盘时间戳、open/high/low/close、vwp成交量加权价格、volume、trades成交笔数以及pair交易对等字段。此外若同时启用了adviceWriter该 Store 还会负责把策略建议写入adviceCollection。导入完成后数据一旦导入成功就被持久化在所选适配器的数据库中。之后你可以在 docs/commandline/backtesting.md 与 docs/features/backtesting.md 中了解如何利用这些数据运行回测通过backtest.tomlconfig/backtest.toml中的daterange scan让 Gekko 扫描数据库中已有的日期范围或显式指定[daterange] from / to来精确限定回测区间。值得一提的是回测时 Gekko 的 candleLoadercore/tools/candleLoader.js会按需从数据库读取蜡烛因此导入的日期范围越完整回测的灵活性就越高——这就是先导入、再回测这一标准工作流的意义所在。小结Gekko 的历史数据导入功能同时提供了 UI 向导与命令行两种入口核心链路由importer模式下的 Market 流、各交易所 fetcher、TradeBatcher/CandleManager 聚合器与数据库 writer 协作完成。使用时要记住三个要点只支持列表中的交易所、必须启用 candleWriter 及对应数据库适配器、正确配置config.watch与importer.daterangeto可省略缺省为当前时间。理解这条链路后无论手动导入还是通过 UI 发起导入你都能准确预判数据会以何种格式、何种粒度写入哪个数据库集合为后续回测打下可靠的数据基础。赞分享金融科技后端【免费下载链接】gekkoA bitcoin trading bot written in node - https://gekko.wizb.it/项目地址https://gitcode.com/gh_mirrors/ge/gekko点击查看免费下载相关推荐Gekko 历史数据导入Importer完整指南从交易所拉取行情数据用于回测Gekko 历史数据导入Importer完整指南从交易所拉取行情数据用于回测 本文基于 Gekko 官方命令行文档整理并深入仓库源码验证讲解如何通过命令金融科技后端Cherry Studio 架构评审指南用引擎/声明配对识别实体泄漏按缺陷高度给出最小合规修复Cherry Studio 架构评审指南用引擎/声明配对识别实体泄漏按缺陷高度给出最小合规修复 本文是 Cherry Studio 仓库内 gh pr re金融科技后端Gekko 回测实战指南用历史数据验证你的比特币交易策略Gekko 回测实战指南用历史数据验证你的比特币交易策略 Gekko 是一个基于 Node.js 的开源比特币交易机器人回测Backtesting是它最金融科技后端上一篇如何通过 BRAT 安装 SurfSense Obsidian 插件并同步笔记库下一篇30 分钟跑通 ChanlunX通达信缠论自动画线插件完整安装与验证指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考