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

CSetupLedger: a per-setup win rate ledger for Expert Advisors - MetaTrader 5程序库

Ali Akbar
Ali Akbar
  • MQL5 Developer & Algorithmic Trading Specialist 在  Freelance
  • 巴基斯坦
  • 1612
Hi, I'm Ali. 24 years old, trading for around 5 years, and developing MQL5/MQL4 tools. I mainly work on automating manual strategies, fixing broken EA logic, and building clean indicators. I care more about clean architecture and proper risk management than over-complicated code. Always down to talk
| Chinese English Русский Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
显示:
9
等级:
(1)
已发布:
MQL5自由职业者 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务

我为什么写这篇文章

我的短线交易策略主要围绕两种交易模式展开:看涨订单区及其看跌对称形态。策略测试器显示这两种模式的盈利因子相同。我花了两周时间调整参数,确保这些参数对两种交易模式同样适用。

随后,我按交易模式类型对交易进行了分类。在USDCAD的M1时间框架上,看涨交易模式导致了88%的亏损,而看跌交易模式则几乎持平。我需要的这个数据其实一直都存在于我自己的交易记录中,只是我之前没有办法解读它。

这个类可以读取它。

它能为您带来什么

您只需在启动时注册一次设置类型。每种类型都会获得一个 ID。该 ID 会被添加到您的魔数库中,因此从订单发送的那一刻起,每个订单都会携带其专属的设置标签。

此后,账本会针对每种交易设置回答三个问题:盈利和亏损各多少;扣除掉掉期和佣金后的净结果是多少;以及该交易设置的胜率是否已获得信任。

最后一个问题正是我构建此系统的初衷。 三笔交易全胜意味着100%的胜率。这也相当于一枚正面出现概率为44%的硬币,大约每尝试12次才能出现一次全胜。因此,该类会在原始胜率旁打印威尔逊得分下限,并将其与您的收益比率所要求的盈亏平衡胜率进行比对。 在1:2的回报比率下,该阈值定为33.3%。只有当交易策略的保守估计胜率也达到这一阈值时,该策略才会被判定为“值得信赖”。在初期,所有交易策略的显示结果都是“尚不值得信赖”。当你只有二十笔交易时,这便是最诚实的答案。

使用方法

#include <CSetupLedger.mqh>

CSetupLedger ledger;
int SETUP_BULL, SETUP_BEAR;

int OnInit()
  {
   ledger.Init(552001);                          // 你的魔法基地
   SETUP_BULL = ledger.Register("Bullish OB");   // id 0 -> magic 552001
   SETUP_BEAR = ledger.Register("Bearish OB");   // id 1 -> magic 552002

   ledger.RebuildFromHistory();                  // 从账户中读取记录
   Print(ledger.Report(2.0));                    // 2.0 = 风险回报比
   return INIT_SUCCEEDED;
  }

在订单发出前,将该交易设置标记到交易上。

trade.SetExpertMagicNumber((ulong)ledger.MagicFor(SETUP_BULL));

头寸平仓后立即平仓。

double net = 0.0;
if(ledger.ProcessClosedPosition(posId, setupId, net))
   Print(ledger.Report(2.0));

Report() 返回 一段文本。它 既 可作为 Print () 使用 ,也可 作为 Comment () 使用。以下是我在 USDCAD M1 图表上的实际运行示例。

Per-setup ledger  (breakeven win rate at 1:2.0 = 33.3%)
---------------------------------------------------------------------
Bullish OB         235/529  raw  30.8%  wilson  27.6%  net  -5819.94  not yet trusted
Bearish OB         191/393  raw  32.7%  wilson  29.0%  net   -811.42  not yet trusted

将相同的报告传递给 `Comment ()` 后, 它会在 EA 运行期间 显示 在图表角落。 K线上的方框是入场标签。它记录了在入场交易前该交易设置的历史记录。此处的面板显示为4胜6负。原始胜率40%。威尔逊下限16.8%。因此,在10笔交易后,评估结果仍显示为“尚未值得信赖”,这正是该列的全部意义所在。

这些计数是胜数减去败数。因此,看涨设置有764笔交易,看跌设置有584笔交易。两者的净值加起来与测试器自身的净亏损分毫不差。在信任任何账目(包括本报告)之前,请先根据您自己的输出结果进行核对。 如果每种交易模式的交易次数之和与测试者的交易次数不符,则说明头寸计数有误,该数据线以上的所有百分比均毫无价值。

它能帮你规避的三个陷阱

手动编写的版本通常会出错。在开设这门课程之前,我自己也曾犯过其中两个错误。

“交易”不等于“交易操作”。MT5的历史记录是一份“交易”列表。一次分三部分平仓的操作会产生三笔“已平仓”交易。遍历这些交易时,将每笔盈利的交易计为一次“获利”,因此单笔盈利交易会被计为三次“获利”。账簿按 DEAL_POSITION_ID 进行汇总, 因此 部分平仓仍只计为一次。

DEAL_PROFIT 并非 最终结果。掉期和佣金各自位于独立字段中。对于波段交易EA而言,这种差异只是表面现象;但对于剥头皮交易EA而言,它则决定了该交易设置是否真正盈利。 一笔交易若因价格波动获利 3 美元,但支付了 4 美元佣金,则属于亏损。账簿会将利润、掉期和佣金相加。

POSITION_TICKET 并非 POSITION_IDENTIFIER 。 HistorySelectByPosition () 需要的是 标识符。在净额结算账户中,这两个字段通常持有相同值,因此该错误一直不会显现,直到对冲账户或部分平仓导致它们产生差异。此时,筛选结果将返回空集且不显示任何信息。

一条绝不能违反的规则

注册顺序是一种数据格式。设置 ID 仅存在于已平仓交易的神奇数字中。若下个月在列表中间插入一个新设置,该设置下所有曾使用该 ID 的历史交易将悄无声息地变为新设置的交易。系统不会抛出任何错误,但从那时起,相关数字将完全错误。

新交易策略应添加到列表末尾。若要停用某个交易策略,请将其 `Register ()` 调用 保留在原处,以便该 ID 保持被占用状态。在注册代码块上方添加一条简短注释说明这一点,这非常值得。

它无法实现的功能

它为每个头寸仅保存一条记录。如果某个EA在同一净头寸中叠加了第二个入场单,系统会将整个头寸计入第一个交易策略。如果您的EA有这种情况,则需要改用按交易计数的模型。

最多支持十六个交易设置。 若 需更多 , 请提高 SETUP_LEDGER_MAX 值 。一个账户中的十六个交易设置也意味着十六个小样本,Wilson 列会向您显示这一点。

净结果恰好为零的情况将被计为亏损。持平交易较为罕见,将其视为盈利是一种更令人欣慰的误差。

ProcessClosedPosition() 取代了 全局历史数据选择功能,因为它会调用 HistorySelectByPosition ()。请勿在自己的历史数据循环中途调用该函数,且调用后务必重新选择数据。

而且它衡量的是你的平仓操作,而非你的交易思路。一个方向判断正确但止损设置不当的交易机会,会被评定为糟糕的交易机会。对于决定明天交易什么而言,这或许是正确的答案。但这与判断交易思路是否合理并不相同。

要求

MetaTrader 5。除标准库外无其他依赖项。将文件放入 MQL5/Include/ 目录并 将其包含进来。本程序在 6190 版本上编写并经过测试。

最后一点。基于单个样本回测构建的账簿仅用于衡量该回测结果,并不能验证策略的有效性。在从未进行过调优的周期上进行样本外测试是一项独立的工作,本类无法替代该工作。

— Ali Rajput


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

Session Candle Counter: candles numbered from the cash open, DST aware Session Candle Counter: candles numbered from the cash open, DST aware

从法兰克福、伦敦、纽约或东京的现货开盘开始,对当前交易日的每根K线进行编号。基准时间会从交易所当地时间转换为经纪商服务器时间,并自动调整夏令时,因此无论夏季还是冬季,开盘后的第一根K线始终编号为1。

RiskGuard Lite - Percent-Risk EMA/ATR EA RiskGuard Lite - Percent-Risk EMA/ATR EA

教育版MT5自动交易程序(EA):基于闭市K线的EMA交叉入场策略,基于ATR的止损和止盈设置,通过OrderCalcProfit根据净值固定百分比计算手数,点差过滤器,魔术号码隔离以及服务器返回代码检查。这是一个用于构建风险可控EA的简洁模板。不作任何盈利承诺。

加速震荡(AC) 加速震荡(AC)

加速/减速技术指标(AC)用于衡量当前驱动力的加速和减速。

离散 离散

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