新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 782

 
Seric29:

我有个想法,想写一个函数,可以取并移位一个数组。问题是如何使这个函数本身能够确定什么类型的数组是一维或二维的,这样我就不必每次都在参数中指定数组是二维的还是普通的。同时,我想应用一个模板,这样我就不需要指定数组的类型。

我怎样才能使它不需要指定什么类型的阵列?

做到超载。

template<typename T>
void MoveArray(T &array1[][]) // 2ух мерный.
{
// тело
}
template<typename T>
void MoveArray(T &array1[])// одномерный.
{
// тело
}
 
Ilya Prozumentov:

要做的是超载。

第二个维度可以是动态的吗?
 
Alexey Viktorov:
第二个维度可以是动态的吗?

它不是动态的,只是写成了一个接收的参数,只要加方括号就可以了。

 

我如何在一个循环中(或其他方式)实现对可能的条件变体的枚举?


例如,有2个指标MA和MACD,即它们代表3种可能的条件变体。

1 选项 - if(iMA ...) {...};

第二种情况 - if(iMACD ...) {...};

变体3 - if(iMA ... iMACD ...) {...}。


结合输入参数很容易,但如何结合条件呢?如果有2个以上的指标或公式,这尤其有用


如果有的话,请提供例子的链接

 
Alexandr Sokolov:

如何在一个循环中(或其他方式)实现对条件的可能变体的枚举?

如果我理解正确的话,答案可以在该主题 中找到。

 

你好,我又一次不明白一些明显的问题。

那么,毕竟如何将一个数组传递给一个函数呢?

double b[5]={1,2,3,4,5};
void OnStart()
  {
//---
Func(b[]);

  }
//+------------------------------------------------------------------+
void Func(double &a[])
      {
         Alert(a[3]);
      }

错了。
']'- 预期表达
'b' - 不允许参数转换

假设我知道如何消除第一个错误。

Func(b[3]);

但在这种情况下呢,只有第三个元素会被通过?这毫无意义。
我怎样才能把数组作为一个整体来传递?
谢谢你。

 
Mikhail Sobolev:

你好,我又一次不明白一些明显的问题。

那么,毕竟如何将一个数组传递给一个函数呢?

错了。
']'- 预期表达
'b' - 不允许参数转换

假设我知道如何消除第一个错误。

但在这种情况下呢,只有第三个元素会被通过?这毫无意义。
我怎样才能把数组作为一个整体来传递?
谢谢你。

Func(b);
 
int OnCalculate (const int rates_total,      // размер массива price[] 
                 const int prev_calculated,  // обработано баров на предыдущем вызове 
                 const int begin,            // откуда начинаются значимые данные 
                 const double& price[]       // массив для расчета 
                );

请解释变量开始的机制


这个链接似乎有信息https://www.mql5.com/ru/docs/basis/function/events, 但我要么不明白,要么没有找到。我不明白开始时的默认值是什么,以及它是如何随着指标中的周期变化而变化的。


例如,我知道函数OnCalculate()中的return()将返回值分配给变量prev_calculated,它将在下一次调用OnCalculate()时用于计算,即在下一个tick时。


请用同样简单的语言描述在函数OnCalculate()中开始的变量的机制

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 

下午好。

你能告诉我为什么使用这段代码的OnTick函数 不能将数据写到文件中吗?

//===将数据写入文件 ====

h1=FileOpen("test_bar.csv",FILE_CSV|FILE_WRITE|FILE_READ,"," )。

FileSeek(h1, 0, SEEK_END)。

FileWrite(h1, TimeToStr(Time[1],TIME_DATE|TIME_MINUTES),i,Open[1],High[1],Low[1],Close[1], Parabola57Up, ")。

FileClose(h1)。


而这是在历史测试期间。当专家顾问在线工作时,它一直在记录。

谢谢你

 
Alexandr Sokolov:

我如何在一个循环(或其他)中实现对可能的条件变体的枚举?


例如,有2个指标MA和MACD,即它们代表3种可能的条件变体。

1 选项 - if(iMA ...) {...};

第二种情况 - if(iMACD ...) {...};

变体3 - if(iMA ... iMACD ...) {...}。


结合输入参数很容易,但如何结合条件呢?如果有2个以上的指标或公式,这尤其有用


如果你有的话,给我一些例子的链接。

我想做一个自我优化,但不仅仅是通过指标的输入参数。我明白

,但如何进行条件的循环?例如,有3个指标(为简单起见,我们不考虑循环中输入参数的选择),它们有7种可能的条件/组合

例如,前三个条件有一个指标
1) if(指标#1 ...) {...};
2) if(指标#2 ...) {...};
3) if(指标#3......) {...};

两个指标的后三个条件 是:
4) if(#1 ... && #2 ...) {...};
5) if(#1 ... && #3 ...) {...};
6) if(#2 ... && #3...) {...};

而在最后的第七个条件中,所有三个可用的指标
7) if(#1 ... && #2 ... && #3 ... ) { ... };

而如果也有可能的话,最好是循环列举逻辑条件例如,不要写&& || > < ==等等,而是循环

。如果我们能手动写出每一种可能的变体,EA会结合并检查所有可能的输入参数、组合或单个指标和逻辑条件的变体,那就更好了。