Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 437

 

eliminar la cadena de la estructura, funcionará

o copiar elemento por elemento, cada variable de la estructura
o sustituir la cadena por un array estático uchar[16];

 
Taras Slobodyanik:

eliminar la cadena de la estructura, funcionará

O bien se copia elemento por elemento, cada variable de la estructura
o sustituir la cadena por un array estático uchar[16];


¿qué cadena quiere eliminar?

De hecho fui al libro de referencia para ver un ejemplo para entender como una variable de tipo estructura puede ser copiada en otra variable del mismo tipo de estructura... Y qué ocurre con las funciones que se declaran en ellos. Copiar elemento por elemento no es bueno... ...hace un arrastre muy largo.

 
Aleksandr Brown:

¿qué cuerdas eliminar?

De hecho, he utilizado el libro de referencia para ver un ejemplo, para entender cómo se puede copiar una variable de tipo estructura en otra variable del mismo tipo de estructura... Y qué pasa con las funciones que se declaran en ellos. Copiar elemento por elemento no es bueno... ...sólo resulta ser un lastre muy largo.

¿Has probadoArrayCopy?

 
STARIJ:

¿Has probado ArrayCopy?


Estamos hablando de datos estructurados. ¿Te refieres a una variable del tipo estructura para ser representada como un array? :-))) Tampoco es una opción... Hay funciones en la estructura que si las declaras por separado, habrá aún más confusión.

 
Sí, ArrayCopy no tiene sentido. Si necesita emitir componentes de color - aquí
//+------------------------------------------------------------------+ 
//| Компоненты цвета                                                 | 
//+------------------------------------------------------------------+ 
#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
}

Aunque es más fácil utilizar ColorToString(testColor)

Si desea utilizar la conversión de datos, utilice el ServiceDesk. El error que mencionas también está presente en MetaEditor en MT5

 
Aleksandr Brown:

¿qué cadena eliminar?

De hecho, he utilizado el libro de referencia para ver un ejemplo, para entender cómo se puede copiar una variable de tipo estructura en otra variable del mismo tipo de estructura... Y qué pasa con las funciones que se declaran en ellos. Copiar elemento por elemento no es bueno... ...es un lastre muy largo.


Sí, lo siento, leí mal ese consejo...

Por lo que recuerdo, ahora se ha introducido un nuevo tipo de unión y deberías hacer algo así:

#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());
//---
  }
 

Buenas tardes, por favor aclare por qué no muestra la información correcta.


//+------------------------------------------------------------------+
//---- 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:

Hola, ¿podríais decirme por qué no da la información correcta?


¿Dónde ha visto información incorrecta?

Y, por favor, inserta el código correctamente (lo he corregido en tu post)

Publicado en el rectángulo rojo:


 

Lo he sacado del código, lo siento - lo tendré en cuenta en el futuro

El valor negativo se muestra de forma incorrecta. Esto puede deberse al tipo doble

permítanme aclarar una pregunta - cómo hacer que un valor negativo se muestre correctamente y si se puede normalizar como un valor positivo (que se muestra correctamente)

 
gastinets:

Lo he sacado del código, lo siento - lo tendré en cuenta en el futuro

El valor negativo se muestra de forma incorrecta. Debe ser por el tipo de doble.

Aclaro la pregunta: cómo hacer que un valor negativo se muestre correctamente y si se puede normalizar como un valor positivo (que se muestra correctamente)


Cuando era niño, cuando jugaba con una calculadora, solía obtener el mismo tipo de E. Después de empezar a programar me acordé de mi calculadora y todo volvió a la normalidad.


Intenta convertirlo en una cadena si quieres ver el número en una cadena.

   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));
Razón de la queja: