合约马丁交易策略系统是一个自动化的加密货币合约交易系统,采用改良版马丁格尔策略执行交易。系统基于Node.js开发,支持Backpack交易所的合约交易,具有自动开仓、止盈止损、风险控制等功能。
- 马丁格尔策略:价格下跌时分批增仓,摊低持仓成本
- 实时价格监控:通过WebSocket保持价格数据实时更新
- 自动止盈止损:可配置的止盈止损机制,保护资金安全
- 风险控制体系:多重风险控制措施,避免资金过度损失
- 完善的日志系统:详细记录交易过程,利于追踪和分析
系统采用模块化设计,主要由以下组件构成:
+------------------+
| 配置管理模块 |
+--------+---------+
|
v
+---------------+ +--------+---------+ +------------------+
| 价格监控模块 |->| 核心交易模块 |<-| 交易服务模块 |
+---------------+ +--------+---------+ +------------------+
|
v
+--------+---------+
| 日志记录模块 |
+------------------+
- 配置管理:读取和解析配置文件,提供系统参数
- 价格监控:通过WebSocket和REST API监控市场价格变动
- 核心交易模块:实现交易策略逻辑,包括订单计算、开仓平仓决策
- 交易服务模块:与交易所API交互,发送订单请求
- 日志记录模块:记录系统运行状态和交易活动
- 系统启动并加载配置
- 初始化交易环境(设置杠杆、检查持仓)
- 执行交易策略创建订单序列
- 启动价格和持仓监控
- 根据监控结果执行止盈止损或调整策略
- 记录完整交易过程
bpmading/
├── backpack_futures_config.json // 配置文件
├── start_futures_trading.js // 入口文件
├── src/
│ ├── app.js // 应用基类
│ ├── futuresTradingApp.js // 合约交易应用主类
│ ├── core/
│ │ ├── tradingStrategy.js // 交易策略基类
│ │ ├── futuresTradingStrategy.js// 合约交易策略
│ │ ├── priceMonitor.js // 价格监控模块
│ ├── services/
│ │ ├── backpackFuturesService.js// Backpack合约API服务
│ ├── utils/
│ │ ├── logger.js // 日志工具
│ │ ├── timeUtils.js // 时间处理工具
│ │ ├── formatter.js // 格式化工具
│ │ ├── ed25519Utils.js // 签名工具
│ ├── network/
│ │ ├── webSocketManager.js // WebSocket管理
├── logs/
│ ├── trading_yyyy-mm-dd.log // 交易日志
│ ├── error_yyyy-mm-dd.log // 错误日志
└── node_modules/ // 依赖模块
- Node.js v14.0.0或更高版本
- npm或yarn包管理器
npm install
# 或
yarn install
编辑backpack_futures_config.json
文件,设置交易参数:
{
"apiKeys": {
// Backpack交易所API公钥,从交易所个人中心-API管理获取
"publicKey": "你的API公钥",
// Backpack交易所API私钥,请妥善保管避免泄露
"privateKey": "你的API私钥"
},
"futures": {
// 交易币种,支持BTC、ETH、SOL等Backpack支持的合约币种
"tradingCoin": "BTC",
// 最大下跌百分比,决定从当前价格向下最多下跌多少百分比设置订单,范围1-10
"maxDropPercentage": 3,
// 总投资金额(USDC),所有订单使用的总资金,实际会根据杠杆倍数放大
"totalAmount": 100,
// 订单数量,分批下单的总数量,推荐3-5个
"orderCount": 3,
// 递增百分比,决定每批订单金额的增加比例,越大则低价位订单资金占比越高
"incrementPercentage": 50,
// 止盈百分比,达到此盈利百分比时自动平仓,小值利于快速回本
"takeProfitPercentage": 0.5,
// 杠杆倍数,1-20之间,越高风险越大
"leverage": 5,
// 持仓方向,"LONG"为做多,"SHORT"为做空
"positionSide": "LONG"
},
"actions": {
// 启动时是否取消已有的未成交订单,true则会取消并重新创建订单
"cancelExistingOrdersOnStart": true,
// 止盈平仓后是否自动重新开始新一轮交易
"restartAfterTakeProfit": true,
// 程序停止时是否自动平仓,如需长期持仓则设为false
"closePositionsOnStop": false
},
"advanced": {
// 最小订单金额(USDC),单个订单的最小资金
"minOrderAmount": 10,
// 价格最小变动单位,根据交易所规则设置
"priceTickSize": 0.1,
// 检查订单状态的间隔时间(分钟)
"checkOrdersIntervalMinutes": 5,
// 价格监控间隔(秒),决定多久检查一次价格变动
"monitorIntervalSeconds": 30,
// 无成交重新下单的等待时间(分钟),过短会频繁取消重下单
"noFillRestartMinutes": 30,
// 最大持仓风险比例,控制单次交易的最大风险敞口
"maxPositionRisk": 0.5,
// 资金费率限制,超过此值会提示警告
"fundingRateLimit": 0.01,
// 滑点容忍度,市价单成交的允许滑点百分比
"slippageTolerance": 0.05,
// API请求超时时间(毫秒)
"apiTimeout": 10000
},
"riskManagement": {
// 止损百分比,亏损达到此百分比时触发止损平仓,范围1-20
"stopLossPercentage": 3,
// 是否启用动态止损,开启后会随着盈利增加自动调整止损位
"dynamicStopLoss": false,
// 追踪止损激活点(百分比),盈利达到此百分比后才开始追踪止损
"trailingStopActivation": 1.0,
// 追踪止损距离(百分比),价格回撤此百分比时触发止损
"trailingStopDistance": 0.5,
// 最大允许杠杆,限制系统使用的最大杠杆倍数,保障资金安全
"maxLeverage": 10,
// 最大回撤百分比,总资金回撤超过此百分比会触发风险预警
"maxDrawdownPercentage": 10
}
}
node start_futures_trading.js
- 系统启动后会自动执行交易策略
- 交易日志保存在
logs/trading_yyyy-mm-dd.log
- 错误日志保存在
logs/error_yyyy-mm-dd.log
- 使用Ctrl+C可安全停止程序
- publicKey: Backpack交易所API公钥
- privateKey: Backpack交易所API私钥
- tradingCoin: 交易币种(如BTC、ETH、SOL等)
- maxDropPercentage: 最大下跌百分比,决定订单价格范围
- totalAmount: 总投资金额(USDC)
- orderCount: 订单数量,决定分批买入的次数
- incrementPercentage: 递增百分比,决定每批订单金额的增加比例
- takeProfitPercentage: 止盈百分比,达到此盈利时自动平仓
- leverage: 杠杆倍数,1-20之间
- positionSide: 持仓方向,"LONG"为做多,"SHORT"为做空
- cancelExistingOrdersOnStart: 启动时是否取消现有订单
- restartAfterTakeProfit: 止盈后是否自动重新下单
- closePositionsOnStop: 停止程序时是否平仓
- minOrderAmount: 最小订单金额
- priceTickSize: 价格最小变动单位
- checkOrdersIntervalMinutes: 检查订单状态的间隔(分钟)
- monitorIntervalSeconds: 监控间隔(秒)
- noFillRestartMinutes: 无成交重新下单的等待时间(分钟)
- maxPositionRisk: 最大持仓风险比例
- fundingRateLimit: 资金费率限制
- slippageTolerance: 滑点容忍度
- apiTimeout: API请求超时时间(毫秒)
- stopLossPercentage: 止损百分比
- dynamicStopLoss: 是否启用动态止损
- trailingStopActivation: 追踪止损激活点(百分比)
- trailingStopDistance: 追踪止损距离(百分比)
- maxLeverage: 最大允许杠杆
- maxDrawdownPercentage: 最大回撤百分比
马丁格尔策略基于"价格回归均值"理论,通过在价格下跌时增加投资,降低平均成本,从而在价格回升时获利。
- 分批下单:根据配置的订单数量,在不同价位分批设置买单
- 金额递增:越低价位的订单金额越大,符合马丁格尔加码原则
- 止盈设置:有较小的止盈点,保证盈利及时落袋
- 止损保护:设置合理止损,控制最大风险
订单1(最高价):totalAmount / (1 + incrementPercentage% + incrementPercentage%^2 + ...)
订单2:订单1金额 * (1 + incrementPercentage%)
订单3:订单2金额 * (1 + incrementPercentage%)
...
- 固定止损:根据入场价格设置固定百分比止损
- 动态止损:随着盈利增加动态调整止损点
- 追踪止损:价格达到激活点后跟踪价格变动设置止损
- 最大杠杆限制:防止过高杠杆导致的强平风险
- 资金费率监控:在资金费率过高时提供警告
- 最大持仓限制:控制单一持仓的最大规模
- API错误处理:完善的错误捕获和处理机制
- 网络异常处理:WebSocket自动重连,REST API重试
- 持仓获取保障:无法获取持仓信息时不执行新订单创建
- 交易日志:记录所有交易活动和系统运行状态
- 错误日志:记录系统错误和异常情况
- 开仓记录:包含开仓时间、价格、数量、原因
- 平仓记录:包含平仓时间、价格、盈亏、原因
- 系统事件:程序启动、停止、重新配置等
- 价格更新:重要的价格变动信息
日志文件保存在logs
目录下,可使用文本编辑器查看,也可使用以下命令实时查看:
tail -f logs/trading_yyyy-mm-dd.log
症状:无法连接到交易所API 解决方案:
- 检查API密钥是否正确
- 确认API访问IP是否受限
- 检查网络连接是否稳定
症状:系统无法创建订单 解决方案:
- 检查账户余额是否充足
- 确认订单参数是否符合交易所要求
- 查看错误日志获取详细错误信息
症状:价格达到止盈止损点但未执行平仓 解决方案:
- 检查监控间隔是否过长
- 确认WebSocket连接是否正常
- 验证止盈止损配置是否正确
症状:系统占用资源过高 解决方案:
- 增加监控间隔时间
- 减少日志输出频率
- 优化WebSocket消息处理
如有问题或需要支持,请通过以下方式联系:
- GitHub Issue: 提交问题
- Email: your.email@example.com
本系统仅供学习和研究使用,不构成投资建议。使用本系统进行实盘交易存在风险,用户应自行承担所有交易风险和损失。开发者不对使用本系统造成的任何直接或间接损失负责。
最后更新:2025年4月16日