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

 
Aleksei Stepanenko:

o fare una funzione di stampa separata dell'array:

E chiamarlo da qualsiasi luogo

Alexey, sono stato in silenzio per molto tempo, ma non riesco a vedere questo tranquillamente... Perché usare IntegerToString() quando una conversione esplicita del tipo in questo caso è molto più facile e meno costosa...

eStr+=(string)i+": "+DoubleToString(eArray[i],4)+", ";
 

non so, l'abitudine :)

 
Aleksei Stepanenko:

o fare una funzione di stampa separata dell'array:

E chiamarlo da qualsiasi luogo

Grazie mille per la comprensione e il chiarimento. Mi fermo per studiare e capire le informazioni che sono nuove per me.

 
Alexey Viktorov:

Alexey, sono stato in silenzio per molto tempo, ma non riesco a vederlo in silenzio... Perché usare IntegerToString() quando una conversione esplicita del tipo in questo caso è molto più facile e meno costosa...

E grazie anche a voi per le vostre preziose aggiunte.

 
Puoi dirmi dove guardare e leggere come creare una finestra esterna per un EA?
 
MakarFX:
Potete per favore dirmi dove guardare e leggere sulla creazione di una finestra esterna per EA.

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

tcl.Eval("toplevel .myWin ; wm title .myWin {Окношко}" ); // простите, не удержался
 
Aleksei Stepanenko:

o fare una funzione di stampa separata dell'array:

E chiamarlo da qualsiasi luogo

Ho deciso di fare una funzione di stampa personalizzata separata dell'array. O meglio, non farne uno, usare il ( PrintArray() ) Cosa che avete già fatto.

Cosa ho fatto?

Ho messo la chiamata alla funzione utente PrintArray() dentro la funzione OnTick()... come descritto nel tutorial di Kovalev.

2. Ho messo il corpo della funzione PrintArray() fuori dalla funzione OnTick()... ... come descritto nel tutorial di Kovalev.

Tutte le nuove variabili del corpo di questa funzione sono locali. Sono dichiarati e inizializzati all'interno di questa funzione.

int P1=0;
double LoY[31];
void OnTick()
{
if (P1==0)
{
for(int r=0; r<31;r++)
{
LoY[r]=1.6104+(r*2)*0.0001;
P1=1;
}
}
//*************************************************************  Б Л О К    N 2
for(int x=0; x<31;x++)
{
if (Bid < LoY[x] )
{
LoY[x]=Bid;
}
}
ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND);
PrintArray(LoY);
}
//****************************

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

Non ho fatto nessuna modifica alla tua funzione. Ma il compilatore dà 6 errori per qualche motivo. E tutti sono legati alla funzione dell'utente.

Vi sarei molto grato se poteste dirmi cosa ho sbagliato.
Grazie.

 
ANDREY:

Ho deciso di fare una funzione di stampa personalizzata separata dell'array. O meglio, non farne uno, usare quello ( PrintArray() ) cosa che avete già fatto.

Cosa ho fatto?

Ho messo la chiamata alla funzione utente PrintArray() dentro la funzione OnTick()... come descritto nel tutorial di Kovalev.

2. Ho messo il corpo della funzione PrintArray() fuori dalla funzione OnTick()... ... come descritto nel tutorial di Kovalev.

Tutte le nuove variabili del corpo di questa funzione sono locali. Sono dichiarati e inizializzati all'interno di questa funzione.

Non ho fatto alcun cambiamento nella tua funzione. Ma il compilatore produce 6 errori per qualche motivo. E tutti si riferiscono a una funzione utente.

Le sarò molto grato se mi dirà cosa ho fatto di sbagliato.
Grazie.

Non ricordo esattamente e sono troppo pigro per controllare. Prova ad aggiungere le parentesi quadre

void PrintArray(double &eArray[])
 

Aleksei Stepanenko:

string str="";

for(int r=0; r<31;r++)
   {
   LoY[r]=1.6104+r*0.0001;
   str+="--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+", ";
   }
Print(str);


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

Nella prima iterazione, la variabile stringa str è vuota. I caratteri =+ istruiscono str ad assegnarsi vuoto (senza valori) e a se stesso vuoto aggiungono 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.

Quando 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.

 
Alexey Viktorov:

Non ricordo esattamente e sono troppo pigro per controllare. Prova ad aggiungere le parentesi quadre

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 il vostro aiuto e scusate per l'inconveniente.