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

 
ANDREY:

Ho aggiunto le parentesi quadre void PrintArray(double &eArray[]) Il compilatore non ha mostrato alcun errore o avvertimento.
MA..... la funzione Print() non ha stampato una sola volta per qualche motivo.

Capisco la tua pigrizia, perché anch'io sono così. Se non sei troppo pigro e il mio entusiasmo lo sostituisce, ti sarò grato se mi dici cos'altro c'è di sbagliato nella funzione personalizzata.

Grazie per l'aiuto e scusate il disturbo.

Forse l'array è vuoto? Verificatelo cambiando un po' la funzione

void PrintArray(double &eArray)
   {
   int eSize=ArraySize(eArray);
   string eStr="Размер массива "+eSize+" : ";
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }
Se stampa 0, cercate un problema nel riempimento dell'array.
 
Alexey Viktorov:

void PrintArray(double &eArray)
   {
   int eSize=ArraySize(eArray);
   string eStr="Размер массива "+eSize+" : ";
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }

Ho trovato un errore. Nell'ultima lineaPrint(str);hai passato str invece diestr. L'ho aggiustato e tutto è andato bene.

Grazie a voi ora ho afferrato questo argomento non solo a grandi linee, ma in dettaglio. L'unica domanda senza risposta riguardava i punti in più del mio post

Grazie per il vostro aiuto e supporto.

 
Maxim Kuznetsov:

sul forum e nelle pubblicazioni su C#, Delphi e tutto il resto...

Non l'ho mai fatto, può qualche link per "dummies"?
 
ANDREY:

Ho trovato un errore. Nell'ultima lineaPrint(str); hai passato str invece diestr. L'ho aggiustato e tutto è andato bene.

Grazie a voi ora ho afferrato questo argomento non solo a grandi linee, ma in dettaglio. L'unica domanda senza risposta riguardava i punti in più del mio post

Grazie per il vostro aiuto e supporto.

Non sono stato io a trasmetterlo,

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Tutte le domande dei neofiti su MQL4 e MQL5, aiuto e discussione di algoritmi e codici

Aleksei Stepanenko, 2021.03.13 09:04

Print("-LoY[0]-", DoubleToString(LoY[0],4), "---LoY[1]--", DoubleToString(LoY[1],4), "---LoY[2]--" , DoubleToString(LoY[2],4), "---LoY[3]--" , DoubleToString(LoY[3],4),................  "---LoY[30]--" ,  DoubleToString(LoY[30],4) );

Potreste voler stampare un array o fare una funzione separata per stampare un array:

void PrintArray(double &eArray)
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }

E chiamarlo da qualsiasi luogo

PrintArray(LoY);

Semplicemente non ci ho fatto caso. Non capisco proprio come la compilazione sia andata senza errori...

Qual è la risposta se hai capito e scritto l'intera sequenza

ANDREY:

Penso di aver finalmente capito (sono un po' lento) ......

Nella prima iterazione, la variabile stringa str è vuota. I caratteri =+ dicono a str di assegnarsi vuoto (senza valori) e a se stesso vuoto aggiungere una stringa con valori, cioè"--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+",";. Il valore di questa stringa è " --LoY[0]--, --1.6104-- ". Dopo queste operazioni , str ottiene il valore "--LoY[0]--, --1.6104-- " alla prima iterazione. Come ho capito nella vostra terminologia, questo si chiama primo elemento.

Alla seconda iterazione str ha già il primo elemento con il valore " --LoY[0]--, --1.6104-- " I caratteri =+ istruiscono str ad assegnarsi il valore del primo elemento e a stesso con il valore del primo elemento, aggiungere una stringa con altri valori, cioè "--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+",";. Il valore di questa stringa è già " --LoY[1]--, --1.6105--". Dopo queste operazioni, str ottiene il valore"--LoY[0]-- --1.6104-- --LoY[1]-- --1.6105--" alla seconda iterazione.Cioè, str ha il secondo elemento e alla trentesima iterazione str conterrà 30 elementi con diversi valori degli elementi dell'array.

Dopo che il ciclo è finito, la variabile stringa str con 30 elementi sarà stampata una volta fuori dal ciclo.
Mi ci è voluto molto tempo per capire questo algoritmo perché quando parlavi di addizione ho prestato attenzione solo al segno più rosso "--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+", non a str+=

Quindi è ancora un mistero per me quale ruolo giochino quei plus rossi "--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+" in questo algoritmo

Grazie per il vostro aiuto.

E che mistero rimane, se tutto è programmato correttamente...
 
MakarFX:
Non l'ho mai fatto, può qualche link per "dummies"?

Se non hai mai scritto in C#, Delphi e simili, non ti aiuterà... Windows viene creato come dappertutto, ma prima devi imparare a farlo "ovunque".

Prima un breve corso in C#, WinForms (per esempio). Dovrebbe essercene un mucchio su internet. Questo va un po' oltre lo scopo del forum.

 

Alexey Viktorov .

Alexey Viktorov:


E che mistero rimane, se tutto è scritto correttamente...

Non ho capito questo algoritmo per molto tempo, perché quando parlavate di addizione facevo attenzione solo ai plus rossi "--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+", ma non a str+=

Ecco perché mi chiedo ancora che ruolo hanno questi plus rossi"--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+" in questo algoritmo

Segue inequivocabilmente dal modo in cui ho descritto la mia comprensione che il collegamento delle stringhe ad ogni iterazione avviene in un posto e una volta insieme all'operazione di assegnazione str+=

Cioè, usando il simbolo +, il valore di un elemento della variabile stringa str si collega (più) con il valore di un altro elemento della stessa variabile stringa str
E non ho ancora capito cosa significano questi + rossi str +="--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+",";. Non c'è nessuna operazione di somma eseguita sui valori che sono tra questi plus rossi ..... come mi sembra. Se ho ragione, quale funzione svolgono questi plus rossi? E se mi sbaglio, devo aver mancato di capire qualcosa.

A proposito, nel tuo post, nella linea gialla, c'è solo un tale più rosso prima di +DoubleToString(LoY[r],4). Ma non lo vedo dopo.

Grazie per il vostro aiuto.

 
Alexey Viktorov:

Solo che non è chiaro come la compilazione sia andata senza errori, non è chiaro...


E ho inizializzato io stesso str all'interno del corpo della funzione utente quando ho visto che il compilatore indicava che str era indefinito. Ma ho dimenticato di parlartene.
Poi ho cancellato str dalla funzione utente ovunque e ho messo eStr tra parentesi al posto di str nell'ultima riga della funzione utente.

 
Maxim Kuznetsov:

Se non hai mai scritto in C#, Delphi e simili, non ti aiuterà... Windows viene creato come dappertutto, ma prima devi imparare a farlo "ovunque".

Prima un breve corso in C#, WinForms (per esempio). Dovrebbe essercene un mucchio su internet. Questo va un po' oltre lo scopo del forum.

Bene, il modulo può essere creato.


Sono più interessato a come dovrebbe avvenire lo scambio di dati tra la mia finestra e l'Expert Advisor.

 
void PrintArray(double &eArray[])
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=string(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(eStr);
   }
 

Aleksei Stepanenko:

void PrintArray(double &eArray[])
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=string(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(eStr);
   }


Grazie per il chiarimento.

A proposito, ho rimosso i plus gialli e il compilatore ha dato un errore. Quindi giocano un certo ruolo in tutta questa costruzione. Ma cosa.... continuo a non capire. Perché sono necessari quando l'addizione di stringhe viene eseguita solo attraverso l'uso di plus blu. A giudicare dalle vostre spiegazioni, non c'è altro in questa costruzione ..... se non mi sbaglio.

E riguardo alla stringa(i)... Sulla conversione del tipo .... è più o meno chiaro per me. Quello che non è chiaro è che..... stringa è il nome di un tipo di variabile. i è una variabile contatore che denota l'indice di un elemento dell'array. E perchéi è tra parentesi ()? Finora ho pensato che le parentesi sono una caratteristica della funzione. Per esempio, Print( ). E diversi dati sono messi dentro le parentesi in alcune funzioni, ma cosa significano le parentesi o quale funzione svolgono le parentesi rispetto a i e a tutto questo costrutto - string(i)? A prima vista, sembra che prima la variabile i avesse un tipo int (integer), e poi hai cambiato il tipo della variabile i da int a string (string) . Ma le parentesi tonde che contengono non mi lasciano pensare così.

Grazie per la spiegazione.

Motivazione: