Tester di supporto agli script e ai consulenti MG4 - pagina 3

 
AlexeyVik:
Beh, non ho intenzione di dimostrare che è vero. Per una persona che non ha familiarità con la programmazione C++ e OOP in generale è piuttosto complicato e non è affatto per un buon passaparola o la creazione di un mito. Per quanto possa sembrare strano, ho capito tutto in una settimana e ho scritto quello che mi serviva. Questo è un mito completamente diverso; questo dimostra che l'apprendimento di mql5 è disponibile anche per i non professionisti, come me.
In qualsiasi OOP si può programmare algoritmicamente, e usare l'OOP stessa solo come un involucro. Quando ho iniziato a codificare in Java, anch'io all'inizio non capivo l'OOP, ma non ho visto particolari problemi. I problemi sorgono dopo, perché è molto difficile leggere le materie prime nei linguaggi algoritmici. È molto più difficile usare le librerie nei linguaggi algoritmici, perché bisogna imbullonarle prima di usarle.
 
Reshetov:
Si può programmare algoritmicamente in qualsiasi OOP, ma usare l'OOP solo come involucro. Quando ho iniziato a codificare in Java, all'inizio non capivo nemmeno l'OOP, ma non vedevo alcun problema. I problemi sorgono dopo, perché è molto difficile leggere le materie prime nei linguaggi algoritmici. Usare le librerie in algoritmica è molto più difficile, perché bisogna avvitarle prima di usarle.
Yuri, perché mi stai spiegando quanto sia facile? Per una persona è semplice, per un'altra è molto semplice, e per qualcuno è inaccessibile. Non ho detto che è impossibile imparare... Stavo solo parlando delle differenze tra le lingue... il familiare e il nuovo.
 
Renat:
Non è affatto diverso. Sono due linguaggi identici con un unico compilatore.
In questo senso, C++ non è diverso da JavaScript. Ed è vero!
 
Integer:
In questo senso, anche C++ non è diverso da JavaScript. Ed è vero!

Non puoi vedere altro sul nostro forum.

Ma non c'è responsabilità. Puoi spifferare tutto quello che vuoi.

 
AlexeyVik:
Yuri, perché mi stai spiegando quanto sia facile? C'è chi lo trova semplice, chi lo trova molto semplice e chi lo trova inaccessibile.
È difficile da capire se non c'è documentazione, non ci sono esempi, non ci sono articoli. Ma quando si ha tutto, e si possono fare domande in un caso problematico sul forum, è una scusa marcia per parlare di inaccessibilità.
 
Reshetov:
È difficile da capire se non c'è documentazione, non ci sono esempi, non ci sono articoli. Ma quando è tutto lì, e si possono fare domande in un caso problematico su un forum, è una scusa marcia per parlare di inaccessibilità.

Vai via. Personalmente, posso padroneggiare questa lingua senza problemi o domande. Ma per qualcuno che è inaccessibile in virtù del suo carattere, gli si può scrivere qualsiasi cosa.

Non riesco ancora a capire perché sei entrato in un dialogo ed esprimi un'opinione su un argomento completamente diverso.

 
Renat:

Quello che non si vede su questo forum.

Perché, non c'è responsabilità. Puoi dire qualsiasi cosa.

Sì, proprio così. Soprattutto usando l'autorità della propria posizione superiore.

Tutte le lingue sono uguali, tranne quelle stravaganti. Tutti loro possono essere imparati in 21 giorni da qualsiasi idiota. Tutti i for, while, if, switch possono avere una notazione diversa, ma non fa alcuna differenza in linea di principio. Non è importante il modo in cui gli operatori sono scritti, ma l'infrastruttura con cui il linguaggio interagisce. In questo senso MT4 e MT5 sono due mondi diversi.

La differenza in tutto. A partire dal piccolo - con la numerazione delle barre nell'indicatore, in MT4 da destra a sinistra, in MT5 da sinistra a destra. Continuando con quello più significativo - la posizione aggregata e l'organizzazione dei dati storici del commercio. La più grande differenza in ciò che è spesso richiesto - nel modo di accedere ai dati delle quotazioni e degli indicatori, la copia dei dati richiede il controllo, poi l'indicizzazione da sinistra a destra, poi da destra a sinistra, il tempo della barra è incluso nel range, o no. Prendete da soli la discussione della funzione iBarShift() in CodeBase.

In MT4, per assicurare il funzionamento stabile dell'EA era sufficiente controllare il valore di ritorno di OrderSelect(), ma in MT5 è necessario fare controlli ad ogni passo, anche ai dati dell'ultimo tick. Ci sono anche alcune sottigliezze della programmazione MT5, che imparerete solo dopo aver sofferto molto, perché ci sono molte insidie.

 

Sostengo con tutto il cuore la tua opinione!

Estendere le funzionalità è ovviamente una buona cosa, ma sotto il cofano di MT5 avremmo dovuto lasciare le funzioni di MT4 per compatibilità. Naturalmente, solo quelli che rientrano nel quadro del modello di trading MT5.

In modo che i sorgenti di MT4 siano portati con cambiamenti minimi.

Anche se uso MT5 come tester multicurrency, ma le chiamate di funzione irragionevolmente complesse mi respingono.

Le stesse funzioni per passare a MT5(https://www.mql5.com/ru/articles/81), perché non implementarle nel kernel stesso?

Perché è necessario rinominare le funzioni per convertire i tipi, per esempio

CharToStr - CharToString,  StrToDouble - StringToDouble

Sembra essere elementare, ma... Riforme per il bene delle riforme?

O funzioni per lavorare con il tempo, per esempio

int Hour()
int HourMQL4()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.hour);
  }

Funzione di ottenere dati da un grafico

double iClose(string symbol,
              int timeframe,
              int shift)
double iCloseMQL4(string symbol,int tf,int index)
{
   if(index < 0) return(-1);
   double Arr[];
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   if(CopyClose(symbol,timeframe, index, 1, Arr)>0) 
        return(Arr[0]);
   else return(-1);
}

Ci sono centinaia di questi esempi!

Naturalmente MT5 è più funzionale, ma MT4 è più conveniente! E questo a volte è molto più importante!

 
Integer:

Esattamente. Soprattutto approfittando dell'autorità della propria posizione superiore.

L'affermazione "C++ non è diverso da JavaScript neanche in questo modo" è un'assurdità nella vena di discutere la differenza tra MQL4 e MQL5. E qualcuno l'ha spifferato.

La credibilità si guadagna con un lavoro lungo e duro. Ho adempiuto a questo volume e seguo quello che dico.


C'è una differenza in tutto. A cominciare da uno minore - la numerazione delle barre nell'indicatore, in MT4 da destra a sinistra, in MT5 da sinistra a destra. Continuando con quello più significativo - la posizione aggregata e l'organizzazione dei dati della storia commerciale. La più grande differenza in ciò che è spesso richiesto - nel modo di accedere ai dati delle quotazioni e degli indicatori, la copia dei dati richiede il controllo, poi l'indicizzazione da sinistra a destra, poi da destra a sinistra, il tempo della barra è incluso nel range, o no. Prendete da soli la discussione della funzione iBarShift() in CodeBase.

Che strana situazione abbiamo. Qualsiasi lingua può essere imparata da un manichino in 21 giorni, ma la numerazione delle barre e l'accesso ai dati diventano un problema.

Ancora una volta, i linguaggi sono quasi gli stessi, differiscono in un piccolo numero di funzioni e hanno un compilatore comune. MQL4 ha un approccio obsoleto alla gestione dei dati che è inaccettabile per sistemi con una storia profonda e dettagliata. Usate le nuove funzioni CopyXXX in MQL4 e sarà come in MQL5.


In MQL4 per assicurare la stabilità dell'EA era sufficiente controllare il valore di ritorno di OrderSelect(), e in MQL5 il controllo è necessario ad ogni passo, anche alla ricezione dei dati dell'ultimo tick. Ci sono anche alcune sottigliezze della programmazione di MT5, che dovrai imparare solo dopo aver avuto molti intoppi, perché ci sono molte insidie.

In MQL4 e MQL5, è necessario controllare i risultati delle funzioni ovunque.

In MQL4 molti trader semplicemente ignoravano il controllo e prendevano i dati così come sono. In MQL5 scrivono lo stesso, e poi i loro programmi forex si bloccano quando vengono lanciati su CFD, futures o azioni, semplicemente perché gli autori erano troppo pigri per controllare i parametri degli strumenti o la disponibilità dei dati.

 
Nemser:

Anche se uso MT5, come tester multicurrency, ma le chiamate di funzione inutilmente complicate sono ripugnanti.

Pensate a cosa forniscono le nuove funzioni di accesso ai dati e perché sono fatte in quel modo.

MetaTrader 4 ha una profondità limitata della storia, timeframes separati e un accesso diretto alle barre dei simboli tramite Open/High/Low/Close/Time[xxx]. Tale accesso diretto è molto costoso da implementare in termini di risorse e di costo della CPU. Considera che ogni Expert Advisor ha la propria copia locale di questi dati per evitare conflitti con altri Expert Advisor e con il terminale stesso.

Con l'aumento del numero di simboli (per esempio, in MT5 si possono avere 5 000-10 000 simboli) e usando la storia profonda di un minuto come base di tutti i timeframes, è praticamente impossibile usare i metodi di MT4. Non c'è abbastanza RAM, e copiare grossi pezzi uccide le prestazioni. Ecco perché MT5 non mantiene più automaticamente una copia nascosta e costosa del grafico per ogni esperto.

Invece siamo passati a funzioni CopyXXX molto economiche dove lo sviluppatore richiede esattamente all'array locale quanti dati gli servono, non l'intero grafico disponibile. Poi c'è la gestione più veloce possibile dei dati locali (invece del vecchio piuttosto costoso Open/High/Low/Close/Time[xxx]), in più l'autore può mettere in cache quei dati e usarli con parsimonia nella prossima chiamata. Il risparmio di memoria e di CPU è enorme. Inoltre, la piattaforma stessa è particolarmente libera di gestire vasti database - l'accesso ad essi è sempre su richiesta (invece di un accesso diretto non supervisionato) e questo permette una gestione flessibile delle cache.

Va anche notato che la semplicità delle chiamate Open/High/Low/Close/Time[xxx] in MQL4 era limitata al simbolo e al timeframe corrente, e tutti gli altri dati per altri simboli e timeframe erano ottenuti usando le funzioni iClose/iLow(...), che causavano gravi ritardi. La transizione in MQL5 ad un unico modello di funzione CopyXXX ha migliorato radicalmente la situazione, permettendo agli sviluppatori di ottenere i pezzi di dati richiesti in una sola richiesta, e di non fare più chiamate bloccate (si pensi ai blocchi in ogni singola chiamata a iClose).


Le stesse funzioni per passare a MT5(https://www.mql5.com/ru/articles/81), quindi perché non implementarle nel kernel stesso?

Queste non sono le nostre funzioni e nemmeno questo articolo. Questo articolo è un insieme di stampelle mostruose, ma rilasciato per mostrare la differenza.

Ho spiegato ripetutamente la necessità di usare le nuove caratteristiche di MQL5, non le orrende stampelle.


Perché devono rinominare le funzioni di conversione dei tipi, per esempio

apparentemente elementare, ma... riforme per il bene delle riforme?

Questo è l'approccio giusto per costruire un'architettura linguistica di qualità. I nomi delle funzioni dovrebbero essere comprensibili e non un insieme di abbreviazioni.

Il nuovo linguaggio e le comode funzioni di autocompletamento ci hanno permesso di rivedere il linguaggio e renderlo più pulito.


O, per esempio, funzioni temporali Ottenere dati da un grafico E ci sono centinaia di questi esempi!

Questi sono esempi di stampelle (di solito dicono "per fare una tonsillectomia con fori ghiandolari") che non dovrebbero essere usati per il confronto.

Il materiale teorico è diventato obsoleto da quando MQL4 è stato ridotto direttamente a MQL5 e ora MQL4 ha molte funzioni compatibili.


Naturalmente MT5 è più funzionale, ma MT4 è più conveniente! E questo a volte è molto più importante!

Non sono d'accordo.

MetaTrader 5 è molto più user-friendly, sia in termini di software che di lingua.

Motivazione: