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

 

从结构中删除字符串,它将工作

或逐一复制元素,结构中的每个变量
或用静态数组 ugar[16]替换字符串。

 
Taras Slobodyanik:

从结构中删除字符串,它将工作

要么你逐个元素复制,结构中的每个变量都要复制。
或者用静态数组 ugar[16]替换字符串。


你想删除哪个字符串?

我实际上是去参考书上看了一个例子,以了解一个结构类型的变量如何被复制到另一个相同结构类型的变量中......。以及在其中声明的函数会发生什么。一个元素一个元素地复制并不是好事.........它可以拖得很久。

 
Aleksandr Brown:

哪些字符串要删除?

事实上,我已经用参考书看了一个例子,了解一个结构类型的变量如何被复制到另一个相同结构类型的变量中......以及在其中声明的函数会发生什么。一个元素一个元素地复制并不是好事.........它只是变成了一个非常长的阻力。

你试过ArrayCopy 吗?

 
STARIJ:

你试过ArrayCopy吗?


我们正在谈论结构化数据。你是说结构类型的变量要以数组的形式表示?:-)))也不是一种选择...结构中的一些功能,如果你单独声明,就会出现更多的混乱。

 
是的,ArrayCopy 是在胡说八道。如果你需要输出彩色组件--这里
//+------------------------------------------------------------------+ 
//| Компоненты цвета                                                 | 
//+------------------------------------------------------------------+ 
#property strict
#property script_show_inputs
input     color  testColor=0x00ff00;  // задайте цвет для тестирования

//--- функция для вывода цвета в виде строки
string toString(color x)
{
 return  "("+
      (string) ( x & 0xff)           +":"+
      (string) ((x & 0xff00 ) >> 8)  +":"+
      (string) ((x & 0xff0000)>> 16) +")"   ;
}

void OnStart() 
{ 
   Alert("color ",testColor," = ",toString(testColor));  // выдает color clrLime = (0:255:0) а ведь думал это clrGreen
}

尽管使用ColorToString(testColor)更容易。

如果你想使用数据转换,请使用ServiceDesk。你提到的错误也出现在MT5的MetaEditor中

 
Aleksandr Brown:

要删除哪个字符串?

事实上,我已经用参考书看了一个例子,了解一个结构类型的变量如何被复制到另一个相同结构类型的变量中......以及在其中声明的函数会发生什么。一个元素一个元素地复制并不是好事.........这是个很长的拖累。


是的,对不起,我误读了这个建议...

在我的印象中,现在已经引入了一个新的联盟 类型,你应该做这样的事情。

#property script_show_inputs

#define  red    colir[0]
#define  green  colir[1]
#define  blue   colir[2]

input color          testColor=clrBlue;// задайте цвет для тестирования
//--- структура для представления цвета в RGB
union RGB
  {
   color             cvet;
   uchar             colir[4];
   string            toString();    // функция для получения в виде строки
  };
//--- функция для вывода цвета в виде строки
string RGB::toString(void)
  {
   string out="("+(string)red+":"+(string)green+":"+(string)blue+")";
   return out;
  }

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- переменная для хранения в RGB
   RGB colorRGB;

   colorRGB.cvet=testColor;
   Print("color ",colorRGB.cvet," = ",colorRGB.toString());
//---
  }
 

下午好,请说明为什么没有显示正确的信息。


//+------------------------------------------------------------------+
//---- indicator buffers
double      AO[];                // массив для индикатора iAO
//---- handles for indicators
int         AO_handle;           // указатель на индикатор iAO
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- создание указателя на объект - индикатор iAO
   AO_handle=iAO(NULL,0);
//--- если произошла ошибка при создании объекта, то выводим сообщение
   if(AO_handle<0)
     {
      Print("Объект iAO не создан: Ошибка исполнения = ",GetLastError());
      //--- принудительное завершение программы
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ArrayFree(AO);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

//--- Достаточно ли количество баров для работы
   if(Bars(_Symbol,_Period)<10) // общее количество баров на графике меньше 10?
     {
      Alert("На графике меньше 10 баров, советник не будет работать!!");
      return;
     }

   ArraySetAsSeries(AO,true);
//--- заполнение массива AO[] текущими значениями индикатора iAO
//--- задаём порядок индексации массива как в таймсерии
//--- если произошла ошибка, то прекращаем выполнение дальнейших операций;
   if(CopyBuffer(AO_handle,0,0,100,AO)<=0)return;
   double AO_1=AO[1];
   AO_1=NormalizeDouble(AO_1,7);
   Print("AO=",AO_1);
   double AO_2=AO[2];
   AO_2=NormalizeDouble(AO_2,7);
   Print("AO2=",AO_2);
  }
//+------------------------------------------------------------------+
 
gastinets:

你好,请你告诉我为什么它不能提供正确的信息?


你在哪里看到了不正确的信息?

还有,请正确插入代码(我在你的帖子中纠正了)。

发布在红色矩形中。


 

我从代码中得到的,对不起--我将来会考虑到这一点的。

负值显示不正确。这可能是由于双数类型的 原因。

让我澄清一个问题--如何使负值正确显示,以及它是否可以像正值一样被规范化(正确显示)。

 
gastinets:

我从代码中得到的,对不起--我将来会考虑到这一点的。

负值显示不正确,一定是由于双数类型 的原因。

我将澄清这个问题--如何使负值正确显示,以及是否可以像正值一样规范化(正确显示)。


当我还是个孩子的时候,当我涉足计算器的时候,我曾经得到过同样的E。在我开始编程后,我想起了我的计算器,一切都恢复了正常。


如果你想看到字符串中的数字,请尝试将其转换为字符串。

   double AO_1=AO[1];
   AO_1=NormalizeDouble(AO_1,7);
   Print("AO=",DoubleToString(AO_1,7));
   double AO_2=AO[2];
   AO_2=NormalizeDouble(AO_2,7);
   Print("AO2=",DoubleToString(AO_2,7));
原因: