Bug di ridimensionamento degli array nella build beta 530 - pagina 3

 
RaptorUK:

Non ho familiarità con la MT3 ma presumo che il codice che funzionava sulla MT3 funzionasse anche sulla MT4 . . . questo è il problema della MT4 --> MT5 ed è il motivo per cui la situazione è diversa.

La maggior parte degli utenti MT4 non sa codificare, se i loro indicatori preferiti su MT4 non esistono su MT5 allora non useranno MT5.

Per quanto ne so, il codice di MT3 non funziona su MT4, il linguaggio è molto diverso. Questo dibattito su MT4/MT5 è infinito, ci sono molti fattori che portano alla sopravvivenza di MT4, non sono nemmeno sicuro che MT5 fosse destinato a sostituire completamente MT4.

Comunque, riguardo alla nuova versione, Metaquotes ha detto che sarà retrocompatibile a livello ex4, ma non proprio a livello mq4.

 

Ho dato un'occhiata veloce alla nuova guida del metaeditor, la nuova versione mql4 sembra molto più diversa dalla vecchia versione di quanto pensassi.

 
angevoyageur:

Per quanto ne so, il codice di MT3 non funziona su MT4, il linguaggio è molto diverso. Questo dibattito su MT4/MT5 è infinito, ci sono molti fattori che portano alla sopravvivenza di MT4, non sono nemmeno sicuro che MT5 fosse destinato a sostituire completamente MT4.

Comunque, riguardo alla nuova versione, Metaquotes ha detto che sarà retrocompatibile a livello ex4, ma non proprio a livello mq4.

La compatibilità con gli attuali indicatori, script e EAs .ex4 non riguarda solo il linguaggio, ma anche il terminale e le modifiche al suo funzionamento. Per esempio, le modifiche allo Strategy Tester potrebbero rompere gli EA progettati per essere utilizzati principalmente nello Strategy Tester, mentre lo stesso EA funziona bene su un grafico live, ma non potrebbe più svolgere la sua funzione primaria.
 
angevoyageur:

Per quanto ne so, il codice di MT3 non funziona su MT4, il linguaggio è molto diverso. Questo dibattito su MT4/MT5 è infinito, ci sono molti fattori che portano alla sopravvivenza di MT4, non sono nemmeno sicuro che MT5 fosse destinato a sostituire completamente MT4.

Comunque, riguardo alla nuova versione, Metaquotes ha detto che sarà retrocompatibile a livello ex4, ma non proprio a livello mq4.

A me sembra che si suppone che sia retrocompatibile a livello mq4, gli indicatori personalizzati inclusi sono le versioni originali mql4 con un cambiamento del nome della funzione init() che compilano nel nuovo compilatore e girano sul nuovo terminale, questo deve significare che possiamo ancora codificare indicatori usando IndicatorCounted() se vogliamo ...

init() ora si chiama int OnInit(void) e restituisce(INIT_SUCCEED);

 
SDC:

A me sembra che si supponga che sia compatibile all'indietro a livello di mq4, gli indicatori personalizzati inclusi sono le versioni originali di mql4 con un cambiamento del nome della funzione init() che compilano nel nuovo compilatore ed eseguono sul nuovo terminale, questo deve significare che possiamo ancora codificare gli indicatori usando IndicatorCounted() se vogliamo ...

init() ora si chiama int OnInit(void) e restituisce(INIT_SUCCEED);

Mi dispiace ma non sarà retrocompatibile a livello di mq4, vedi l'annuncio della prima beta.

Differenze dalla vecchia versione di MQL4:

  • Cambiata la priorità delle operazioni logiche AND/OR. Ora, tutto è simile allo standard C/C++

  • Introdotta la valutazione abbreviata delle espressioni logiche. Ora, quando un'espressione logica viene valutata prima di raggiungere la sua fine, le rimanenti espressioni successive non vengono valutate, come in C/C++.

  • Solo i valori interi sono ora usati nell'operatore switch. Prima si sarebbero potuti usare valori reali

  • Il simbolo del punto non può più essere usato nei nomi delle variabili. Inoltre, i simboli '@', '$' e '?' non possono essere usati nei nomi delle variabili

  • Requisiti più rigorosi per la funzione di avvio. Prima i parametri potevano essere impostati nella funzione di avvio. Ora, tutti i punti di ingresso init, start, deinit, OnInit, OnStart, OnTick, OnTimer e altri devono corrispondere esattamente alle loro firme

  • A causa dell'espansione delle parole chiave, nomi come short, long, float, const, virtual, input, delete, new, do, char non possono essere usati ora

  • Ora, le funzioni dll importate non possono accettare array di stringhe MQL come parametro, come in MQL5

  • Introdotti i nomi predefiniti delle variabili _Period, _Symbol, _LastError, _CriticalError, _StopFlag, _Point, _Digits, _UninitReason, _RandomSeed che possono entrare in conflitto con semplici variabili dichiarate con gli stessi nomi nei file sorgente esistenti

  • il tipo datetime è diventato a 8 byte, come in MQL5.

Le differenze non sono critiche e possono essere facilmente corrette nel codice. In cambio, si accede a molteplici caratteristiche di MQL5, una migliore velocità di esecuzione e un controllo di qualità molto più rigoroso.

Non è un cambiamento pesante, ma significa che non è compatibile al 100% con la versione precedente (mq4).
 
SDC:

...

init() è ora chiamato int OnInit(void) e restituisce(INIT_SUCCEED);

Potete usare entrambe le versioni.
 

Mi piacciono le nuove caratteristiche in metaeditor

 

Penso che quando la nuova versione sarà rilasciata causerà molta confusione sul forum per i neofiti perché la nuova documentazione di mql4 è basata sulla codifica di mql5. Ciò significa che molto di ciò che è descritto su questo forum e nel codebase sarà contraddetto dalla documentazione di mql4.

Impostazione di un buffer di indicatori dalla nuova documentazione di mql4: (Questo in realtà ha degli errori e non si compila)

#property copyright "2009, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plot MA
#property indicator_label1  "MA"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input bool               AsSeries=true;
input int                period=15;
input ENUM_MA_METHOD     smootMode=MODE_EMA;
input ENUM_APPLIED_PRICE price=PRICE_CLOSE;
input int                shift=0;
//--- indicator buffers
double                   MABuffer[];
int                      ma_handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   if(AsSeries) ArraySetAsSeries(MABuffer,true);
   Print("Indicator buffer is timeseries = ",ArrayGetAsSeries(MABuffer));
   SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
   Print("Indicator buffer after SetIndexBuffer() is timeseries = ",
         ArrayGetAsSeries(MABuffer));
   
//--- change the oredr of accessing elements of the indicator buffer
   ArraySetAsSeries(MABuffer,AsSeries);
   
   IndicatorSetString(INDICATOR_SHORTNAME,"MA("+period+")"+AsSeries);
//---
   ma_handle=iMA(Symbol(),0,period,shift,smootMode,price);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- Copy the values of the moving average in the buffer MABuffer
   int copied=CopyBuffer(ma_handle,0,0,rates_total,MABuffer);
 
   Print("MABuffer[0] = ",MABuffer[0]);// Depending on the value AsSeries
                                      // Will receive a very old value
                                      // Or for the current unfinished bar
 
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
SDC:

Penso che quando la nuova versione sarà rilasciata causerà molta confusione sul forum per i neofiti perché la nuova documentazione di mql4 è basata sulla codifica di mql5. Ciò significa che molto di ciò che è descritto su questo forum e nel codebase sarà contraddetto dalla documentazione di mql4.

Impostazione di un buffer di indicatori dalla nuova documentazione di mql4: (Questo in realtà ha degli errori e non si compila)

Sì, hai ragione, sarà una transizione difficile. Tuttavia, penso che sarà difficile non per i neofiti ma per i codificatori sperimentati di mql4 che non conoscono ancora mql5. In generale, i neofiti non leggono la documentazione
 

Hai già codificato in MQL5 angevoyageur?