错误、漏洞、问题 - 页 1697

 
Karputov Vladimir:
Print(MQLInfoString(MQL_PROGRAM_NAME)); 返回短的指标名称。如果没有指定短名称,将返回全名。
谢谢你。
 
Vladimir Pastushak:

谢谢你。

Alexey,你的例子不起作用,父类的方法仍然被倾倒在继承者中,而继承者是不应该被倾倒的。


它不应该是这样的,你能抛出代码吗?

那些在 父代 保护 公开的数据 在被保护的继承中被保护

	          
 
  1. 我们用手在NONE图表上设置指标
    #property indicator_separate_window
    #property indicator_buffers 1
    #property indicator_plots   1
    
    double Buffer[];
    
    int handle = INVALID_HANDLE;
    
    void OnInit()
    {
      ::SetIndexBuffer(0, Buffer, INDICATOR_DATA);
      
      handle = ChartIndicatorGet(0, 1, ChartIndicatorName(0, 1, 0));  
    }
    
    #define  TOSTRING(A) #A + " = " + (string)A + "\n"
    
    int OnCalculate( const int rates_total,
                     const int prev_calculated,
                     const datetime &time[],
                     const double &open[],
                     const double &high[],
                     const double &low[],
                     const double &close[],
                     const long &tick_volume[],
                     const long &volume[],
                     const int &spread[] )
    {
      if (handle != INVALID_HANDLE)
      {
        Buffer[rates_total - 1] = MathRand();
        
        double BufferCopy[];
        
        if (CopyBuffer(handle, 0, 0, 1, BufferCopy) > 0)
          Print(TOSTRING(BufferCopy[0]) + TOSTRING(Buffer[rates_total - 1]));
      }
      
      return(rates_total);
    }
  2. 用手将指标从图表中取出。
  3. 在日志中,我们看到该指标继续运行。你可以关闭终端中的所有图表,但它仍然在执行。当然,这也无济于事。
    void OnDeinit( const int Reason )
    {
      if (handle != INVALID_HANDLE)  
        IndicatorRelease(handle);
      
      return;
    }
  4. 重启终端会停止指标的执行。
  5. 有多少指标可以闲置,而我们甚至不知道它们?根本就没有控制。
 
fxsaber:
  1. 在图表上手工设置NULL指标
  2. 用手将指标从图表中取出。
  3. 在日志中,我们看到该指标继续运行。你可以关闭终端中的所有图表,但它仍然会被执行。
  4. 重新启动终端会停止执行该指标。
  5. 有多少指标可以闲置,而我们甚至没有听到任何关于它们的消息?根本就没有控制。

阅读和查看带有#define和带有: 的代码是不可能的。

请按照普通MQL5的风格重写代码。

 
fxsaber:
  1. 在图表上手工设置NULL指标
  2. 用手将指标从图表中取出。
  3. 在日志中,我们看到该指标继续运行。你可以关闭终端中的所有图表,但它仍然会被执行。
  4. 重新启动终端会停止执行该指标。
  5. 有多少指标可以在闲置模式下执行,而我们甚至没有听说过它们?根本就没有控制。
添加_StopFlag检查不会有帮助?
 
Karputov Vladimir:

#define和用: 来阅读和观察代码是不可能的。

请以常见的MQL5风格重写代码。

这是MQL5风格。请研究什么是#define,什么是::。
 
Alexey Kozitsyn:
增加一个_StopFlag检查不会有帮助?
在哪里添加,至少在理论上能有什么帮助。这是一个终端的错误。而且这是一个严重的错误。我很幸运--我在日志中看到,该指标是有效的。然而,有很多指标在终端工作,却没有任何相关信息。但话题来了,为什么我的CPU在一个空的终端上会有如此大的负荷?
 
fxsaber:
这就是MQL5的风格。请研究什么是#define,什么是::。
我不是这个意思。在你的例子中根本不需要"::"--也许这是你的习惯,但那里根本不需要。没有#defane,代码也可以正常编写。试着重写一下,看看是否有什么东西变得清晰。
 
Karputov Vladimir:
我不是这个意思。":: "在你的例子中根本不需要--也许这是你的习惯,但那里根本不需要。没有#defane,代码也可以写得很好。试着重写一下,看看是否有什么东西变得清晰。

我只在一个地方有"::"。而且我不会从头开始写代码。作为一项规则,我从我的代码中取出一些东西。这里有 :: 有一个通过复制粘贴的。我从来没有注意过它,但我已经把它删除了,因为它让你感觉好多了。

但不删除#define并不是一个原则问题。99%的代码可以不用它来写。这不是一个可以拿走它的场合。

而有1%(相对而言)的时候,你不能没有#define!

 
fxsaber:

我只在一个地方有"::"。而且我不从头开始写代码。作为一项规则,我从我的代码中取出一些东西。这里是 :: 有一个通过复制粘贴的。我从来没有注意过它,但我已经把它删除了,因为它让你感觉好多了。

但不删除#define并不是一个原则问题。99%的代码可以不用它来写。这不是一个可以拿走它的场合。

而有1%(有条件的),当你不能没有#define的时候!

如果你不复制缓冲区。

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1

double Buffer[];

int handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {
   SetIndexBuffer(0,Buffer,INDICATOR_DATA);

   handle=ChartIndicatorGet(0,1,ChartIndicatorName(0,1,0));
  }

#define  TOSTRING(A) #A + " = " + (string)A + "\n"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   if(handle!=INVALID_HANDLE)
     {
      Buffer[rates_total-1]=MathRand();

      double BufferCopy[];
      Print(__FUNCTION__);
      //if(CopyBuffer(handle,0,0,1,BufferCopy)>0)
      //   Print(TOSTRING(BufferCopy[0])+TOSTRING(Buffer[rates_total-1]));
     }

   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int Reason)
  {
   Print("#1 OnDeinit");
   if(handle!=INVALID_HANDLE)
     {
      Print("#2 OnDeinit");
      IndicatorRelease(handle);
      Print("#3 OnDeinit");
     }
   Print("#4 OnDeinit");
   return;
  }
//+------------------------------------------------------------------+

则该指标成功完成其工作

2016.09.23 12:11:12.655 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:12.737 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:12.737 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:12.737 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:12.747 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:13.406 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:13.406 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:13.406 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:14.794 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:15.747 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:16.936 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:19.339 2 (SBRF-12.16,M1)       #1 OnDeinit
2016.09.23 12:11:19.339 2 (SBRF-12.16,M1)       #2 OnDeinit
2016.09.23 12:11:19.339 2 (SBRF-12.16,M1)       #3 OnDeinit
2016.09.23 12:11:19.339 2 (SBRF-12.16,M1)       #4 OnDeinit