news 2026/9/24 22:32:57

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Gekko 比特币交易机器人:Node.js 技术分析交易与回测平台完全指南
  • 金融科技
  • 后端

【免费下载链接】gekko

A 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 之上叠加随机振荡器)
  • CCITMATSIUO等单指标策略
  • 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:贴近真实市场(含噪声)的短期 EMA;
  • long:滞后市场更多、但对噪声更不敏感的长期 EMA;
  • signal:对 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 线)以及计算好的指标结果(策略自行声明需要哪些指标及设置)。每当有新数据,策略可以决定发出LONGSHORT信号。仅此而已!这个极其简单的设计(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.md):

  1. Market(市场):数据源,实现 Node.js 的Readable Stream接口;
  2. GekkoStream:数据处理管道,实现Writable Stream接口。

两者之间通过Node.js Stream API通信——market.pipe(gekkoStream)。这一行代码正是 core/pipeline.js 中装配整个实例的关键:

var gekkoStream = new GekkoStream(plugins); market .pipe(gekkoStream)

所有Market 最终都输出candle(K 线)数据。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事件。

更关键的是:插件可以广播自己的事件,其他插件可以订阅这些事件。以典型的"策略 + 交易"组合为例:

  1. tradingAdvisor(交易顾问)插件实现策略,接收 K 线数据;
  2. 当策略建议对市场持仓(如"我检测到上升趋势,建议做多 long")时,它广播一个advice事件
  3. paperTrader插件根据这些 advice 模拟交易(假钱);
  4. trader插件则根据这些 advice 在真实交易所下单——此时你就拥有了一个实盘交易机器人

你可以只开启paperTrader,也可以只开启trader。事件订阅关系由 subscriptions.js 声明、由 core/pipeline.js 装配:所有插件实例化后,pipeline 会把"发射器插件"与"订阅者插件"按订阅关系挂钩。

回测时发生了什么

当你用 Gekko 运行一次回测,core/pipeline.js 的流程如下:

  1. 配置一个backtest市场;
  2. 把所有支持 backtest 模式的已启用插件加载进 GekkoStream(插件清单与各插件支持的模式定义在 plugins.js);
  3. 将市场 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 advice,Gekko 就会在交易所创建订单:发出 long 建议时,Gekko 会用你全部的法币买入尽可能多的资产(例如 USD/BTC 对,就是用全部 USD 买入 BTC)。订单创建上 Gekko 采取保守策略,始终停留在订单簿对自己有利的一侧(maker 侧),从而避免在价差(spread)、滑点(slippage)和 taker 手续费上吃亏。例如当前订单簿中最佳卖价为4336.29,Gekko 会以该价格放置限价单等待成交,并每隔几秒调整订单以保持在订单簿顶端。

注意:订单模拟(纸面交易与回测中)的处理方式不同——模拟中不使用订单簿。纸面交易的成交价格、手续费与仓位计算可在 plugins/paperTrader/paperTrader.js 中查看,其费率默认按feeMaker/feeTaker(配置于 config/plugins/paperTrader.toml)计算,并按"全仓互换"方式更新模拟组合。

快速上手:配置文件与启动入口

Gekko 的启动入口为 gekko.js,它会打印启动横幅与版本号(Gekko v+ core/util.js 中读取的版本)。启动时依据命令行传入的模式(gekko --mode backtestgekko --config config.js等)组装 pipeline:

if(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 License(Copyright (c) 2014 Mike van Rossum)。只要保留版权声明与许可声明,任何人都可以自由使用、复制、修改、合并、发布、分发、再许可及出售本软件的副本。该软件按"原样"提供,作者或版权持有者对因使用本软件产生的任何索赔、损害或其他责任概不负责。完整许可文本见仓库 LICENSE。

延伸阅读

  • 架构详解:docs/internals/architecture.md
  • 能力边界与设计取舍:docs/introduction/scope.md
  • 策略编写入门:docs/strategies/creating_a_strategy.md
  • 内置示例策略与参数:docs/strategies/introduction.md
  • Talib / 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
  • 金融科技
  • 后端

【免费下载链接】gekko

A bitcoin trading bot written in node - https://gekko.wizb.it/

项目地址:https://gitcode.com/gh_mirrors/ge/gekko
点击查看免费下载
上一篇:d2dx宽屏补丁:让暗黑破坏神2在现代显示器上完美重生的终极方案
下一篇:英雄联盟智能决策助手:3个颠覆性功能如何改变你的游戏认知

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 22:31:31

Vulkan后端融合Flash Attention:DeepSeek MLA本地推理提速实践

你的显卡明明很强,跑本地模型却慢得像在搬砖——这是我在 Vulkan 后端上折腾 DeepSeek 系列模型时最深的感受。ik_llama.cpp 的 PR 584 把 Flash Attention 引进了 Vulkan 后端,目标就是把这块短板补上。这篇文章就围绕这个 PR,拆解它的实现思…

作者头像 李华
网站建设 2026/9/24 22:31:15

基于S7-1200的5轴伺服控制方案:PTO脉冲定位与多模式切换实战

S7-1200这牌子在中小型运动控制项目里出镜率是真的高,尤其是配合脉冲型伺服做定位控制,属于那种“便宜大碗还够用”的典型方案。我手头刚收尾的一个项目就是5轴伺服协同,核心走的PTO脉冲定位,中间还穿插了速度模式、扭矩模式切换的…

作者头像 李华
网站建设 2026/9/24 22:30:57

大模型智能体的“缰绳”:Harness Engineering实战指南

1. 为什么"缰绳"比马本身更值钱:从大模型到智能体,缺的到底是什么先讲个我真实经历过的场景。前年我在做一套自动化客服智能体,底层用的是当时最强的商用大模型,理论上理解能力、推理能力都吊打人类平均水平。上线第一天…

作者头像 李华
网站建设 2026/9/24 22:30:20

Cucumber入门到实战:用Gherkin语法驱动BDD自动化测试

做自动化测试这些年,我前前后后接触过不少框架,但要说哪个工具最能改变团队协作方式,Cucumber绝对排得上号。它不只是个测试工具,更是一套把业务需求和自动化测试黏合起来的语言体系。这两年经常有人问我Cucumber到底值不值得学、…

作者头像 李华
网站建设 2026/9/24 22:27:38

OnchainOS:AI Agent的链上操作系统

从第一次听到很多开发者讨论"AI Agent 到底能不能像普通应用一样被统一调度和管理"那阵子,我就一直在琢磨一个词:链上操作系统。过去两年,AI Agent 的热度有多高不必多说,但真正把 Agent 部署到链上,让它们拥有统一的身…

作者头像 李华