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

 
下午好,请指教......升级到最新版本后,"SmoothAlgorithms "的错误开始飞出。而SMA、LWMA、Parma、Vidya的平均水平也停止了工作。它在这一行发誓:"array out of range in 'SmoothAlgorithms.mqh' (3394,9)"。我应该如何修复它?谢谢你!
附加的文件:
 
007yurik:
下午好,请指教......升级到最新版本后,"SmoothAlgorithms "的错误开始飞出。而SMA、LWMA、Parma、Vidya的平均水平也停止了工作。它在这一行发誓:"array out of range in 'SmoothAlgorithms.mqh' (3394,9)"。我应该如何修复它?谢谢你!
在作者图书馆的讨论页上给他写信。
Библиотеки: SmoothAlgorithms
Библиотеки: SmoothAlgorithms
  • 2017.01.31
  • www.mql5.com
SmoothAlgorithms: Автор: Nikolay Kositsin...
 
Artyom Trishkin:
请在作者图书馆的讨论页上写下关于它的内容。
谢谢,但他没有回复。 在另一个主题中,我将尝试提供的那个。
 

有必要使用数字值作为枚举元素。

enum ENUM_HOURS
{
 0,
 1,
 ..,
 23
};

这是不允许的。编译错误标识符预期。有什么办法吗(只留下数字值)?

 
Juer:

有必要使用数字值作为枚举元素。

这是不允许的。编译错误标识符预期。有什么办法吗(只留下数字值)?

//+------------------------------------------------------------------+
enum ENUM_HOURS
  {
   HOUR_0,  // 0
   HOUR_1,  // 1
   HOUR_2,  // 2
   HOUR_3,  // 3
   HOUR_4,  // 4
   HOUR_5,  // 5
   HOUR_6,  // 6
   HOUR_7,  // 7
   HOUR_8,  // 8
   HOUR_9,  // 9
   HOUR_10, // 10
   HOUR_11, // 11
   HOUR_12, // 12
   HOUR_13, // 13
   HOUR_14, // 14
   HOUR_15, // 15
   HOUR_16, // 16
   HOUR_17, // 17
   HOUR_18, // 18
   HOUR_19, // 19
   HOUR_20, // 20
   HOUR_21, // 21
   HOUR_22, // 22
   HOUR_23  // 23
  };
//+------------------------------------------------------------------+
 

你能给我一个链接,说明这些<> 符号的含义吗?

_GlobalVariableGet<string>("ResourceName")
 

是否有办法以编程方式设置要优化的参数列表?

问题是,我有很多的参数。数以千计的人。我把它们放在一个单独的程序中。EA在初始化期间通过外部文件加载它们。所以我现在的任务是优化这些参数。

例如,这是一个带有数值和范围的可优化参数的文件列表。从那里读取,并把结果也写在那里。

 

我正在编写一个关闭图表的函数,没有EA或脚本。我使用ChartGetString函数 在图表上获得专家顾问和脚本的名称。如果两个都是空的,我就关闭它们。问题是在与图表关闭的行中,根据条件。这个条件永远不会得到满足。以下是代码。

 if( ExpertName == "" && ScriptName == "" ){ChartClose ( prevChart );}
 else Print("Не закрываем график . Имя эксперта =",ExpertName,"= ScriptName =",ScriptName,"=");

以下是打印显示的内容

Не закрываем график . Имя эксперта == ScriptName ==

我理解,我们可以将条件改为以下内容

StringLen(ExpertName) == 0 && StringLen(ScriptName) == 0

那么,我们还应该如何将字符串变量与一个空字符串进行比较?

 

下午好!我制作了.mqh用于数据处理和资源 存储。一切正常,但有一个细微的差别,如果我编译指标,.mqh会被重置,并重新进行存储的权重处理。目标 - 只要资源中存在数据 ,就不会被重置。错误在哪里,如何解决?

// Сохранение данных
#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166
#include <GlobalVariables.mqh> 

const RESOURCEDATA<MqlTick>m_Resource("::"+__FILE__); // Ресурс для передали данных (тики)
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CMyTicks
  {
protected:
public:
   //+------------------------------------------------------------------+
   //| Constructor.                                                     |
   //+------------------------------------------------------------------+      
   void CMyTicks()
     {
      _GlobalVariableSet("ResourceName",m_Resource.GetFullName()); // Записали в глобальную переменную полное имя ресурса (read-only)      
     }
   //+------------------------------------------------------------------+
   //| Destructor.                                                     |
   //+------------------------------------------------------------------+      
   void ~CMyTicks()
     {
      //_GlobalVariableDel("ResourceName");
     }

   //+------------------------------------------------------------------+  
   void CollectTicks()
     {
      MqlTick m_Ticks[];
      CopyTicks(_Symbol,m_Ticks,COPY_TICKS_ALL,0,5); // Сформировали данные
      m_Resource=m_Ticks; // Записали данные
     }
  };
//+------------------------------------------------------------------+
// Получение данных
#property indicator_chart_window
#property indicator_plots 0

#include <Test_Keep_Info_13.mqh>
CMyTicks  Test;

#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166
#include <GlobalVariables.mqh> 

static const RESOURCEDATA<MqlTick>Resource(_GlobalVariableGet<string>("ResourceName")); // Создали ресурс на основе переданного в глобальной переменной полного имени  
MqlTick Ticks[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,const int prev_calculated,const int,const double &[])
  {
   if(prev_calculated==0)
     {
      Resource.Get(Ticks); // Считали данные из ресурса.
      ArrayPrint(Ticks);   // Распечатали полученные данные

      if(ArraySize(Ticks)<1)
        {
         Test.CollectTicks();
         Print(" SAVE TICKS ");
        }

      Resource.Get(Ticks); // Считали данные из ресурса.
      ArrayPrint(Ticks);   // Распечатали полученные данные
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
pivomoe:

如何正确比较一个变量字符串和一个空字符串?

有两个正常的空字符串 - "" 和 NULL。而且还可以有自定义的空字符串。