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

 
igrok333:
是否有一个函数可以返回变量的类型?

例如,你写道。

int a=10。

然后你写道。

functia(a);

它说:INT!

:)
string functia(int a) { return "INT!"; }// 突然间
string functia(double a) { return "DABLE!"; }//还意外地
 
igrok333:
是否有一个函数可以返回一个变量类型?

例如,你写道。

int a=10。

然后你写道。

functia(a);

它说:INT!

:)

来自帮助。

void OnStart() 
  { 
//---  
   CTrade trade;    
   double d_value=M_PI; 
   int i_value=INT_MAX; 
   Print("d_value: type=",GetTypeName(d_value), ",   value=", d_value); 
   Print("i_value: type=",GetTypeName(i_value), ",   value=", i_value); 
   Print("trade: type=",GetTypeName(trade)); 
//---  
  } 
//+------------------------------------------------------------------+ 
//| Возвращает в строковом виде тип                                  | 
//+------------------------------------------------------------------+ 
template<typename T> 
string GetTypeName(const T &t) 
  { 
//--- вернем тип в виде строки 
   return(typename(T)); 
//--- 
  }
 
WinProject:

这就简单多了。创建一个显示按钮(或使用现有的一个按钮)。进一步按--所有必要的对象都在所有TF上设置可见性标志。当按钮被释放时,所有对象都被设置为在所有TF上显示属性(或必要时)。没有必要删除/重新安排任何东西。唯一要做的就是在这个操作之后重新绘制图表。

对象属性OBJPROP_TIMEFRAMES

 

你能告诉我如何从指标中获取数据到一个数组吗?也就是说,很明显,我需要声明一个数组

双重num_array[]。

我不太确定接下来该怎么做......

num_array[0] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i); //索引为[0]的数组等于MA,但如果我们把索引改为[1],那么结果是num_array[1]等于

与num_array[0]的指标数据相同。情况不应该是这样的。阵列应按顺序填充。我所能想到的是将一天分为24小时

小时,声明一个二维数组,并为每个小时分配一个索引,并有自己的字符串等....。

也许有一个更简单的方法或更少的混乱?

 
Corvin85:

你能告诉我如何从指标中获取数据到一个数组吗?也就是说,很明显,我需要声明一个数组

双重num_array[]。

我不太确定接下来该怎么做......

num_array[0] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i); //索引为[0]的数组等于MA,但如果我们把索引改为[1],那么结果是num_array[1]等于

与num_array[0]的指标数据相同。情况不应该是这样的。阵列应按顺序填充。我所能想到的是将一天分为24小时

小时,声明一个二维数组,并为每个小时分配一个索引,并有自己的字符串等....。

也许有一个更简单的方法或更少的混乱?


我是这样认为的。

double num_array[];  

ArrayResize(num_array,24);

for(int i=0;i<24;i++)

{

 num_array[i] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);

}
 
Vladislav Andruschenko:

我是这样看的。

double num_array[];  

ArrayResize(num_array,24);

for(int i=0;i<24;i++)

{

 num_array[i] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);

}
啊,原来是通过ArrayResize 设置数组中的最大索引数,并通过循环运行它们。非常感谢,但是有一个问题,当所有的索引都被指标中的数据填满时,是否应该通过ArrayFree 清除它们,或者它将自己重写? 或者在24倍之后,所有的都将完全停止?对不起,我的问题很愚蠢,但数组是一种黑马,功能不明。
 
Corvin85:
哦,我可以通过ArrayResize 设置数组中索引的最大数量,并通过循环运行它们。非常感谢,但是有一个问题,当所有的索引都被指标中的数据填满时,我是否应该通过ArrayFree 清除它们,或者它将自己重写? 或者在24日之后所有的都将停止?很抱歉问得这么直白,但数组有点像黑马,功能不明。
嗯,这取决于你所追求的目的。我写的代码 用过去24个条形的mA数据来填充数组。它将被持续更新。
 
Corvin85:
哦,我可以通过ArrayResize 设置数组中索引的最大数量,并通过循环运行它们。非常感谢,但是有一个问题,当所有的索引都被指标中的数据填满时,我是否应该通过ArrayFree 清除它们,或者它将自己重写? 或者在24日之后所有的都将停止?很抱歉问得这么直白,但数组有点像黑马,功能不明。

数组 = 一组简单的变量排成一排,方便索引参考。索引是一个整数变量,用于按编号访问数组项目,以便组织一个循环。索引=数字计数器。ArrayFree = 阵列破坏 - 就像用推土机推倒破烂不堪的房屋。但它可以用ArrayResize 再次恢复。 好吧 ArrayResize是围绕住宅阵列的栅栏 我们的在这里,但陌生人在栅栏后面,禁止进入那里。你可以多次进入每个房子(给数组元素 分配一个新值)。 数组在很多方面都非常简单和方便。而那些害怕数组的人--那些...因此,最好能掌握他们的情况。

 
//+------------------------------------------------------------------+ 
//| Проверка массива                                                 | 
//+------------------------------------------------------------------+ 
#property strict
int m[10];
int n;

void OnStart() 
{ 
  ArrayInitialize(m,7);          Вывод();  // Заполнить семерками
  ArrayResize(m,7);              Вывод();  // Удалить 3 последних элемента
  ArrayResize(m,9);              Вывод();  // Увеличить размер
  m[1]=1;  m[7]=1;               Вывод();  // Изменить 2 элемента
  for(n=0; n<9; n++) m[n]=n*n;   Вывод();  // Заполнить квадратами номеров
  ArrayCopy(m,m,0,2,7);          Вывод();  // Копирование со сдвигом
  ArrayResize(m,ArraySize(m)-2); Вывод();  // Удалить 2 последних элемента
} 

void Вывод()
{
  string s="";
  for(n=0; n<ArraySize(m); n++)
  s+="  " + string(m[n]);
  Alert(ArraySize(m), ":", s);
}
尝试运行这样的脚本--并进行练习
 
Artyom Trishkin:

从参考资料来看。

cp