JKEFtrendMartingale
- 专家
- 版本: 1.1
- 激活: 5
JKEFtrendMartingale — 波动率自适应趋势马丁交易系统
产品概述
JKEFtrendMartingale 是一款面向 MetaTrader 5 的全自动交易机器人(Expert Advisor)。它在指定时间周期上随市场波动率自适应趋势,进行突破交易,并在连续亏损后按设定的规则放大下一笔交易的手数,盈利后再逐步回到初始手数。
系统只统计已收盘 K 线的状态,避免盘中未成形信号带来的反复。方向确认后,机器人既可以用市价单入场,也可以在离当前价格一定距离处挂出停止单等待突破确认,并对未成交的挂单进行追踪调整。每一轮只维持一个持仓,不在同一方向上同时叠加多个仓位。
需要特别说明的是,本产品包含亏损后放大手数的机制,这属于高风险资金管理方式,会显著放大单笔与累计亏损的可能规模。请在充分理解该机制并完成模拟测试后再考虑使用。
交易逻辑
状态判定。 系统先测量价格波动强度,波动越强,均线跟得越快;波动越弱,均线越平滑。随后对均线做一次带动量权重的平滑处理,得到趋势基准线。基准线上下各计算出一个近期偏离百分比位,价格突破上偏离百分位时进入多头状态,跌破下偏离百分位时进入空头状态。状态只在已完成 K 线上更新,信号周期由参数 InpTF 决定,与图表当前显示的周期可以不同。
手数层级规则。 系统维护一个"累计亏损"账本与一个"手数层级":
- 一笔仓位平仓后,若该笔净结果(盈亏 + 库存费 + 手续费)为亏损,累计亏损增加,手数层级加一,层级不超过 InpMaxLevel 设定的上限;
- 若该笔净结果为盈利,盈利会冲抵累计亏损;只有当累计亏损被完全冲抵归零时,手数层级才重置为 0,手数回到初始值;
- 在层级重置之前,之后每一笔新开的仓位都使用当前层级对应的手数。
手数的计算有两种模式:加法模式下,当前手数 = 初始手数 + 层级 × 步长;乘法模式下,当前手数 = 初始手数 × 倍率的层级次方。最终手数会被限制在品种允许的最小与最大手数之间,并按品种的手数步长取整。
首次入场。 机器人启动或点击面板 Start 之后,如果当前品种没有本系统的持仓或挂单,它会读取当前信号方向:方向明确且被允许时,立即以市价单建仓,并同时提交初始止损;方向为中性时继续等待,直到出现明确方向。首仓使用的手数同样取决于当前手数层级。
平仓之后。 持仓结束(无论被止损、被移动止损触发,还是人工平掉)后,系统记录平仓时刻,等待参数设定的秒数,再按当时的信号方向挂出停止单:多头挂买入止损单,空头挂卖出止损单,挂单价距当前市场价格为参数设定的点数。
挂单管理。 挂单等待期间,系统持续对照信号:
- 信号方向翻转时,撤销原挂单,按新方向重新挂出;
- 方向被交易方向过滤排除时,撤销挂单并回到等待计时;
- 价格朝有利方向运行时,挂单价格随之朝有利方向移动(买入止损单下移,卖出止损单上移),即挂单会追踪价格,而不是停在原地。
挂单成交后即形成持仓。
持仓管理。 持仓存在期间,系统清除所有未成交挂单,并根据移动止损参数维护止损:盈利达到触发点数后才启动移动止损,止损位与当前价格保持设定的距离,且只朝有利方向移动,不会回调。
出场方式。 系统不设置固定止盈,出场由初始止损或移动止损决定,也可通过面板 Close All 一键了结。
状态持久化
累计亏损与手数层级保存在内存中。机器人加载时如何处理这两个数值,由参数 InpPersistState 决定:
- 开启时,机器人会扫描最近七天内本品种、且订单识别编号匹配的平仓成交记录,据此重建累计亏损与手数层级,使重启后能延续之前的节奏;
- 关闭时,机器人不做重建,累计亏损与手数层级都从零开始。
需要注意,重建只覆盖最近七天的历史成交。超过七天的记录不参与计算,手动平仓且编号不匹配的成交也不会参与。
风险管理
- 每笔建仓都带初始止损,止损距离为参数设定的点数;参数为 0 时不带止损。
- 可选移动止损,包含触发点数与止损距离两个参数;其中任一项设为 0 即关闭该功能。
- 手数层级设有上限 InpMaxLevel,达到上限后不再继续放大。
- 下单前先做保证金测算,可用保证金不足时不发单,并在日志中记录,随后进入一段冷却时间,避免反复无效发单。
- 自动识别品种的成交模式并在需要时按备选模式重试;市价单与挂单分别处理。
- 自动检测交易时段与品种交易模式,市场关闭期间不发起新操作,并进入冷却,减少无效报错。
- 手数自动按品种的最小手数、最大手数与步长规范化,避免因精度问题被服务器拒单。
需要明确的是,上述措施不能消除递增手数本身带来的风险。初始止损在跳空、滑点或极端行情下可能以更差的价格成交,实际亏损可能大于设定的止损距离。
图表面板
图表上提供三个按钮:Start、Stop、Close All,以及一块状态信息区。
- Start:启动自动交易。若当前无持仓,则按信号尝试首仓;同时清除此前的市场关闭与资金不足冷却状态。
- Stop:停止新的开仓动作。已持有的仓位不受影响,移动止损仍会继续维护。
- Close All:平掉本系统在当前品种上的持仓,撤销挂单,并停止自动交易。此时累计亏损与手数层级不会自动清零,如需清零请关闭状态持久化后重新加载机器人。
状态区显示运行或停止、信号周期、允许的交易方向、手数模式、初始手数、当前手数与层级、累计亏损、状态持久化开关、确认模式、初始止损、移动止损触发与距离、挂单距离、等待时间,以及当前所处的阶段:市场关闭、资金不足、等待首次入场、持仓中、挂单中、等待挂单或空仓。
按钮组的显示位置(四个角落之一)、横向与纵向偏移、按钮宽度与高度、字体大小均可在参数中调整。
推荐运行条件
- 交易品种:流动性较好、点差稳定的品种,例如主要货币对、主流交叉盘、贵金属与主要股指 CFD。任何品种都应先做模拟验证。
- 时间周期:机器人可挂载在任意周期图表上,实际信号周期由 InpTF 决定,默认 M5。
- 账户类型:净额结算账户与对冲账户均可使用。
- 账户规模:本产品包含亏损后放大手数的机制,所需资金应显著高于固定手数策略。请按"最坏情况下连续亏损至最高层级时的总亏损"来估算,而不是按单笔止损估算。以默认参数(初始手数 0.01、加法模式、步长 0.01、最大层级 10、初始止损 500 点)为例,最高层级手数为 0.11 手,在主要货币对上一般建议账户资金不低于 1000 美元或等值货币。若使用乘法模式,请先计算最高层级手数:默认倍率 2.0 与最大层级 10 时,最高层级手数约为初始手数的 1024 倍,即初始 0.01 手时约为 10.24 手,此时需要大幅提高账户资金,或降低倍率与最大层级。以上仅为资金承受能力的建议,不构成任何收益预期。
- 运行环境:建议在低延迟、执行稳定的账户上运行,并使用 VPS 保持终端持续在线,避免中途重启导致状态重建不完整。
输入参数
交易参数
参数 | 默认值 | 说明 |
|---|---|---|
InpTF | PERIOD_M5 | 信号计算所用的时间周期,与图表显示周期可以不同 |
InpTradeDirection | TRADE_DIR_BOTH | 允许的交易方向:双向、只做多、只做空 |
InpInitialLot | 0.01 | 层级为 0 时的初始手数 |
InpLotMode | LOT_MODE_ADD | 手数递增模式:加法或乘法 |
InpLotStep | 0.01 | 加法模式下每个层级增加的手数 |
InpLotMultiplier | 2.0 | 乘法模式下每个层级的手数倍率 |
InpMaxLevel | 10 | 手数层级上限,达到后不再继续放大 |
InpStopLoss | 500 | 初始止损距离,单位为点;设为 0 表示不带止损 |
InpTrailTrigger | 200 | 移动止损的触发盈利,单位为点 |
InpTrailDistance | 100 | 移动止损与当前价格保持的距离,单位为点 |
InpWaitSeconds | 10 | 平仓之后、挂出下一笔挂单之前的等待秒数 |
InpPendingDistance | 500 | 停止挂单距当前市场价格的点数 |
InpMagic | 20268888 | 订单识别编号,用于区分本系统与其他程序的订单 |
InpSlippage | 30 | 下单允许的最大偏离,单位为点 |
启动选项
参数 | 默认值 | 说明 |
|---|---|---|
InpAutoStart | true | 加载到图表后是否自动开始交易,与面板 Start 按钮共用同一状态 |
InpPersistState | true | 加载时是否根据最近七天的历史成交重建累计亏损与手数层级 |
成交模式设置
参数 | 默认值 | 说明 |
|---|---|---|
InpAutoDetectFilling | true | 自动探测品种支持的成交模式 |
InpManualFilling | ORDER_FILLING_FOK | 关闭自动探测时使用的成交模式 |
InpFillRetryMax | 4 | 成交模式重试次数上限 |
界面设置
参数 | 默认值 | 说明 |
|---|---|---|
InpBtnCorner | BTN_CORNER_RL | 按钮组所在的图表角落 |
InpBtnX | 10 | 按钮组距所选角落的水平偏移像素 |
InpBtnY | 10 | 按钮组距所选角落的垂直偏移像素 |
InpBtnW | 70 | 单个按钮宽度像素 |
InpBtnH | 25 | 单个按钮高度像素 |
InpText | 9 | 按钮文字字号 |
安装与快速开始
- 在 MetaTrader 5 的市场或导航器中找到本产品,安装后出现在 Experts\Market 目录。
- 打开目标品种的图表,将机器人拖到图表上。
- 在输入参数中设置初始手数、手数模式与步长或倍率、层级上限、初始止损、移动止损、挂单距离与信号周期。
- 确认终端工具栏上的自动交易按钮已启用,图表右上角显示机器人名称与笑脸图标。
- 需要立刻开始时保持 InpAutoStart 为 true,或点击图表上的 Start 按钮。
- 结束交易时点击 Stop 停止新开仓,或点击 Close All 平仓并撤销挂单。
测试与验证建议
- 先用策略测试器下载完整的历史数据,再用真实点差或自定义点差进行测试,重点观察连续亏损期间的最大资金占用与最大回撤。
- 先在模拟账户上运行一段时间,确认手数层级变化、挂单、移动止损与日志行为符合预期。
- 测试时优先使用加法模式与较小的层级上限,确认能承受最坏情况下的累计亏损后,再考虑其他设置。
- 若在同一账户的多个品种上同时运行,建议为每个图表保持各自的订单识别编号,便于区分。
- 调整手数前,先估算最高层级手数与初始止损共同决定的最大单笔亏损是否在可承受范围内。
使用限制与注意事项
- 机器人只管理当前图表品种、且订单识别编号匹配的持仓与挂单;手工开的仓位或其他机器人的订单不受影响。
- 系统不设置止盈目标,利润回吐的多少由移动止损参数决定。
- 没有内置新闻过滤、交易时段过滤、点差过滤、最大持仓时间、每日止损与最大回撤限制。
- 手数不具备按账户风险百分比自动计算的功能,账户规模变化时需手动调整。
- 状态持久化只读取最近七天的历史成交,重启或重新加载后若超出该范围,重建结果会与预期不同。
- 依赖终端持续在线,断线期间不会发出指令,恢复后的状态由当时的持仓与挂单决定。
- 涉及挂单与止损修改,实际成交价会受点差、滑点与流动性影响。
关于递增手数的风险说明
亏损后放大手数是本产品最需要理解的部分。请在使用前确认以下几点:
- 亏损序列越长,后续仓位的手数越大,账户资金占用与潜在亏损会以加法或几何方式增长。
- 乘法模式下手数增长更快,倍率与层级上限的取值直接决定最高层级手数,请务必先算出该数值再决定账户规模。
- 初始止损不等于最大亏损。跳空、滑点与流动性不足都可能使实际成交价差于设定的止损位。
- 保证金不足时机器人不会发单并进入冷却,这会导致递增序列中断,之后的盈利可能无法按原计划冲抵累计亏损。
- 若不接受这类风险,请降低层级上限、使用加法模式并配合较小的初始手数,或选择不使用递增手数的交易方式。
风险提示
自动交易并不能消除市场风险,亏损后放大手数的方式会进一步提高账户风险。历史数据上的测试结果不代表未来表现,模拟账户与真实账户的结果也可能存在差异。本产品不保证任何盈利,也不构成投资建议。请根据自身的风险承受能力设定手数、层级上限与止损,并在真实账户使用前充分测试。因使用本产品产生的交易结果由使用者自行承担。
常见问题
机器人启动后没有立即开仓,是否正常?
正常。启动后若信号方向为中性,系统会等待,直到出现明确的多头或空头状态才入场。
手数层级什么时候回到 0?
只有当累计亏损被后续盈利完全冲抵归零时,层级才会重置为 0。在此之前,即使有盈利,层级也不会下降。
重启终端后手数层级还在吗?
取决于 InpPersistState。开启时会扫描最近七天本品种、编号匹配的平仓成交来重建;关闭时从零开始。
可以同时用于多个品种吗?
可以,为每个品种单独打开一个图表挂载机器人即可,建议配合各自的订单识别编号。各品种的累计亏损与手数层级相互独立。
为什么日志中出现资金不足的提示?
下单前系统做了保证金测算,可用保证金不足时不会发单,并记录日志与进入冷却时间。此时应降低初始手数、步长或倍率、降低层级上限,或补充资金。
点击 Close All 之后手数层级会清零吗?
不会。Close All 只负责平仓与撤销挂单,累计亏损与手数层级保持原值。需要清零时,请关闭状态持久化后重新加载机器人。
