Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 437

 

Entfernen Sie die Zeichenkette aus der Struktur, dann wird es funktionieren

oder Element für Element jede Variable in der Struktur kopieren
oder ersetzen Sie die Zeichenkette durch ein statisches Array uchar[16];

 
Taras Slobodyanik:

Entfernen Sie die Zeichenkette aus der Struktur, dann wird es funktionieren

Entweder Sie kopieren Element für Element, jede Variable in der Struktur
oder ersetzen Sie die Zeichenkette durch ein statisches Array uchar[16];


Welche Zeichenfolge möchten Sie entfernen?

Ich habe im Referenzbuch nach einem Beispiel gesucht, um zu verstehen, wie man eine Variable des Strukturtyps in eine andere Variable desselben Strukturtyps kopiert... Und was passiert mit den Funktionen, die darin deklariert werden? Element für Element zu kopieren ist nicht gut... ...ist es ein sehr langer Zug.

 
Aleksandr Brown:

Welche Zeichenfolge ist zu entfernen?

Tatsächlich habe ich das Referenzbuch benutzt, um ein Beispiel zu sehen, um zu verstehen, wie eine Variable des Strukturtyps in eine andere Variable desselben Strukturtyps kopiert werden kann... Und was passiert mit den Funktionen, die darin deklariert werden? Element für Element zu kopieren ist nicht gut... ...es wird nur sehr langwierig.

Haben SieArrayCopy ausprobiert?

 
STARIJ:

Haben Sie ArrayCopy ausprobiert?


Wir sprechen hier von strukturierten Daten. Sie meinen eine Variable vom Typ Struktur, die als Array dargestellt werden soll??? :-))) Auch das ist keine Option... Es gibt Funktionen in der Struktur, die, wenn Sie sie separat deklarieren, noch mehr Verwirrung stiften.

 
Ja, ArrayCopy ist unsinnig. Wenn Sie Farbkomponenten ausgeben müssen - hier
//+------------------------------------------------------------------+ 
//| Компоненты цвета                                                 | 
//+------------------------------------------------------------------+ 
#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
}

Obwohl es einfacher ist , ColorToString(testColor) zu verwenden

Wenn Sie die Datenkonvertierung nutzen möchten, verwenden Sie ServiceDesk. Der von Ihnen erwähnte Fehler tritt auch im MetaEditor von MT5 auf

 
Aleksandr Brown:

Welche Zeichenfolge ist zu entfernen?

Tatsächlich habe ich das Referenzbuch benutzt, um ein Beispiel zu sehen, um zu verstehen, wie eine Variable des Strukturtyps in eine andere Variable desselben Strukturtyps kopiert werden kann... Und was passiert mit den Funktionen, die darin deklariert werden? Element für Element zu kopieren ist nicht gut... ...es ist sehr langwierig.


Ja, tut mir leid, ich habe diesen Hinweis falsch verstanden...

Soweit ich mich erinnere, wurde jetzt ein neuer Gewerkschaftstyp eingeführt, und Sie sollten etwas in dieser Art tun:

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

Guten Tag, bitte klären Sie, warum die Informationen nicht korrekt angezeigt werden.


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

Könnten Sie mir bitte sagen, warum es nicht die richtigen Informationen anzeigt?


Wo haben Sie falsche Informationen gesehen?

Und, bitte, fügen Sie den Code richtig ein (ich habe ihn in Ihrem Beitrag korrigiert)

Veröffentlicht in rotes Rechteck:


 

Ich habe es aus dem Code, sorry - ich werde es in Zukunft berücksichtigen

ein negativer Wert wird falsch angezeigt. Dies kann auf den Doppeltyp zurückzuführen sein

Lassen Sie mich eine Frage klären - wie kann ein negativer Wert korrekt angezeigt werden und ob er wie ein positiver Wert normalisiert werden kann (der korrekt angezeigt wird)

 
gastinets:

Ich habe es aus dem Code, sorry - ich werde es in Zukunft berücksichtigen

Der negative Wert wird nicht korrekt angezeigt, was wohl am Typ double liegt.

Ich werde die Frage klären, wie ein negativer Wert korrekt angezeigt werden kann und ob er wie ein positiver Wert (der korrekt angezeigt wird) normalisiert werden kann.


Als ich als Kind mit einem Taschenrechner herumspielte, bekam ich immer die gleiche Art von E's. Nachdem ich mit dem Programmieren begonnen hatte, erinnerte ich mich an meinen Taschenrechner und alles war wieder normal.


Versuchen Sie, sie in eine Zeichenkette zu konvertieren, wenn Sie die Zahl in einer Zeichenkette sehen wollen.

   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));
Grund der Beschwerde: