MetaTrader 4 Build 529 beta rilasciato con un nuovo compilatore - pagina 105

 
Night63:

Colleghi, un messaggio di avvertimento appare sulla compilazione:

possibile uso di una variabile non inizializzata 'PipStep'.

per un pezzo come questo:

Tutte le variabili sono inizializzate come doppie, cosa c'è di sbagliato?

avete dichiarato variabili di tipo doppio, l'inizializzazione è l'assegnazione di valori alle variabili dichiarate

doppio PipStep=0 ; fare

 
Non capisco, sono l'unico che non può testare le demo degli indicatori nella build 555, o questo non è affatto un problema importante per il debutto sul mercato?
 
Candid:
Non capisco, sono l'unico che non può testare le demo degli indicatori nella build 555, o questo non è affatto un problema importante per il debutto sul mercato?

sono testati in 5?
 

ArrayCopyRates() также изменила свое поведение, раньше она производила виртуальное копирование в массив double[][6], теперь же производится виртуальное копирование в массив MqlRates[]. Для совместимости осталось копирование в массив double[][6], но это копирование не виртуальное, а реальное.

https://www.mql5.com/ru/forum/148325

MqlRates

Struttura per la memorizzazione di informazioni su prezzo, volume e spread.

https://www.mql5.com/ru/docs/constants/structures/mqlrates

MqlRates in MetaTrader 4 è un array o una struttura?

Questo esempio dalla guida (MetaTrader 4 build 555) non funziona perché non esiste una funzione CopyRates

void OnStart()
  {
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,100,rates);
   if(copied>0)
     {
      Print("Скопировано баров: "+copied);
      string format="open = %G, high = %G, low = %G, close = %G, volume = %d";
      string out;
      int size=fmin(copied,10);
      for(int i=0;i<size;i++)
        {
         out=i+":"+TimeToString(rates[i].time);
         out=out+" "+StringFormat(format,
                                  rates[i].open,
                                  rates[i].high,
                                  rates[i].low,
                                  rates[i].close,
                                  rates[i].tick_volume);
         Print(out);
        }
     }
   else Print("Не удалось получить исторические данные по символу ",Symbol());
  }
 

//+------------------------------------------------------------------+
//|                                                     my_test1.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property  strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   ArrayCopyRates(rates,"EURUSD",PERIOD_M1);
   //int copied=CopyRates(Symbol(),0,0,100,rates);

   Print(
         " спред ",rates[6].spread               
         );
  }
//+------------------------------------------------------------------+
Anche questo non funziona, puoi vedere un esempio funzionante in MetaTrader 4 build 555 con MqlRates?
 
ALXIMIKS:

Fanno il test in 5?

C'è anche chi non fa il test in 5?
 
ALXIMIKS:

si dichiarano variabili di tipo doppio, l'inizializzazione è l'assegnazione di valori alle variabili dichiarate

double PipStep=0 ; do


Ha funzionato!!!

Vivi e impara!

Grazie mille!

 
serferrer:

MqlRates in MetaTrader 4 è un array o una struttura?

Questo esempio dalla guida (MetaTrader 4 build 555) non funziona perché non esiste una funzione CopyRates

Anche questo non funziona, possiamo vedere un esempio funzionante in MetaTrader 4 build 555 con MqlRates?


MqlRates - struttura

MqlRates[] - array di strutture

Per vedere un esempio di lavoro con la struttura MqlRates vedere lo script period_converter_new

Un esempio di operazione ArrayCopyRates (la documentazione sarà aggiornata)

MqlRates array1[];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Текущий бар ",array1[0].time,"  цена открытия ", array1[0].open);
 
MetaQuotes:

Modifiche in MQL4

  • Anche ArrayCopyRates() ha cambiato il suo comportamento: prima copiava virtualmente nell'array double[][6], ora copia virtualmente nell'array MqlRates[]. Ora viene eseguita la copia nell'array double[][6], ma non è virtuale; è reale.

Ho un numero significativo di Expert Advisors che usano DLL e sono stati passati ai clienti molto tempo fa. Abbiamo usato gli array double[][6] per passare i parametri alla DLL , che sono stati virtualmente copiati da ArrayCopyRates() durante l'inizializzazione .E poi questi array e la loro dimensione attuale sono stati passati per riferimento come parametri quando si chiamano funzioni dalla DLL.

Si scopre che tutti questi EAs smettono di funzionare quando il terminale viene aggiornato a una nuova versione. Questo è un peccato.

Ho capito bene che per farli funzionare senza cambiare il codice della DLL, dovremmo chiamare ArrayCopyRates() prima di ogni chiamata di una funzione dalla DLL?

 
stringo:
Ora non c'è nessun valore di spread (forse anche il volume di scambio ) nella struttura MqlRates, sarà aggiunto in seguito?
 
Patrol:

Ho un numero significativo di EA che utilizzano DLL, che sono state consegnate ai clienti molto tempo fa. Per passare i parametri alla DLL abbiamo usato gli array double[][6], ai quali durante l'inizializzazione la funzione ArrayCopyRates() ha fatto una copia virtuale delle serie temporali. E poi, quando si chiamano le funzioni dalla DLL, questi array e la loro dimensione attuale vengono passati per riferimento come parametri.

Si scopre che tutti questi EAs smettono di funzionare quando il terminale viene aggiornato a una nuova versione. Questo è un peccato.

Ho capito bene che per farli funzionare senza cambiare il codice della DLL, dovremmo chiamare ArrayCopyRates() prima di ogni chiamata di una funzione della DLL?


È un po' più complicato di così. Anche la struttura che assume il dll è cambiata.

Quindi, è necessario riscrivere ArrayCopyRates nell'array della struttura MqlRates. Anche nella tua dll devi sostituire la descrizione della struttura corrispondente

Motivazione: