马丁格尔策略被称为“逆人性翻倍加仓法”,在高波动、多空皆可盈利的永续合约市场尤为常见。但若想把它顺利跑在 OKX 永续合约 上,就需要针对 Freqtrade 框架做一次深度定制。下文从 0 到 1 拆解全流程:配置步骤、策略核心、风控模块、回测演练及常见问题。读完即可动手写代码,并通过蒙特卡洛测试再上实盘。
一、先搞定 OKX 端:完整配置示范
关键词示例:OKX 永续合约、隔离保证金、对冲模式、API 密钥、ISK 头寸管理
要告诉 Freqtrade “交易的是 OKX 永续”,必须在 config.json 中写明以下信息:
{
"trading_mode": "futures",
"margin_mode": "isolated",
"liquidation_buffer": 0.05,
"exchange": {
"name": "okx",
"key": "你的_api_key",
"secret": "你的_secret",
"password": "你的_passphrase",
"pair_whitelist": ["BTC/USDT:USDT"],
"_ft_has_params": {
"position_mode": "hedge"
}
},
"fee": 0.0004 /* 0.02% maker + 0.02% taker */
}小贴士
liquidation_buffer=0.05 表示当账户权益距离爆仓只剩 5% 时强制降杠杆或平仓;pair_whitelist 用 /USDT:USDT 这种 永续合约符号 写法。
二、策略框架拆解:马丁格尔公式化为代码
关键词示例:MartingaleStrategy、加仓乘数、最大加仓次数、布林带下轨、动态杠杆
本策略继承 Freqtrade 的 IStrategy,核心思想:价格每下跌一次,就按martingale_multiplier倍数加仓,最多连加max_martingale_steps次。关键函数注释如下:
1. 入参定义
martingale_multiplier = DecimalParameter(1.5, 3.0, default=2.0, space='buy')
max_martingale_steps = IntParameter(3, 10, default=5, space='buy')2. 首次开仓信号
利用布林带下轨即可:
dataframe.loc[
(qtpylib.crossed_below(dataframe['close'], dataframe['bb_lower'])),
'enter_long'] = 13. 加仓条件
if current_trade and current_trade.is_open and current_trade.current_profit < 0:
count = self.trade_count.get(pair, 0)
if count < self.max_martingale_steps.value:
dataframe['enter_long'] = 14. 仓位大小计算
def adjust_trade_position(self, trade, ..., **kwargs):
if current_profit < -0.03: # -3% 触发
new_stake = trade.stake_amount * self.martingale_multiplier.value
return new_stake5. 动态杠杆+止损
杠杆 min(proposed × multiplier^count, 10),止损线 -0.05 - 0.01 * count,两者都随加仓次数自动加码、收紧。
三、风控“鹰眼”:如何防止穿仓
关键词示例:强平保护、动态止损、紧急关停、账户级风控
- 单笔档位上限:执行
self.trade_count[pair]以后,如若≥ max_martingale_steps,直接return 'max_martingale_steps_exceeded'强制平光。 - 全局熔断:任意时刻
total_profit < -0.20就触发emergency_stop,私聊机器人或电报报警。 - 滑点控制:
use_order_book=true拉实时买一卖一,慎防高溢价成交。
👉 点击观看实盘风控踩坑实录:真正大规模爆仓前的 5 个信号
四、回测与验证:如何快速跑 500 次蒙特卡洛
关键词示例:回测命令、计时器、干跑钱包、堆叠头寸、滑点因子
freqtrade backtesting \
--strategy MartingaleStrategy \
--config config.json \
--timeframe 5m \
--timerange 20230101-20230301 \
--enable-position-stacking \
--max-open-trades 3 \
--stake-amount 100 \
--dry-run-wallet 10000点兵点将:
position-stacking必须开,否则同方向仓位被合并后没法加仓。--fee 0.0004与配置文件保持一致,能显著影响马丁相对于稳赚的盈亏拐点。- 回测 OKX 时注意 数据窗口仅 3 个月,历史数据可先离线 dump 回测更久。
五、FAQ:高频疑问一次说清
- Q:为什么用对冲模式而不是 one-way?
A:马丁可能在极短间隔内同时出现做空信号,启用 hedge 能进行多空对冲,防止订单被拒绝。 - Q:杠杆倍数会不会失控?
A:代码已限制最高 10 倍。如果想更稳,可把max_leverage向下改至 5~6 倍,策略仍能运行。 - Q:5 级加仓后满仓,BTC 还在跌怎么办?
A:策略在第 5 次会直接平仓止损,再叠加账户级熔断,因此一个币不会拖垮整体。 - Q:回测盈利,实盘却出现滑点磨损?
A:OKX 永续深度时常在中位动荡,建议同时启用 虚拟订单簿延迟 50ms 模拟真实撮合。 - Q:想把乘数改成线性 1.3 而不是指数倍增,可行吗?
A:把martingale_multiplier.value换成1 + count * 0.3,逻辑写在adjust_trade_position里即可。 - Q:能否 BTC、ETH 一起跑?
A:pair_whitelist加列 “ETH/USDT:USDT”,再启用--max-open-trades 6,默认独立买量,互不影响。
六、结语:永远做风险的“先手”
马丁格尔不是钥匙,而是一把双刃剑。把它放进 Freqtrade + OKX 的组合拳里,最难得的并非策略本身,而是从回测到上线一路敬畏数据:让止损线先于加仓逻辑入心。谨记一句话:不要试图战胜市场,先用风控守住本金。