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

 
Artyom Trishkin:

IndicatoreCifre(5)

Grazie!
 

Permettetemi di fare un'altra domanda. Sulla base dello stesso indicatore. Supponiamo di attaccare l'indicatore al grafico. Otteniamo il primo valore di Bid1. Poi otteniamo il secondo valore di Bid2. E dobbiamo confrontare questi due valori. Dal secondo si sottrae il primo e si ottiene il numero che si aggiunge al primo Bid1.

Bid1=1.11133

Bid2=1.11135

Bid2-Bid1=0,00002

Bid1+0.00002=1.11135

Ho capito che il risultato è lo stesso dell'indicatore originale.

Voglio solo vedere l'implementazione e capire la logica del codice.

 
Alexey Viktorov:

Devi sbloccarlo nelle proprietà del file.

Grazie! :)
 
jaffer wilson :

Due dichiarazioni:

Stampa: 22.33

И

Stampa: 2.00000

Perché ci sono diverse uscite? In C / C ++ la dichiarazione di cui sopra funziona bene.

Qualcuno ha qualche idea su questo problema?

 

Aiutami a capire gli array di prezzi in mt5. Non è chiaro nell'indicatore. Ho emesso i prezzi, che sono in OnCalculate:

  for(int i=10; i>=0; i--)
         PrintFormat("s- open[%d] = %d",i,open[i]);

Ricevo prezzi strani:

2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[10] = 1597040639
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[9] = -523642413
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[8] = 1691873517
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[7] = 590987500
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[6] = 1583296744
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[5] = 115448721
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[4] = 360090058
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[3] = -1597040639
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[2] = -856244680
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[1] = 366962006
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[0] = -1209462791

Lo faccio al contrario, creo un array e lo copio (lo cerco provando, non mi è affatto chiaro):

double Open[];//глобальная
CopyOpen(NULL,0,0,Bars_To_Process*2,Open); //OnCalculate
 for(int i=10; i>=0; i--)
         PrintFormat("Open[%d] = %d",i,Open[i]);//OnCalculate

E ottengo risultati simili:

2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[10] = 1356522471
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[9] = -1708366192
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[8] = -729800843
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[7] = 1499458982
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[6] = 167675523
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[5] = -90709709
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[4] = -321607151
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[3] = -314735203
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[2] = -314735203
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[1] = 1663011337
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[0] = -1408749273

È ancora più interessante con le date. Stampo le date che sono in OnCalculate:

for(int i=10; i>=0; i--)
         PrintFormat("s- time[%d] = %s",i,TimeToString(time[i]));

Ho capito questo:

2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[10] = 2015.12.02 10:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[9] = 2015.12.02 09:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[8] = 2015.12.02 08:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[7] = 2015.12.02 07:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[6] = 2015.12.02 06:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[5] = 2015.12.02 05:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[4] = 2015.12.02 04:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[3] = 2015.12.02 03:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[2] = 2015.12.02 02:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[1] = 2015.12.02 01:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[0] = 2015.12.02 00:00

E quando lo copio:

datetime Time[];
CopyTime(NULL,0,0,Bars_To_Process*2,Time);
for(int i=10; i>=0; i--)
         PrintFormat("Time[%d] = %s",i,TimeToString(Time[i]));

Si stampa bene:

2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[10] = 2020.01.15 10:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[9] = 2020.01.15 11:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[8] = 2020.01.15 12:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[7] = 2020.01.15 13:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[6] = 2020.01.15 14:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[5] = 2020.01.15 15:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[4] = 2020.01.15 16:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[3] = 2020.01.15 17:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[2] = 2020.01.15 18:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[1] = 2020.01.15 19:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[0] = 2020.01.15 20:00

Ma non si può andare lontano solo con le date. Aiutami a capire. Come posso ottenere i prezzi di apertura e di chiusura corretti?

 
Yevhenii Levchenko:

Aiutami a capire gli array di prezzi in mt5. Non è chiaro nell'indicatore. Metto in uscita i prezzi che sono in OnCalculate:

for(int i=10; i>=0; i--)
         PrintFormat("s- open[%d] = %d",i,open[i]);

Fate così:

for(int i=10; i>=0; i--)
{
   Print("s- open[",i,"] = ",open[i]);
}

Hai usato una specificazione di tipo sbagliata nell'output formattato

 
Igor Makanu:

fare questo:

Hai usato la specificazione del tipo sbagliato nell'output formattato

Aaaaahhhh, merda! Grazie mille, Igor!

Avrei dovuto mettere %f... Ho sbagliato... e devo anche mettere ArraySetAsSeries ovunque. È un po' strano...

 
Igor Makanu:

per favore

Non consiglierei di usare ArraySetAsSeries() se si scrive il codice dell'indicatore da zero (se lo si porta da MQL4 - un altro discorso),

usate rates_total come il numero della barra più a destra - 1, vi abituerete alla logica dell'indicatore in MQL5 più velocemente

Grazie!

Non scrivere da zero... Sto trasferendo l'indicatore mt4 a mt5
 
Oleg Bondarev:

Permettetemi di fare un'altra domanda. Sulla base dello stesso indicatore. Supponiamo di attaccare l'indicatore al grafico. Otteniamo il primo valore di Bid1. Poi otteniamo il secondo valore di Bid2. E dobbiamo confrontare questi due valori. Dal secondo si sottrae il primo e si ottiene il numero che si aggiunge al primo Bid1.

Bid1=1.11133

Bid2=1.11135

Bid2-Bid1=0.00002

Bid1+0.00002=1.11135

Ho capito che il risultato è lo stesso dell'indicatore originale.

Voglio solo vedere l'implementazione e capire la logica del codice.

Aiutami. Non funziona da solo. Faccio 2 buffer x[ ] per confrontare i valori Bid e y[ ] per tracciare. E niente.

 
Oleg Bondarev:

Ho bisogno del vostro aiuto. Non riesco a far funzionare nulla da solo. Faccio 2 buffer x[ ] per confrontare i valori Bid e y[ ] per tracciare. E niente.

Prova a porre la domanda in modo diverso, probabilmente la tua domanda non è chiara