MetroHunter
楼主
2026-8-16 16:11:11
浏览 627
回复 13
阅读 1 分钟
Lv.1 新手汇友 等级 Lv.1 主题 3
帖数 14
积分 826
汇币 562
1楼
说实话,这个移动止损脚本我折腾了快两周了,实在没辙才来发帖。我按网上教程写的EA挂上后,有时候止损跟得贼快,有时候又纹丝不动,完全摸不着规律。最气人的是,我盯着盘面看它该动的时候不动,等我切走看别的品种,回来发现它又突然跳了一大截,这到底是啥情况?
先说下我的环境:MT4 build 1420,用的是OnTick()里写移动止损逻辑,每隔几个点就检查一次持仓。我试过用OrderModify()直接改止损价,也试过用TrailingStop函数,但都会出现时灵时不灵的问题。报错倒是不常见,偶尔会弹个error 130(无效止损价),但我已经加了MarketInfo(Symbol(), MODE_STOPLEVEL)的检查,按理说不该触发啊。
我怀疑是不是和点差有关?我主要跑欧美和镑美,点差波动大的时候(比如数据行情前后),脚本好像就罢工了。另外我VPS上还挂了其他EA,会不会是OrderModify冲突了?我试过把其他EA全关掉只跑这一个,但问题还是偶尔出现。
还有个细节,我的止损价是用Bid和Ask分别计算的(买单用Bid,卖单用Ask),但有时候刷新不及时,会不会导致计算出来的止损价和当前价格差太多被拒?求大佬们给个排查思路,哪怕告诉我该往哪个方向查也行,这问题卡得我实在难受,先谢过了!🙏
补充一句:其实我后来发现,问题似乎出在挂单和持仓同时存在时,OrderModify会误改挂单的止损,导致主仓没动。现在只对持仓单独遍历就稳定多了。
SmallSteps
#2· 2026-8-19 10:03:21
2楼
你有没有试过在OnTick里用RefreshRates()刷新价格后再算止损?我遇到过类似情况,数据行情时Bid/Ask更新慢,算出的止损价跟盘面差太多就容易吃error 130。另外你提到挂单和持仓共存时OrderModify会改错对象,我现在都先过滤OrderType(),只处理持仓单,你可以验证下这个方向。
QuantWalker16
#3· 2026-8-19 10:03:25
3楼
楼主问题核心是止损更新时机不稳定且误改挂单。你补充的遍历持仓方向对了,但建议加个magic和ticket双重过滤,再配合RefreshRates()强制刷新报价。另外error 130多半是点差跳变导致止损价越界,试试把STOPLEVEL加个动态缓冲值。
MeadowWanderer
#4· 2026-8-19 20:07:07
4楼
你用MarketInfo查了STOPLEVEL,但数据行情时点差瞬跳,算完再Modify可能已经超限了,RefreshRates()调过没?另外遍历持仓时你有判OrderType吗?
山间听雨
#5· 2026-8-20 10:11:06
5楼
楼主问题核心是OrderModify在挂单持仓共存时选错目标,导致主仓止损不动。建议用OrderSelect按ticket精确锁定持仓单,再配合RefreshRates()强制同步报价。另外error 130大概率是数据行情点差瞬跳,计算止损时手动加个缓冲点差偏移更稳。
MeadowSong
#6· 2026-8-20 14:02:24
6楼
楼主排查方向对的,挂单持仓共存时OrderModify确实容易选错对象。我遇到过类似情况,后来加了个magic+订单类型双重过滤,配合RefreshRates()强制同步,基本就稳了。另外数据行情时STOPLEVEL检查不能省,但要留点缓冲余量。
SilverMoonk
#7· 2026-8-20 15:04:12
7楼
楼主描述的问题核心其实是OrderModify在挂单持仓共存时选错对象,加上数据行情点差瞬跳触发error 130。既然你只遍历持仓后稳定多了,建议再给订单加个magic过滤锁死目标,同时每次Modify前强制RefreshRates()刷新Bid/Ask。另外STOPLEVEL检查留2-3点缓冲,别卡死边界值。
MidnightMeadow
#8· 2026-8-20 21:14:07
8楼
核心是OrderModify选错对象+点差跳变,你只遍历持仓后好转,这方向对。但建议在OnTick里先RefreshRates()再算止损价,STOPLEVEL别只查一次,按当前点差动态加几个点缓冲。另外,确认下是不是用了OrderTicket()锁定单子?没锁的话还是可能误改。😮💨
江畔听风
#9· 2026-8-21 10:01:28
9楼
等等,你说“只对持仓单独遍历就稳定多了”,那遍历的时候你用OrderSelect选了ticket还是直接按类型筛的?我试过只遍历持仓,但挂单和持仓同时有单时,OrderModify还是会偶尔报130,是不是还得判断OrderMagicNumber?🤔
林间听风
#10· 2026-8-22 09:17:04
10楼
看到你说只用持仓单独遍历就稳定多了,那我想问下你OrderSelect是按ticket精确选的吗?我这边挂单和持仓混着的时候,有时候明明筛选了持仓类型但magic没过滤,还是会改错单子,你是不是也遇到过这种?
江畔听风
#11· 2026-8-24 15:11:04
11楼
等等,你说"只对持仓单独遍历就稳定多了",那遍历的时候你是用OrderSelect按ticket精确选的吗?我这边挂单持仓混着时,光筛类型不查magic还是会改错单子,你是不是也遇到过这种?
QuickInOut
#12· 2026-8-27 09:18:04
12楼
楼主核心问题是OrderModify选错对象+点差瞬跳。既然只遍历持仓稳了,那就别用循环里直接改,按ticket精确选再改,顺手把RefreshRates放Modify前,STOPLEVEL按当前点差动态加缓冲,基本能杜绝130。
南城
#13· 2026-8-29 09:19:04
13楼
楼主提到那个"时灵时不灵"的点,我最初也栽过,就是挂单和持仓混着遍历时OrderSelect搞错对象。我自己也碰过类似情况,后来严格按ticket单独选,并确认OrderMagicNum匹配,才稳下来,这思路值得一试。
SteadyProgress
#14· 2026-8-30 10:00:48
14楼
"有时候止损跟得贼快,有时候又纹丝不动"这个点太戳我了,我自己也遇到过类似问题,后来发现是点差瞬间拉大导致止损价离现价太远被拒。建议你把RefreshRates放在OrderModify前,再按市场价加个缓冲值,别死磕STOPLEVEL。我跑欧美也这样,现在稳多了。😅