程序库: BestInterval - 页 14 1...789101112131415161718192021...29 新评论 fxsaber 2019.02.02 06:58 #131 gspencer: 我对 Meta 编辑器中的编码或 EA 一无所知,但我非常喜欢您提出的 BestInterval 概念。如果您能指导我如何将其添加到我想测试的 EA 中,会不会太麻烦了?请试着理解本主题的讨论。 Библиотеки: BestInterval 2018.10.12www.mql5.com Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: BestInterval fxsaber 2019.02.08 22:06 #132 // 在图表上显示 BestInterval 平衡图表 #property strict #property script_show_inputs input int inAmountIntervals = 3; // 要放弃多少个最坏情况下的交易区间 #include <Graphics\Graphic.mqh> //https://www.mql5.com/zh/articles/2866 void ToChart( const double &Y[] ) { CGraphic graphic; graphic.Create(0, __FUNCTION__, 0, 30, 30, 780, 380); graphic.CurveAdd(Y, CURVE_LINES); graphic.CurvePlotAll(); graphic.Update(); } #include <MT4Orders.mqh> // 如果是 MT4,则不需要。 #include <fxsaber\BestInterval\BestInterval.mqh> // 计算最佳交易间隔 void OnStart() { BESTINTERVAL BestInterval; // 创建一个计算最佳交易间隔的对象 BestInterval.Set(); // 发布投标历史 for (int i = 0; i < inAmountIntervals; i++) if (BestInterval.DeleteWorseInterval()) // 如果有东西被扔掉了 Print(BestInterval.ToString()); // 让我们打印出获得的交易数据 else break; // 否则,我们就出局了 double Profits[]; double Balance[]; const int Size = ArrayResize(Balance, BestInterval.GetProfits(Profits) + 1); // 获得了 BestInterval-transaction 利润 Balance[0] = 0; // 计算平衡曲线 for (int i = 1; i < Size; i++) Balance[i] = Balance[i - 1] + Profits[i - 1]; ToChart(Balance); // Visualised. } fxsaber 2019.02.13 19:29 #133 如果您在标准交货中的任何 EA 末尾插入此内容// 向终端传送优化器每一轮的报价。应用 BestInterval 并将其可视化。 #include <MT4Orders.mqh> //https://www.mql5.com/zh/code/16006 #include <fxsaber\BestInterval\BestInterval.mqh> //https://www.mql5.com/zh/code/22710 #include <TypeToBytes.mqh> //https://www.mql5.com/zh/code/16280 #include <Graphics\Graphic.mqh> //https://www.mql5.com/zh/articles/2866 input int inAmountIntervals = 1; // 要放弃多少个最坏情况下的交易区间 // 输出图形 void ToChart( const double &Y[] ) { CGraphic graphic; graphic.Create(0, __FUNCTION__, 0, 30, 30, 780, 380); graphic.CurveAdd(Y, CURVE_LINES); graphic.CurvePlotAll(); graphic.Update(); } // 收集贸易历史 int GetDeals( DEAL_BASE &Deals[] ) { const int Total = ArrayResize(Deals, OrdersHistoryTotal()); int Amount = 0; for (int i = 0; i < Total; i++) if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL)) { Deals[Amount].OpenTime = OrderOpenTime(); Deals[Amount++].Profit = OrderProfit() + OrderCommission() + OrderSwap(); } return(ArrayResize(Deals, Amount)); } // 从这里(代理),我们将向终端发送数据 double OnTester() { DEAL_BASE Deals[]; if (MQLInfoInteger(MQL_OPTIMIZATION) && GetDeals(Deals)) // 如果优化,则收集交易历史记录 { CONTAINER<uchar> Container; //https://www.mql5.com/ru/forum/95447/page4#comment_5464205 Container[0] = Deals; // 将投标历史记录放入一个容器中 FrameAdd(NULL, 0, 0, Container.Data); // 从代理向终端发送数据 } return(0); } // 这里(终端)接收来自代理的数据 void OnTesterPass() { ulong Pass; string Name; long ID; double Value; CONTAINER<uchar> Container; //https://www.mql5.com/ru/forum/95447/page4#comment_5464205 while (FrameNext(Pass, Name, ID, Value, Container.Data)) { Print("Pass = " + (string)Pass); // 密码 DEAL_BASE Deals[]; // 接收到来自代理的数据 Container[0].Get(Deals); BESTINTERVAL BestInterval; // 创建一个计算最佳交易间隔的对象 BestInterval.Set(Deals); // 发布已传送的投标历史记录 Print(BestInterval.ToString() + "\n"); // 让我们打印出获得的交易数据 for (int i = 0; i < inAmountIntervals; i++) if (BestInterval.DeleteWorseInterval()) // 如果有东西被扔掉了 Print(BestInterval.ToString() + "\n"); // 让我们打印出获得的交易数据 else break; // 否则,我们就出局了 double Profits[]; double Balance[]; const int Size = ArrayResize(Balance, BestInterval.GetProfits(Profits) + 1); // 我们获得了 BestInterval 交易利润 Balance[0] = 0; // 计算平衡曲线 for (int i = 1; i < Size; i++) Balance[i] = Balance[i - 1] + Profits[i - 1]; ToChart(Balance); // Visualised. } }你会在终端日志中看到如下内容(以标准移动平均线为例)Pass = 0 Amount of Delete Intervals = 0 (2018.10.01 - 2019.02.05) 00:00:00 - 23:59:59 : Profit = -8498.94 (100.00%), Total = 6394 (26.07%), PF = 0.52, Mean = -1.33, DD = 8660.23, RF = -0.98 SUMMARY: 00:00:00 - 23:59:59 : Profit = -8498.94 (100.00%), Total = 6394 (26.07%), PF = 0.52, Mean = -1.33, DD = 8660.23, RF = -0.98 Amount of Delete Intervals = 1 (2018.10.01 - 2019.02.05), 18:00 - 18:00, CountHours = -1 17:40:01 - 17:42:59 : Profit = 364.25 (100.00%), Total = 9 (100.00%), PF = Max, Mean = 40.47, DD = 4.63, RF = 78.67 SUMMARY: 00:00:00 - 23:59:59 : Profit = 364.25 (100.00%), Total = 9 (100.00%), PF = Max, Mean = 40.47, DD = 4.63, RF = 78.67 Pass = 1 Amount of Delete Intervals = 0 (2018.10.01 - 2019.02.05) 00:00:00 - 23:59:59 : Profit = -9757.53 (100.00%), Total = 6394 (24.70%), PF = 0.55, Mean = -1.53, DD = 10076.19, RF = -0.97 SUMMARY: 00:00:00 - 23:59:59 : Profit = -9757.53 (100.00%), Total = 6394 (24.70%), PF = 0.55, Mean = -1.53, DD = 10076.19, RF = -0.97 Amount of Delete Intervals = 1 (2018.10.01 - 2019.02.05), 09:00 - 10:00, CountHours = 0 08:27:01 - 10:14:59 : Profit = 628.59 (100.00%), Total = 472 (39.41%), PF = 1.39, Mean = 1.33, DD = 550.93, RF = 1.14 SUMMARY: 00:00:00 - 23:59:59 : Profit = 628.59 (100.00%), Total = 472 (39.41%), PF = 1.39, Mean = 1.33, DD = 550.93, RF = 1.14图表上是相应通道的 BestInterval-profit 图 Stanislav Korotky 2019.02.15 20:47 #134 我正好路过。我读了它。 说明中写道:" 构思来自作者。可能有相似之处。" 我在一篇英文博客(第一部分 和第二部分)中描述了一些更为普遍的方法。只在时间间隔上做横截面是一种高度专业化的方法。在我的想法中,其他参数的横截面也同样有趣。 fxsaber 2019.02.15 21:25 #135 Stanislav Korotky:我正好路过。我读了它。说明中写道:"构思来自作者。可能有相似之处。"我在英文博客开仓时,МАшка 等于多少(我们将其写入订单注释)。因此,交易历史中的所有头寸都可以与这些 MA 值进行比较。 然后将 BestInterval 应用于这些 MA。在输出结果中,我们会得到МАшки的范围,哪些仓位应该开仓,哪些仓位不应该开仓。 当然,您也可以使用任何数值函数来代替 MA。因此,您可以找到优于时间的超酷过滤器。 Stanislav Korotky 2019.02.15 21:31 #136 fxsaber:遗憾的是,由于语言障碍,我无法深入了解您的作品。关于对其他过滤器的兴趣,我当然同意什么时候出现了这种障碍?;-)之前就很清楚了。还是我的英语说错了? fxsaber 2019.02.15 21:40 #137 Stanislav Korotky:什么时候出现了这种障碍?;-)以前很清楚的。还是我的英语说得不好?总是有障碍。有时我直接读源代码。 Алексей Тарабанов 2019.02.15 21:41 #138 fxsaber:遗憾的是,由于语言障碍,我无法深入了解您的作品。关于对其他过滤器的兴趣,我当然同意上帝是你的法官。 fxsaber 2019.03.08 15:20 #139 备忘录#include <fxsaber\BestInterval\BestInterval.mqh> void OnStart() { BESTINTERVAL BestInterval; // 整个 BestInterval 的对应值 Print(BestInterval.GetTotal()); // 关闭位置的数量。 Print(BestInterval.GetTotalPlus()); // 盈利平仓头寸的数量。 Print(BestInterval.GetTotalMinus()); // 无利可图的平仓数量。 Print(BestInterval.GetMean()); // 数学期望 Print(BestInterval.GetProfit()); // 利润 Print(BestInterval.GetProfitFactor()); // 利润因素 Print(BestInterval.GetProfitPlus()); // 正交易的利润 Print(BestInterval.GetProfitMinus()); // 消极交易的损失 Print(BestInterval.GetRecoveryFactor()); // 恢复系数 Print(BestInterval.GetMaxDrawDown()); // 最大绝对余额缩减 Print(BestInterval.GetAmountDeleteIntervals()); // 删除的坏区间数 INTERVAL Intervals[]; const int Size = BestInterval.GetIntervals(Intervals); // 获取构成 BestInterval 的时间间隔 // 对于每个区间,我们都打印了其指数 for (int i = 0; i < Size; i++) { Print(Intervals[i].Total); // 关闭位置的数量。 Print(Intervals[i].TotalPlus); // 盈利平仓头寸的数量。 Print(Intervals[i].TotalMinus); // 无利可图的平仓数量。 Print(Intervals[i].Mean); // 数学期望 Print(Intervals[i].Profit); // 利润 Print(Intervals[i].ProfitFactor); // 利润因素 Print(Intervals[i].ProfitPlus); // 正交易的利润 Print(Intervals[i].ProfitMinus); // 消极交易的损失 Print(Intervals[i].RecoveryFactor); // 恢复系数 Print(Intervals[i].MaxDrawDown); // 最大绝对余额缩减 Print(Intervals[i].OpenTime); // 打开时间间隔。 Print(Intervals[i].CloseTime); // 间隔关闭时间。 } } Andrei Trukhanovich 2019.03.10 11:55 #140 Stanislav Korotky:仅按时间间隔制作横截面是一种高度专业化的方法。事实上,按其他参数制作横截面也同样有趣。我想了又想,还是没有想出一种能像时间一样有效过滤的东西。 这种东西不应该是策略的一部分,而应该直接影响市场行为。 堆栈? 还有一个问题 - 制作超立方体是否有意义? 1...789101112131415161718192021...29 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我对 Meta 编辑器中的编码或 EA 一无所知,但我非常喜欢您提出的 BestInterval 概念。如果您能指导我如何将其添加到我想测试的 EA 中,会不会太麻烦了?
请试着理解本主题的讨论。
你会在终端日志中看到如下内容(以标准移动平均线为例)
图表上是相应通道的 BestInterval-profit 图
我正好路过。我读了它。
说明中写道:"
"
我在一篇英文博客(第一部分 和第二部分)中描述了一些更为普遍的方法。只在时间间隔上做横截面是一种高度专业化的方法。在我的想法中,其他参数的横截面也同样有趣。
我正好路过。我读了它。
说明中写道:"
"
我在英文博客开仓时,МАшка 等于多少(我们将其写入订单注释)。因此,交易历史中的所有头寸都可以与这些 MA 值进行比较。
然后将 BestInterval 应用于这些 MA。在输出结果中,我们会得到МАшки的范围,哪些仓位应该开仓,哪些仓位不应该开仓。
当然,您也可以使用任何数值函数来代替 MA。因此,您可以找到优于时间的超酷过滤器。
遗憾的是,由于语言障碍,我无法深入了解您的作品。关于对其他过滤器的兴趣,我当然同意
什么时候出现了这种障碍?;-)之前就很清楚了。还是我的英语说错了?
什么时候出现了这种障碍?;-)以前很清楚的。还是我的英语说得不好?
总是有障碍。有时我直接读源代码。
遗憾的是,由于语言障碍,我无法深入了解您的作品。关于对其他过滤器的兴趣,我当然同意
上帝是你的法官。
仅按时间间隔制作横截面是一种高度专业化的方法。事实上,按其他参数制作横截面也同样有趣。
我想了又想,还是没有想出一种能像时间一样有效过滤的东西。
这种东西不应该是策略的一部分,而应该直接影响市场行为。
堆栈?
还有一个问题 - 制作超立方体是否有意义?