ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Gekko 比特币交易机器人:Node.js 技术分析交易与回测平台完全指南

Gekko 比特币交易机器人:Node.js 技术分析交易与回测平台完全指南 金融科技后端【免费下载链接】gekkoA bitcoin trading bot written in node - https://gekko.wizb.it/项目地址https://gitcode.com/gh_mirrors/ge/gekko点击查看免费下载Gekko 是一款基于 Node.js 编写的免费开源比特币技术分析TA交易与回测平台可连接主流比特币交易所支持历史数据回测、模拟盘纸面交易与实盘自动交易三种模式。本文以仓库官方文档 docs/introduction/about_gekko.md 为主线结合 docs/internals/architecture.md、docs/introduction/scope.md 及核心源码系统讲解 Gekko 的功能定位、运行模式、策略体系与底层架构帮助读者理解并上手这套交易机器人框架。风险提示Gekko 官方明确声明Use Gekko at your own risk使用 Gekko 风险自负且该软件不构成任何投资建议也不附带任何形式的担保详见下文免责与许可一节。Gekko 是什么Gekko 是一个免费开源的 Bitcoin TA 交易与回测平台Bitcoin TA trading and backtesting platform它连接流行的比特币交易所使用JavaScript编写运行在Node.js之上。它的定位非常明确一个帮助你自动化执行自有交易策略的工具。用一句话概括 Gekko 的核心价值它让把自己的交易策略自动化这件事变得非常简单。你既可以使用内置的示例策略也可以用基础的 JavaScript 编写属于自己的策略然后让 Gekko 以多种方式自动运行这些策略。值得注意的是项目仓库当前已被作者标注为不再维护见 README.md但代码库与文档体系完整仍是学习加密货币交易机器人架构、策略编写与回测系统设计的极佳参考。三种核心运行模式回测、纸面交易与实盘机器人Gekko 的核心使用方式是一个策略三种跑法。围绕同一套策略Gekko 提供了三种截然不同的运行模式模式英文名称行为说明数据来源回测Backtest在历史数据区间上模拟运行策略输出如果当时这样交易会发生什么——包括执行了哪些交易、整体表现与风险指标本地数据库中的历史 K 线纸面交易Paper trader实时模拟交易用假钱交易实时观察策略在真实市场行情下的盈利表现实时市场数据实盘交易机器人Tradebot实时运行策略并根据策略信号自动在交易所下单实时市场数据上述三种模式都可以从 Gekko 的**用户界面UI**中启动运行。界面会展示图表以及性能/风险统计信息。在代码层面这三种模式分别对应 core/markets/ 目录下的不同市场实现详见下文架构Market 与 GekkoStream一节backtest.js——回测市场从数据库读取历史 K 线并以 GekkoStream 能够消费的速度尽可能快地输出它们供策略执行技术分析leech.js——半实时市场定期每 20 秒从数据库拉取新 K 线输出适用于并行运行实时市场持续落库的场景默认的实时市场则由core/budfox/下的 BudFox 组件实现它从交易所实时获取行情并聚合输出 K 线。策略体系从内置示例到自定义策略Gekko 内置了若干示例策略每个示例策略通常只实现一个指标完整列表与参数说明见 docs/strategies/introduction.md。当前仓库 strategies/ 目录下包含DEMA双指数移动平均线交叉策略MACD经典趋势指标策略含阈值 thresholds 与持久化 persistence 逻辑PPO价格振荡器与 MACD 类似RSI相对强弱指标检测超买/超卖StochRSI在 RSI 之上叠加随机振荡器CCI、TMA、TSI、UO等单指标策略talib-macd/tulip-adx/tulip-macd等展示如何接入 Talib / Tulip 指标库的策略以内置 MACD 策略为例其可配置参数来自 config/strategies/MACD.toml 与文档如下# EMA weight (α) # the higher the weight, the more smooth (and delayed) the line short 10 long 21 signal 9 # the difference between the EMAs (to act as triggers) [thresholds] down -0.025 up 0.025 # How many candle intervals should a trend persist # before we consider it real? persistence 1参数含义short贴近真实市场含噪声的短期 EMAlong滞后市场更多、但对噪声更不敏感的长期 EMAsignal对 short/long 差值再计算的 EMA 权重down/up阈值差值需要超过多大才被视为趋势信号若设为 0则每次均线交叉都会触发新建议persistence趋势需要持续多少个 K 线周期才被确认为有效设为 0 可禁用该行为。只要你熟悉 JavaScript 的基础语法就可以参考 docs/strategies/creating_a_strategy.md 编写自己的策略。Gekko 支持130 余种技术分析指标分别来自 Talib 指标库 与 Tulip 指标库——正如官方文档所说为什么不把布林带、CCI、MACD 和一个 STOCHRSI 指标组合起来试试策略的设计模型与边界从 docs/introduction/scope.md 可以看到策略的极简设计哲学策略是简单的脚本它们处理新的市场数据OHLC K 线以及计算好的指标结果策略自行声明需要哪些指标及设置。每当有新数据策略可以决定发出LONG或SHORT信号。仅此而已这个极其简单的设计K 线 指标值进入 信号输出却相当强大。但这种简单设计也带来明确的边界策略只能处理分钟级 K 线无法在小于 1 分钟的时间框架上行动策略看不到具体成交trades、也看不到订单簿orderbook策略不知道当前投资组合portfolio长什么样策略只能触发 LONG/SHORT即全仓买入/卖出信号。自动化交易平台从实时盯盘到历史回测Gekko 是一个完整的自动化交易平台它可以实时盯盘并在过程中自动执行与评估你的策略。更重要的是Gekko 会把看到的全部市场数据持久化存储这使得日后可以用历史数据模拟运行交易策略、检验它们是否盈利——也就是回测backtesting。这一数据沉淀设计贯穿全平台实时运行时BudFox 市场从交易所获取行情candleWriter等插件将所有 K 线写入数据库支持 MongoDB / PostgreSQL / SQLite对应 plugins/mongodb/、plugins/postgresql/、plugins/sqlite/ 三套适配器回测时core/markets/backtest.js 从数据库按backtest.batchSize配置于 config/backtest.toml分批读取指定日期区间daterange.from/daterange.to的 K 线并输出同时会校验数据完整性——若某批次 K 线数量不足会警告Simulation based on incomplete market data数据导入场景则由importer市场负责从交易所拉取历史数据交给 GekkoStream 中的写入插件落库对应gekko import命令。架构原理Market 与 GekkoStream 的流式协作两个核心组件每个 Gekko 实例都有两个核心组件详见 docs/internals/architecture.mdMarket市场数据源实现 Node.js 的Readable Stream接口GekkoStream数据处理管道实现Writable Stream接口。两者之间通过Node.js Stream API通信——market.pipe(gekkoStream)。这一行代码正是 core/pipeline.js 中装配整个实例的关键var gekkoStream new GekkoStream(plugins); market .pipe(gekkoStream)所有Market 最终都输出candleK 线数据。K 线来自哪里、历史有多久对下游的 GekkoStream 来说并不重要——这种抽象让三种市场可以无缝替换。市场Market的种类仓库 core/markets/ 内置了三类市场BudFox实时市场默认的半实时市场从交易所获取实时数据由于加密货币交易所 7×24 小时运行该市场会无限期运行下去持续输出 K 线backtest回测市场从数据库读取 K 线并以 GekkoStream 能消费的速度尽快输出供策略执行技术分析importer导入市场从交易所拉取历史数据传给 GekkoStream 中的插件写入数据库。从源码 core/pipeline.js 可以看到市场的选择逻辑优先读取配置config.market.type否则回退到运行模式mode本身。GekkoStream 与插件机制GekkoStream 本质上就是一组插件的集合core/gekkoStream.js。插件是简单的模块可以订阅事件并根据事件数据做事情。每个 GekkoStream 最基本的事件就是来自市场的candle事件。更关键的是插件可以广播自己的事件其他插件可以订阅这些事件。以典型的策略 交易组合为例tradingAdvisor交易顾问插件实现策略接收 K 线数据当策略建议对市场持仓如我检测到上升趋势建议做多 long时它广播一个advice事件paperTrader插件根据这些 advice 模拟交易假钱trader插件则根据这些 advice 在真实交易所下单——此时你就拥有了一个实盘交易机器人。你可以只开启paperTrader也可以只开启trader。事件订阅关系由 subscriptions.js 声明、由 core/pipeline.js 装配所有插件实例化后pipeline 会把发射器插件与订阅者插件按订阅关系挂钩。回测时发生了什么当你用 Gekko 运行一次回测core/pipeline.js 的流程如下配置一个backtest市场把所有支持 backtest 模式的已启用插件加载进 GekkoStream插件清单与各插件支持的模式定义在 plugins.js将市场 pipe 进 GekkoStream运行开始。注意Gekko 会拒绝加载在特定模式下不受支持的插件见 core/pluginUtil.js插件不在当前模式支持列表时会告警并禁用。回测时绝不应该启用真实交易插件去下市场单——因为回测中的 advice 是基于历史特定时刻计算出来的而不是基于当前市场状态一旦下单会带来灾难性后果。插件与适配器这两个核心组件描述了 Gekko 的大部分数据流。很多核心功能——比如把 K 线存盘——其实就是插件candleWriter把全部 K 线推给数据库。这种高度模块化让 Gekko 非常灵活可以快速创建新插件插件开发指南见 docs/commandline/plugins.md。分离式架构的丑陋面模块化架构虽然灵活但也有其代价。tradingAdvisor需要对市场运行 TA 策略而大部分 TA 指标在得到准确结果前需要一定的历史数据预热比如 EMA 指数移动平均需要历史来初始化均值。由于 tradingAdvisor 无法预知市场后续会提供哪些数据它必须自己抓取一部分历史数据并与本地数据库中已有的市场数据对比判断能否将两个数据源**拼接stitch**起来——这正是 core/tools/dataStitcher.js 存在的原因。局限与适用范围Gekko 官方明确表示它不是为了 HFT高频交易或任何追求极致速度的场景如套利 arbitrage而构建的。更详细的能与不能清单见 docs/introduction/scope.md。市场数据粒度Gekko 将所有市场数据聚合为分钟级 K 线OHLC、VWP 成交量加权价格、成交笔数。这意味着磁盘上只需要存储 K 线占用的硬盘空间可预测。实盘机器人会额外使用一些订单簿数据来高效执行订单但这些数据在平台其他地方并不可见。订单执行策略实盘模式下一旦策略发出 long/short adviceGekko 就会在交易所创建订单发出 long 建议时Gekko 会用你全部的法币买入尽可能多的资产例如 USD/BTC 对就是用全部 USD 买入 BTC。订单创建上 Gekko 采取保守策略始终停留在订单簿对自己有利的一侧maker 侧从而避免在价差spread、滑点slippage和 taker 手续费上吃亏。例如当前订单簿中最佳卖价为4336.29Gekko 会以该价格放置限价单等待成交并每隔几秒调整订单以保持在订单簿顶端。注意订单模拟纸面交易与回测中的处理方式不同——模拟中不使用订单簿。纸面交易的成交价格、手续费与仓位计算可在 plugins/paperTrader/paperTrader.js 中查看其费率默认按feeMaker/feeTaker配置于 config/plugins/paperTrader.toml计算并按全仓互换方式更新模拟组合。快速上手配置文件与启动入口Gekko 的启动入口为 gekko.js它会打印启动横幅与版本号Gekko v core/util.js 中读取的版本。启动时依据命令行传入的模式gekko --mode backtest、gekko --config config.js等组装 pipelineif(util.launchUI()) { return require(util.dirs().web server); // 启动 Web UI } const pipeline require(dirs.core pipeline); const config util.getConfig(); const mode util.gekkoMode(); pipeline({ config: config, mode: mode });值得注意的安全机制如果配置启用了实盘交易config.trader.enabled但未显式声明config[I understand that Gekko only automates MY OWN trading strategies]Gekko 会直接拒绝启动见 gekko.js——这是官方为强制用户确认Gekko 只会自动化你自己编写的策略而设的确认开关。配置文件位于仓库根目录的 sample-config.js 与 config/ 目录其中config/general.toml全局通用配置config/backtest.toml回测参数日期区间、批次大小config/strategies/各内置策略的参数文件config/plugins/各插件tradingAdvisor、paperTrader、trader、candleWriter 等的开关与参数。免责与许可免责声明Gekko及其项目任何成员不提供投资建议。你在 Gekko 中看到的所有建议都是你自己的策略对市场运行的结果。此外代码中可能存在 bug——Gekko 不附带任何形式的担保WITHOUT ANY WARRANTY。开源许可Gekko 采用MIT LicenseCopyright (c) 2014 Mike van Rossum。只要保留版权声明与许可声明任何人都可以自由使用、复制、修改、合并、发布、分发、再许可及出售本软件的副本。该软件按原样提供作者或版权持有者对因使用本软件产生的任何索赔、损害或其他责任概不负责。完整许可文本见仓库 LICENSE。延伸阅读架构详解docs/internals/architecture.md能力边界与设计取舍docs/introduction/scope.md策略编写入门docs/strategies/creating_a_strategy.md内置示例策略与参数docs/strategies/introduction.mdTalib / Tulip 指标使用docs/strategies/talib_indicators.md、docs/strategies/tulip_indicators.md命令行使用docs/commandline/about_the_commandline.md、docs/commandline/backtesting.md、docs/commandline/plugins.md安装部署docs/installation/installing_gekko.md赞分享金融科技后端【免费下载链接】gekkoA bitcoin trading bot written in node - https://gekko.wizb.it/项目地址https://gitcode.com/gh_mirrors/ge/gekko点击查看免费下载相关推荐Cilium Operator 集群网格状态查询cilium-operator-aws status clustermesh 命令详解Cilium Operator 集群网格状态查询cilium operator aws status clustermesh 命令详解 导读 cilium o金融科技后端Gekko 回测实战指南用历史数据验证你的比特币交易策略Gekko 回测实战指南用历史数据验证你的比特币交易策略 Gekko 是一个基于 Node.js 的开源比特币交易机器人回测Backtesting是它最金融科技后端上一篇d2dx宽屏补丁让暗黑破坏神2在现代显示器上完美重生的终极方案下一篇英雄联盟智能决策助手3个颠覆性功能如何改变你的游戏认知创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表