初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1473

 
Alexander Sevastyanov #:

我认为,在这种情况下,退还任何金额的可能性几乎为零。
这里的每个人都已经给出了非常正确的答案。

但最好还是试一试。

亚历山大,感谢您的帮助。祝您在编程和交易中取得成功。一切顺利
 
Valeriy Yastremskiy #:

在用钱做任何事情之前,至少要做最低限度的检查。

同样。

但愿不是信贷...一定要报警

谢谢大家的实用建议和帮助。版主请原谅我违反了论坛规则。我是新来的,不知道讨论经纪人是不允许的。我会仔细阅读论坛规则,并保证不再违反。 再次感谢所有响应我呼吁的人,祝你们好运。
 

我试着做了一个类似的注释,但字母更大了。

总的来说,它成功了,字母现在可以读了。

但由于我对 OOP 一无所知,我的注释并没有很好地影响计算机的工作、

在几个图表上运行带有注释的智能交易系统一段时间后,发生了一些糟糕的事情,屏幕褪色,服务器重启)))))。

在终端日志中,有一堆这样的记录。

MQL5  VirtualAlloc failed in large allocator, size=101104
MemoryException 101142 bytes not available, 0 heapmin result

帮助那些知道如何做的人,以免内存泄漏。

插件注释文件如下所示:

#include <Canvas\Canvas.mqh>
void Comm(string txt, color clr = clrYellow, int FontSize = 20, string Font = "Consolas", int flag = FW_BOLD)
  {
   CCanvas canvas;

   int shift = 0;
   if(ChartGetInteger(0, CHART_SHOW_ONE_CLICK))
      shift = 60;
   canvas.Erase(0x00FFFFFF);
   canvas.FontNameSet(Font);
   canvas.FontFlagsSet(flag);
   canvas.FontSizeSet(FontSize);

   int width = 0, height = 0;
   string result[];
   int size = StringSplit(txt, StringGetCharacter("\n", 0), result);
   height = (int)(FontSize * 1.8 * size);

   for(int i = 0; i < size; i++)
     {
      int w = canvas.TextWidth(result[i]);
      if(width < w)
         width = w;
     }

   canvas.CreateBitmapLabel(0, 0, "Comment", 5, 20 + shift, width, height, COLOR_FORMAT_ARGB_NORMALIZE);
   for(int i = 0; i < size; i++)
      canvas.TextOut(0, (int)(FontSize * 0.8 * i), result[i], ColorToARGB(clr, 255));

   canvas.Update(true);
  }

这样使用的例子:

#include <Comm.mqh>
//+------------------------------------------------------------------+
void OnTick()
  {
   MqlTick tick;
   SymbolInfoTick(_Symbol, tick);
   if(tick.ask != 0 && tick.bid != 0)
      Comm(StringFormat("ask = %.5f\nbid = %.5f\ntime = %s", tick.ask, tick.bid, TimeToString(tick.time, TIME_DATE | TIME_SECONDS)));
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectDelete(0, "Comment");
   ChartRedraw();
  }
//+------------------------------------------------------------------+


很明显,我在 CCanvas 类中做错了什么,但具体错在哪里,我并不清楚。

附加的文件:
Comm.mq5  2 kb
Comm.mqh  2 kb
 
Aleksandr Slavskii #:

我试着做了一个类似的评论,但字母更大。

现在字母可以阅读了。

但由于我不懂 OOP,我的注释并不能很好地影响计算机的工作、

在几个图表上运行带有注释的智能交易系统一段时间后,发生了一些糟糕的事情,屏幕褪色,服务器重启))))))。

在终端日志中出现了一堆这样的记录。

帮助那些知道如何做的人,使内存不泄漏。

附件中的注释文件是这样的

示例用法如下:


很明显,我在使用 CCanvas 类时做错了什么,但具体错在哪里我并不清楚。

如果您对不使用CCanvas但使用OBJ_BITMAP_LABEL 对象 的代码感兴趣,请 查看我的代码 ...

ClosingLots
ClosingLots
  • www.mql5.com
Индикатор информер.
 
Alexey Viktorov #:

如果您对不使用CCanvas但使用OBJ_BITMAP_LABEL 对象 的代码感兴趣, 请查看我的代码 ...

谢谢,不错的解决方案,我喜欢。


但是,"武士 没有 目标 ,只有 道路 ",对我来说,如何注释的解决方案不如找出 在使用该类时的 错误 更重要。

 
Aleksandr Slavskii #:

谢谢,解决方案很好,我很喜欢。


但是,"武士 没有 目标 ,只有 道路 ",我更关心的是如何发表评论,而不是找出 在使用该类时犯了 什么错误

创建了多少个 BitmapLabel?(Ctrl+B --> 全部)。

 
Artyom Trishkin #:

创建了多少个 BitmapLabel?(Ctrl+B --> 全部)。

一个图表,一个对象。

怎么会有多个呢?所有创建对象的名称都是一样的--"Comment"(注释)。


忘了写了。

在只有一个核心和 1GB 内存的超差服务器上,问题就出现了。而且不是立即出现,而是过了一段时间才出现。

但我认为,如果代码一切正常,就不会出现问题。有东西堵塞了内存,我不知道是什么。

为什么我 有必要知道?

你可以购买服务器容量,你可以购买内存,你可以无休止地升级,但这不会使我的代码正确。

 
Aleksandr Slavskii #:

一个图表,一个对象。

怎么会有多个呢?所有创建对象的名称都是一样的--"注释"。


我忘记写了。

在一个只有一个核心和 1GB 内存的超差服务器上,问题就出现了。而且不是立即出现,而是过了一段时间才出现。

但我认为,如果代码一切正常,就不会出现问题。有东西堵塞了内存,我不知道是什么。

为什么我必须弄明白 呢?

你可以购买更多的服务器容量,你可以购买更多的内存,你可以无休止地升级,但这不会使我的代码正确。

从图表中删除智能交易系统时,日志中有什么内容?通常它会告诉你哪些对象正在泄露,这就给了你一个搜索方向

 
Artyom Trishkin #:

当 EA 从图表中移除时,日志中会有什么内容?通常它会告诉您哪些对象正在泄漏,从而为您提供搜索方向

我删除了日志。不过没问题,再做一次也用不了多长时间。现在我会在服务器上启动智能交易系统,明天早上(也许更早)就会有日志。

但在我的记忆中,我无法在日志中找到内存泄漏的迹象。

而且 Expert Advisor 并没有从图表中删除,很可能只是重新启动了服务器,因为日志中没有终端关闭的记录。但这并不确定。

 
Aleksandr Slavskii #:

我删除了日志。不过没问题,再做一次也用不了多长时间。我现在就启动服务器上的智能交易系统,明天早上(也许更早)就能拿到日志。

但在我的记忆中,我没有找到内存泄漏的迹象。

而且 Expert Advisor 并没有从图表中移除,很可能只是重新启动了服务器,因为日志中没有终端关闭的记录。但这并不确定。

你没有理解我问题的意思。当服务器内存耗尽并发生爆炸时,你不需要等待服务器。

如果代码中存在对象泄漏,请在运行 Expert Advisor 时在本地计算机上重新编译 - 日志中应显示泄漏对象的数量和类型。或者在图表上运行并立即将其删除--当然,如果存在泄漏,也应显示泄漏信息。

原因: