Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 437

 

retirez la chaîne de la structure, cela fonctionnera

ou copier élément par élément, chaque variable de la structure
ou remplacer la chaîne par un tableau statique uchar[16] ;

 
Taras Slobodyanik:

retirez la chaîne de la structure, cela fonctionnera

Soit vous copiez élément par élément, chaque variable de la structure
ou remplacer la chaîne par un tableau statique uchar[16] ;


quelle chaîne voulez-vous supprimer ?

En fait, j'ai consulté le livre de référence pour voir un exemple permettant de comprendre comment une variable de type structure peut être copiée dans une autre variable du même type structure... Et ce qu'il adviendra des fonctions qui y sont déclarées. Copier élément par élément n'est pas bon... ...ça fait une très longue traînée.

 
Aleksandr Brown:

quelle ficelle enlever ?

En fait, j'ai utilisé le livre de référence pour voir un exemple, pour comprendre comment une variable de type structure peut être copiée dans une autre variable du même type structure... Et ce qu'il advient des fonctions qui y sont déclarées. Copier élément par élément n'est pas bon... ...il s'avère juste que c'est un très long trajet.

Avez-vous essayéArrayCopy?

 
STARIJ:

Avez-vous essayé ArrayCopy ?


Nous parlons de données structurées. Vous voulez dire une variable de type structure à représenter comme un tableau ? ??? :-))) Ce n'est pas une option non plus... Il y a des fonctions dans la structure que si vous les déclarez séparément, il y aura encore plus de confusion.

 
Oui, ArrayCopy est un non-sens. Si vous avez besoin de sortir des composants de couleur - ici
//+------------------------------------------------------------------+ 
//| Компоненты цвета                                                 | 
//+------------------------------------------------------------------+ 
#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
}

Bien qu'il soit plus facile d'utiliser ColorToString(testColor)

Si vous voulez utiliser la conversion de données, utilisez ServiceDesk. L'erreur que vous mentionnez est également présente dans le MetaEditor de MT5.

 
Aleksandr Brown:

quelle ficelle enlever ?

En fait, j'ai utilisé le livre de référence pour voir un exemple, pour comprendre comment une variable de type structure peut être copiée dans une autre variable du même type structure... Et ce qu'il advient des fonctions qui y sont déclarées. Copier élément par élément n'est pas bon... ...c'est une très longue traînée.


Oui, désolé, j'ai mal lu ce conseil...

Autant que je me souvienne, un nouveau type d'union a été introduit et vous devriez faire quelque chose comme ceci :

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

Bonjour. Veuillez préciser pourquoi l'information n'est pas correcte.


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

Bonjour. Pouvez-vous me dire pourquoi il ne donne pas les bonnes informations ?


Où avez-vous vu des informations incorrectes ?

Et, s'il vous plaît, insérez le code correctement (j'ai corrigé dans votre post)

Posté dans rectangle rouge :


 

Je l'ai obtenu à partir du code, désolé - je le prendrai en compte à l'avenir.

une valeur négative est affichée de manière incorrecte. cela peut être dû au type de double

Permettez-moi de clarifier une question - comment faire pour qu'une valeur négative soit affichée correctement et si elle peut être normalisée comme une valeur positive (qui est affichée correctement).

 
gastinets:

Je l'ai obtenu à partir du code, désolé - je le prendrai en compte à l'avenir.

La valeur négative est affichée de manière incorrecte. Cela doit être dû au type double.

Je vais clarifier la question - comment faire pour qu'une valeur négative soit affichée correctement et si elle peut être normalisée comme une valeur positive (qui est affichée correctement).


Quand j'étais enfant, quand je jouais avec une calculatrice, j'obtenais le même genre de E. Après avoir commencé à programmer, je me suis souvenu de ma calculatrice et tout est rentré dans l'ordre.


Essayez de le convertir en chaîne si vous voulez voir le nombre dans une chaîne.

   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));