Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 437

 

rimuovere la stringa dalla struttura, funzionerà

o copiare elemento per elemento, ogni variabile nella struttura
o sostituire la stringa con un array statico uchar[16];

 
Taras Slobodyanik:

rimuovere la stringa dalla struttura, funzionerà

O si copia elemento per elemento, ogni variabile nella struttura
o sostituire la stringa con un array statico uchar[16];


quale stringa volete rimuovere?

In realtà sono andato sul libro di riferimento per vedere un esempio per capire come una variabile di tipo struttura può essere copiata in un'altra variabile dello stesso tipo struttura... E cosa succede alle funzioni che sono dichiarate in esse. Copiare elemento per elemento non va bene... ...fa un trascinamento molto lungo.

 
Aleksandr Brown:

quali stringhe rimuovere?

In effetti, ho usato il libro di riferimento per vedere un esempio, per capire come una variabile di tipo struttura può essere copiata in un'altra variabile dello stesso tipo struttura... E cosa succede alle funzioni che sono dichiarate in esse. Copiare elemento per elemento non va bene... ...si scopre solo che è una cosa molto lunga.

Avete provatoArrayCopy?

 
STARIJ:

Avete provato ArrayCopy?


Stiamo parlando di dati strutturati. Intendi una variabile di tipo struttura da rappresentare come un array? :-))) Nemmeno un'opzione... Ci sono funzioni nella struttura che se le dichiarate separatamente, ci sarà ancora più confusione.

 
Sì, ArrayCopy non ha senso. Se avete bisogno di emettere componenti a colori - qui
//+------------------------------------------------------------------+ 
//| Компоненты цвета                                                 | 
//+------------------------------------------------------------------+ 
#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
}

Anche se è più facile usare ColorToString(testColor)

Se volete usare la conversione dei dati, usate ServiceDesk. L'errore che hai menzionato è presente anche in MetaEditor in MT5

 
Aleksandr Brown:

quale stringa rimuovere?

In effetti, ho usato il libro di riferimento per vedere un esempio, per capire come una variabile di tipo struttura può essere copiata in un'altra variabile dello stesso tipo struttura... E cosa succede alle funzioni che sono dichiarate in esse. Copiare elemento per elemento non va bene... ...è un'operazione molto lunga.


Sì, scusa, ho letto male quel consiglio...

Per quanto mi ricordo, ora è stato introdotto un nuovo tipo di unione e si dovrebbe fare qualcosa del genere:

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

Buon pomeriggio, per favore chiarite perché non mostra le informazioni corrette.


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

Ciao, potresti dirmi perché non dà le informazioni giuste?


Dove ha visto informazioni errate?

E, per favore, inserisci il codice correttamente (ho corretto nel tuo post)

Pubblicato in rettangolo rosso:


 

L'ho preso dal codice, scusa - ne terrò conto in futuro

il valore negativo viene visualizzato in modo errato. ciò può essere dovuto al tipo doppio

permettetemi di chiarire una domanda - come fare in modo che un valore negativo sia visualizzato correttamente e se può essere normalizzato come un valore positivo (che è visualizzato correttamente)

 
gastinets:

L'ho preso dal codice, scusa - ne terrò conto in futuro

Il valore negativo viene visualizzato in modo errato. Deve essere a causa del tipo doppio.

Chiarirò la domanda - come far sì che un valore negativo sia visualizzato correttamente e se può essere normalizzato come un valore positivo (che è visualizzato correttamente)


Da bambino, quando mi dilettavo con la calcolatrice, ottenevo lo stesso tipo di E. Dopo aver iniziato a programmare mi sono ricordato della mia calcolatrice e tutto è tornato alla normalità.


Prova a convertirlo in una stringa se vuoi vedere il numero in una stringa.

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