请观看如何免费下载自动交易
请在Telegram上找到我们!
加入我们粉丝页
有趣的脚本?
因此发布一个链接 -
让其他人评价
喜欢这个脚本? 在MetaTrader 5客户端尝试它
脚本

Broker Spec Inspector - MetaTrader 5脚本

Seckin Erkut
Seckin Erkut
Algo Trading Systems Developer. I develop strategies and portfolios not by hypes but from solid academic literature.

I put my money where my mouth is, be sure to check the performance of my EAs through my signals.
| Chinese English Русский Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
显示:
10
等级:
(2)
已发布:
MQL5自由职业者 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
每个使用自动化交易的交易者迟早都会遇到错误代码130“止损无效”,或者遇到订单根本无法成交的情况。通常的反应是归咎于EA。但大多数情况下,EA本身没有问题,而是服务器在执行合约限制。
——这些限制在终端窗口中从未显示过:止损位、冻结位,或是你的仓位大小未遵守的最小手数步长。这些限制因交易品种和经纪商而异,且会随时变化,
。本脚本会将其打印出来。
将其加载到任何图表上。它仅读取规格信息——绝不会打开、修改或关闭任何内容,且无需启用算法交易。提供一个以逗号分隔的符号列表,或将输入留空,它便会遍历您的“市场观察”中的选定标的。

打印内容

对于每个交易品种:报价单位、点值、点差大小及价格、合约规模、最小/最小步长/最大手数、点差及是否浮动、成交模式、多头和空头的隔夜利息,以及按您当前可用保证金计算的一手最小交易量所需的保证金。接下来是回答实际问题的部分:

经纪商警示

--- XAUUSD (bid 4402.15 / ask 4402.63) ---------------------
stops level 350 pts | freeze level 0 pts | EFFECTIVE band 351 pts
VERDICT: a stop/pending placed 100 pts from price would be REJECTED as 'Invalid price' (band is 351 pts)
buy at ask 4402.63: you asked SL 4401.63 -> nearest legal SL 4399.12 (moved out)
最后一行最有参考价值。它不仅告诉你100点的止损在这个品种上无法生效,还明确指出服务器会接受的具体止损位。
规则
有两种不同的限制条件可能会导致止损单被拒绝,而仅检查其中一种限制条件的工具,在半数经纪商处会给出错误的结果:
double MinStopDistance(const string sym)
{
long stops = SymbolInfoInteger(sym, SYMBOL_TRADE_STOPS_LEVEL);
long freeze = SymbolInfoInteger(sym, SYMBOL_TRADE_FREEZE_LEVEL);
long band = (stops > freeze ? stops : freeze) + 1;
return band * SymbolInfoDouble(sym, SYMBOL_POINT);
}

这四行话中蕴含着三项决定。
该数值是两个限制值中较大的那个,因为有些服务器将冻结值设为零并强制执行止损,而另一些服务器则恰恰相反。采用较大的数值,即使不知道当前所在的是哪种服务器,也能同时满足这两种情况。
增加了一分,因为许多服务器仍然会拒绝那些恰好位于等级区间边缘的等级。文档中记载的规则是“小于”,但实际实施的规则往往是“小于或等于”,而多加一分并不会造成任何损失。
结果以“PRICE”单位返回,而非点数。在构建实际止损位时,您需要的就是这个数值,它能消除“点”与“点差”之间的混淆——这种混淆在5位数交易品种中会导致十倍的误差。
在您自己的EA中使用它
第二个函数才是值得复用的。它接受你指定的止损位,并返回服务器能接受的、位于价格正确一侧的最近止损位:
double LegalStopLoss(const string sym, const bool isBuy,
const double price, const double wanted)
{
double dist = MinStopDistance(sym);
int digits = (int)SymbolInfoInteger(sym, SYMBOL_DIGITS);
double sl = wanted;
if(isBuy) { if(price - sl < dist) sl = price - dist; }
else { if(sl - price < dist) sl = price + dist; }
return NormalizeDouble(sl, digits);
}

既然该停靠站原本就是合法的,且此次更新后保持不变,因此将所有停靠站都经由该站中转是安全的。将现有的计算逻辑进行封装只需一行代码:
double sl = LegalStopLoss(_Symbol, true, ask, ask - atr * 1.5);
当波动率相对于价格区间较高时,这一点尤为重要。一个在欧元兑美元上效果良好的ATR止损位,在黄金或指数交易时段行情平静时,可能会跌入价格区间内——而这恰恰是价格反转令你措手不及时,因为同样的交易策略昨天还行得通。

关于阅读输出结果的说明

点差过大并不意味着经纪商在刁难客户。这通常反映了该交易品种的定价和对冲方式,这也是为什么一个在某台服务器上运行良好的剥头皮自动交易程序,在另一台服务器上却会失效——尽管代码一行都没改。
迁移前请先进行比较。CSV导出功能默认开启,会将 `BrokerSpecs.csv` 写入 MQL5\Files 目录,每个符号占一行,其中包含交易区间、最小止损距离以及最近的合法价格水平。 在两家经纪商上运行该脚本,将生成的文件并排比较,原本可能耗费你一周时间调试的差异,现在一分钟内即可一目了然。
在调整仓位规模前请先检查保证金。保证金一栏所示数值仅适用于最小交易单位。如果该数值已接近您的可用保证金,则您的仓位规模存在一个尚未测算的上限。

股票代码必须在“行情监视器”中,且必须至少收到一个报价。如果某只股票代码未报告报价数据,请打开其图表一次,然后重新运行。


由MetaQuotes Ltd译自英文
原代码: https://www.mql5.com/en/code/76178

Session Opening Range Breakout EA Session Opening Range Breakout EA

一款专家顾问,用于测量指定交易时段开盘窗口的高点/低点,随后在该区间确认突破时进行交易,采用基于风险的仓位管理,并设定每交易时段仅执行一笔交易上限。

Reverse RSI Bands Reverse RSI Bands

“反向RSI区间”是一种领先指标,它通过数学方法对RSI公式进行了反向推导。该指标会直接在主图表上绘制精确的目标价格区间,实时显示RSI将在何处触及您设定的超买或超卖水平。

Custom Simple Moving Average Custom Simple Moving Average

一种两阶段自适应移动平均线(基础均线 + 二次平滑),该指标会根据斜率自动变色,并用箭头标记价格与均线的交叉点。

离散 离散

离散技术指标由价格和交易量的变化决定。