设为首页 收藏本站 切换语言 切换语言

【黄金一次一单】带止盈止损,做震荡行情

| 发表于 1 小时前 | 显示全部楼层 |复制链接
这款ea据我观察一个月的数据,胜率是百分之82,适合震荡行情,趋势行情不会做单,客户投入本金是1000美金。账户盈利3000美金。
2b9be7e58883708cc8307a163353c9ed_164143uo73wezy9yo75qw1.jpg
046ed36c814bfb0501e24863d5ce3fa1_164200u9e9egj7t44vn6vo.png
db342ca96af9341e6907fa8fb26773ca_164211wttndn2ucfunok2k.png
64fb61a444561d2a90ac2f08cacdd841.jpg
举报

评论 使用道具

精彩评论6

EA智囊
D
 楼主 | 发表于 1 小时前 | 显示全部楼层
这是一款专门交易黄金(XAUUSD)的自动化机器人,运行在 1 分钟 K 线图上。它的核心思路是:当价格在震荡区间内跑得过远(超买或超卖)时,赌它会往回走一点,同时结合趋势箱体过滤,避免在大单边行情中逆势交易。

为了让你彻底理解它的运作方式,我们将整个策略拆解成几个模块,用生活中的例子来比喻。

一、两个“箱子”——趋势箱体与震荡箱体
想象你有一个房间,里面有两个人:一个叫“趋势先生”,一个叫“震荡小姐”。他们各自用不同的尺子量出一个箱子。

趋势箱体(周期 25 根 K 线)

怎么量:找出过去 25 根 K 线中的最高价和最低价,这两条水平线就构成了“趋势箱子”。

用处:这个箱子比较大,反映的是近期的整体波动范围。EA 用它来决定止损应该放在多远,以及止盈目标应该设在哪里(箱子的高度 × 2)。

例子:如果过去 25 根 K 线的最高价是 2000,最低价是 1980,那么趋势箱子高度 20 美元,止损可能设在 1980 下方一点,止盈目标设在 2000 + 20 = 2020。

震荡箱体(周期 11 根 K 线,而且会看两个连续期的箱子)

怎么量:用过去 11 根 K 线的最高/最低做一个“震荡箱子”,同时还会用到前一个 11 根 K 线做的“前一个震荡箱子”。

用处:这个箱子更灵敏,反映短期波动。EA 用它来判断价格现在处于箱子的什么位置——是靠近箱顶(高价区),还是靠近箱底(低价区)。

位置计算:EA 会算出一个百分比:
百分比 = (箱子高点 - 当前收盘价) / 箱子高度 × (-100)

如果价格在箱顶,百分比 ≈ 0

如果价格在箱底,百分比 ≈ -100

如果价格高于箱顶,百分比 > 0;低于箱底,百分比 < -100

二、什么时候开仓?——入场条件
EA 只在两个方向开仓:做多(买涨)和做空(买跌)。它会先检查当前时间是否允许交易(见第五部分),然后看是否有同向的订单已经在持仓(不允许加仓),最后看点差是否太大(超过 50 点就不做)。

1. 做多条件(买涨)
EA 会在价格跌得比较多的时候尝试做多,因为它觉得价格可能反弹。具体需要同时满足以下 5 条:

① 价格在震荡箱体的底部以下足够远

前一个震荡箱体的高点 – 当前收盘价 > OscBoxThreshold × PipMultiplier (默认 7 × 10 = 70 点)
→ 意思是:价格从前一个箱顶掉下来已经跌了至少 70 点,说明下跌幅度够大。

百分比 < EntryPercent - 100 (默认 22 - 100 = -78)
→ 意思是:价格处于箱底以下 78% 的位置(即已经明显超卖)。

收盘价 < 前一个震荡箱体的低点
→ 意思是:价格已经跌破了前一个箱子的底部,是个突破信号。

② 价格靠近前一根 K 线的收盘价

Bid < 2 × PipMultiplier × Point + Close[1]
→ 当前买价不会离前一根 K 线收盘价太远(2 × 10 = 20 点以内),避免追高或滑点太大。

③ 趋势箱体条件允许做多(由参数 DirectionFilter 控制)

如果 DirectionFilter = 0(双向)或 =2(仅做多),则允许;

如果 DirectionFilter = 1(仅做空),则禁止做多。

④ 点差没有超标

当前点差 < MaxSpreadPoints × PipMultiplier (默认 50 × 10 = 500 点,一般黄金不会这么高,但可调低)

⑤ 趋势箱体确认趋势不是太强(可选条件,代码中有用到 TrendBoxPeriod)

计算 Close[1] - 近期低点 > TrendBoxThreshold × PipMultiplier 或 近期高点 - Close[1] > TrendBoxThreshold,但实际代码逻辑有点绕,可以理解为趋势箱体没有发出强烈的单边信号,避免在大单边中逆势。

如果所有条件都满足,EA 就会发一个买单:

手数:根据资金管理规则计算(见第六部分)

止损:Bid - 最小止损距离 × PipMultiplier,但不会超过最大止损距离

止盈:趋势箱体高点 - 趋势箱体低点 + 趋势箱体高点 (即从箱顶再向上一个箱体高度)

2. 做空条件(买跌)
与做多完全对称,只是方向相反:

① 价格在震荡箱体的顶部以上足够远

当前收盘价 – 前一个震荡箱体的低点 > OscBoxThreshold × PipMultiplier

百分比 > -EntryPercent (即大于 -22)

收盘价 > 前一个震荡箱体的高点

② 价格靠近前一根 K 线收盘价

Bid > Close[1] - 2 × PipMultiplier × Point

③ 方向过滤:DirectionFilter 允许做空

④ 点差未超标

⑤ 趋势箱体条件:同样是对称的,避免在强势上涨中做空。

止损设为 Ask + 最小止损距离 × PipMultiplier,止盈设为 趋势箱体低点 - (趋势箱体高点 - 趋势箱体低点)。

三、什么时候平仓?——出场条件
EA 有两种方式平仓:一种是价格反向突破震荡箱体,另一种是盈利达到目标。

1. 直接平仓水平(反向突破)
做多订单:如果当前收盘价 > 前一个震荡箱体的高点,并且百分比 > -ExitPercent(默认 -8),说明价格从底部反弹后突破了前一个箱顶,EA 认为反弹可能结束,会平掉所有买单。

做空订单:如果当前收盘价 < 前一个震荡箱体的低点,并且百分比 < ExitPercent - 100(即 8 - 100 = -92),说明价格下跌后突破了前一个箱底,EA 会平掉所有卖单。

2. 盈利平仓点数
EA 会统计同一方向所有持仓的总利润(含手续费、库存费)和总手数,算出平均每手盈利。

如果平均每手盈利 > ProfitTakePoints × 10(默认 10000 × 10 = 100000 点,也就是 1000 美元/手?这个值比较大,可能是误写,但原代码就是这样),就全部平仓。
这相当于一个全局止盈,防止回撤。

出场检查的频率由参数 ExitCheckMode 决定:

0:只在每根新 K 线产生时检查一次(节省资源)

1:每个 Tick 都检查(更灵敏)

四、移动止损——保护利润
如果开启了移动止损(UseTrailingStop = true),EA 会在订单盈利达到一定程度后,逐步调整止损价,锁定利润。

激活点数:TrailingActivation(默认 180 点)

买单:当前价(Ask)比平均持仓价高出 180 点时,移动止损开始工作。

卖单:平均持仓价比当前价(Bid)高出 180 点时,开始工作。

偏移点数:TrailingOffset(默认 100 点)

新止损价 = 当前价 – 偏移点数(买单)或 当前价 + 偏移点数(卖单)。

也就是说,止损始终与当前价保持固定距离。

步长:TrailingStep(默认 5 点)

只有新止损价比原止损价高出至少 5 点(买单)或低出至少 5 点(卖单)时,才会更新止损,避免频繁修改订单。

举个例子:你做多黄金,开仓价 2000,当前价 2020,盈利 200 点,已经超过激活点数(180 点)。偏移 100 点,那么新止损应设在 2020 - 100 = 1920。如果原止损是 1900,比 1920 小,且差值 ≥ 5 点,则修改止损为 1920。

五、交易时间控制——避开高风险时段
EA 允许你设定每天允许交易的时间段,并且可以单独设置周五的时间(因为黄金周五可能提前收盘或波动异常)。

普通交易日(周一至周四)

开始时间:TradeStartHour : TradeStartMinute(默认 0:00)

结束时间:TradeEndHour : TradeEndMinute(默认 24:00)

如果开始时间 > 结束时间,表示跨天(比如开始 22:00,结束 02:00 次日)。

周五特殊时段

开始时间:FriTradeStartHour : FriTradeStartMinute(默认 24:00)

结束时间:FriTradeEndHour : FriTradeEndMinute(默认 24:01)

同样支持跨天。如果周五当前时间不在这个时段内,EA 会跳过所有新开仓。

注意:这里的“交易时间”仅控制开仓,已持仓的订单仍会继续监控出场和移动止损。

六、资金管理——手数怎么定?
EA 支持两种手数模式:

固定手数(当 DynamicLotFactor <= 0 时)

每次开仓都使用 InitLots 的值(默认 0.1 手)。

动态手数(当 DynamicLotFactor > 0 时)

手数 = DynamicLotFactor / RiskBaseValue × 账户净值

然后限制在平台允许的最小手数和最大手数之间,并四舍五入到 0.01 手。

例如:DynamicLotFactor = 500,RiskBaseValue = 5000,账户净值 10000,则手数 = 500/5000 × 10000 = 1000?显然这个公式可能有问题,应该是 DynamicLotFactor × 净值 / RiskBaseValue?原代码是 总_3_do_18 / 总_2_do_10 * AccountEquity(),也就是 DynamicLotFactor / RiskBaseValue × 净值。如果 DynamicLotFactor = 500,RiskBaseValue = 5000,净值 10000,得到 1000?这显然太大,可能 DynamicLotFactor 应该是很小的值如 0.1。但不管怎样,用户可以自己调整。

建议新手先用固定手数,熟悉后再尝试动态。
举报

点赞 评论 使用道具

muyuqiushui
D
| 发表于 1 小时前 | 显示全部楼层
哥么你也太牛逼了,通过观察就能判断出他的策略,并且复制出来了吗
举报

点赞 评论 使用道具

So简单丶
D
| 发表于 1 小时前 来自手机 | 显示全部楼层
虽然我看不懂,但是也要打一个牛逼给你
举报

点赞 评论 使用道具

wangjianxin
D
| 发表于 半小时前 | 显示全部楼层
牛逼给你
举报

点赞 评论 使用道具

深蓝色
D
| 发表于 12 分钟前 来自手机 | 显示全部楼层
破解出来了?
举报

点赞 评论 使用道具

tanwentian
DD
| 发表于 10 分钟前 | 显示全部楼层
看着很强大,这个策略
举报

点赞 评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

 简体中文国旗 简体中文
 繁體中文国旗 繁體中文
 English国旗 English(英语)
 日本語国旗 日本語(日语)
 Deutsch国旗 Deutsch(德语)
 Русский язык国旗 Русский язык(俄语)
 بالعربية国旗 بالعربية(阿拉伯语)
 Türkçe国旗 Türkçe(土耳其语)
 Português国旗 Português(葡萄牙语)
 ภาษาไทย国旗 ภาษาไทย(泰国语)
 한어国旗 한어(朝鲜语/韩语)
 Français国旗 Français(法语)
翻译