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

 
angevoyageur:

Se volete testare, ed evitare l'aggiornamento di altri terminali, dovete rimuovere la seguente cartella:

  • Windows 7 : C: \ ProgramData \ MetaQuotes \ WebInstal dopo un aggiornamento riuscito, il terminale di prova agli altri terminali non sono aggiornati.
  • Windows XP: C: \ Documents and Settings \ All Users \ Application Data \ MetaQuotes \ Webinstall \

Queste informazioni (probabilmente prese dal forum russo) non sono più aggiornate. Dalla versione 534 in poi, l'aggiornamento su Win7+ è messo in %appdata%\metaquotes\webinstall, non in %programdata%\metaquotes\webinstall.

Può cambiare di nuovo nelle versioni successive.

 
cyclops993:

Questa informazione (probabilmente presa dal forum russo) non è più aggiornata. Dalla v534 in poi, l'aggiornamento su Win7+ viene messo in %appdata%\metaquotes\webinstall, non in %programdata%\metaquotes\webinstall.

Può cambiare di nuovo nelle versioni successive.

Grazie.
 
angevoyageur:

Probabilmente non sono un buon esempio, perché sono un programmatore professionista. Quindi non è uno sforzo enorme per me, e mi piace imparare nuovi linguaggi di programmazione. Ho anche qualche esperienza con oop.

. . . . .

Per la maggior parte sono d'accordo con quello che hai scritto, non sono un ingegnere del software ma mi sono dilettato un po' con mql5 e non ho avuto bisogno di usare alcuna OOP nel codice che ho scritto . . . ma, imparo molto leggendo e capendo il codice di altre persone, senza capire il principio dietro OOP può essere difficile seguire alcuni codici mql5.
 
RaptorUK: Per la maggior parte sono d'accordo con quello che hai scritto, non sono un ingegnere del software ma mi sono dilettato un po' con mql5 e non ho avuto bisogno di usare alcuna OOP nel codice che ho scritto. . . ma, imparo molto leggendo e capendo il codice di altre persone, senza capire il principio dietro OOP può essere difficile seguire alcuni codici mql5.

Imo, OOP implica credere in Incapsulamento, Astrazione, Ereditarietà e Polimorfismo. Non credo che tu sia in grado di "seguire" i codici di qualcun altro a causa dell'astrazione. Tutto quello che devi sapere è cosa fa . Su una nota più seria, credo che OOP fornisca un livello di organizzazione/catalogazione che è applicato e supportato dal linguaggio e dall'IDE. Un programmatore non può avere troppa organizzazione, questo probabilmente fa risparmiare tempo sui progetti futuri alla maggior parte dei programmatori.

 

Grazie per la tua risposta angelvoyager che è stata una buona intuizione da qualcuno che ha familiarità con entrambi i lati della medaglia, sono nella stessa barca di Raptor, i concetti di oop hanno iniziato a interessarmi e voglio imparare di più su di esso, è bene sapere che non è del tutto necessario per continuare a utilizzare mql4 anche con le caratteristiche di mql5, ma ancora, vorrei capire quali sono i vantaggi della codifica secondo i concetti e principi oop e quanto bene si applicano alla codifica di un piccolo progetto come un EA.

 

Quando codifico un EA di solito finisce per essere simile a quello del libro, una funzione centrale che accumula lo stato attuale delle cose, e memorizza queste informazioni in array globali circondati da funzioni periferiche che usano le informazioni in quegli stessi array per decidere cosa fare, ognuna di esse chiama altre funzioni di aiuto per calcolare cose come le dimensioni dei lotti ecc. La funzione start() chiama semplicemente la funzione hub centrale seguita dalle funzioni periferiche in ordine di priorità. Questa struttura di base funziona abbastanza bene anche se non mi è mai piaciuto molto il fatto che l'intera cosa sia centrata sull'accesso globale a questi array, ma non mi è piaciuto abbastanza per cercare un modo diverso di farlo. In altre parole funziona abbastanza bene così non ho provato a sistemarlo lol.

Mi piacerebbe sapere come un approccio oop differisce da questo e quali sarebbero i vantaggi.

 
SDC: Quando codifico un EA di solito finisce per essere simile a quello del libro, una funzione centrale che accumula lo stato attuale delle cose, e memorizza queste informazioni in array globali circondati da funzioni periferiche che usano le informazioni in quegli stessi array per decidere cosa fare, ognuna delle quali chiama altre funzioni di aiuto per calcolare cose come le dimensioni del lotto ecc. La funzione start() chiama semplicemente la funzione hub centrale seguita dalle funzioni periferiche in ordine di priorità. Questa struttura di base funziona abbastanza bene anche se non mi è mai piaciuto molto il fatto che l'intera cosa sia centrata sull'accesso globale a questi array, ma non mi è piaciuto abbastanza per cercare un modo diverso di farlo. In altre parole funziona abbastanza bene quindi non ho provato a sistemarlo lol.

Vorrei sapere in che modo un approccio oop differisce da questo e quali sarebbero i vantaggi.

Credo che tu stia descrivendo un flusso di programma. Non credo che questa sia la big_idea dietro l'OOP. (imo) OOP cerca di affrontare i seguenti problemi. Sono un noob OOP, ma sto formando la mia visione del mondo su di esso.

1) Le vostre funzioni sono indipendenti dalle variabili globali? In altre parole, le vostre funzioni sono oggetti indipendenti? Incapsulamento

2) La vostra funzione nasconde i dettagli come i nomi delle variabili locali? Semplifica il volume dei codici sullo schermo? Astrazione

3) Ha la capacità di creare copie duplicate di se stessa per le modifiche? Come la capacità di creare i propri tipi di dati? Ereditarietà.

4) Ha la capacità di cambiare al volo? Esempio: la funzione può gestire sia integer_array che double_array? Polimorfismo.

I modi in cui l'OOP può aiutare a costruire l'ea è simile a come un ea_builder aiuta un non_programmatore a costruire un expert_advisor. Basta prendere la vostra Order_Accounting_Function -> Data_Function -> Event Tracking Function -> Volume Defining Function -> Trading Criteria Defining Function -> Trade Functions -> Error Processing Function. E boom, avete un Expert_Advisor. Tutte le funzioni di definizione dei criteri di trading che avete sviluppato nel corso degli anni possono essere facilmente sostituite.

Per esempio, se tu volessi modificare il mio expert advisor, dovresti studiare dove sono applicate le mie variabili globali e quali altre funzioni dipendono da esse (come i tuoi array di stato o di stato). L'OOP lo rende as_simple_as Accounting(Option_3); Display(Option_1); Caption(Option_5); TradingSys(Option_7); VolumeSize(Option2); OrderType(Option_2) e questo è l'intero esperto.

Questo rende più facile per qualcun altro usare il tuo set di librerie, e di solito ciò che funziona per qualcun altro funziona anche per te in futuro. Se non altro, pensate agli oggetti stand_alone in una catena di montaggio :)

 
***Ps: (Non voglio dimenticare questo). Certo, alla maggior parte di noi non piace non sapere cosa c'è nei codici che stiamo usando. O ci consumiamo nel cercare di capire i codici di qualcun altro, altrimenti probabilmente non li useremmo. Tuttavia, la maggior parte delle funzioni native (esempio OrderSend()) in mql4 sono oggetti dal nostro punto di vista. Noi non vediamo i loro codici ma li accettiamo. Credo che questa accettazione delle librerie di altri sia qualcosa che un programmatore professionale che lavora su grandi progetti deve accettare e su cui deve costruire. Altrimenti sei bloccato a ricreare la ruota.
 

L'ultima versione del mio EA si sta avvicinando a questo, ora sono tutti file di inclusione, ma non sono abbastanza robusti per essere usati fuori dalla scatola senza almeno alcune modifiche. L'errore che faccio spesso è che non mi accorgo di scrivere codice specifico per i criteri nelle funzioni che dovrebbero essere ambigue fino a dopo il fatto e si basano troppo sugli array glabri, quando avrò tempo userò più array locali e più passaggi di parametri per compensare il minor accesso globale.

 
ubzen:
***Ps: (Non voglio dimenticare questo). Certo a molti di noi non piace non sapere cosa c'è nei codici che stiamo usando. O ci consumiamo nel cercare di capire i codici di qualcun altro, altrimenti probabilmente non li useremmo. Tuttavia, la maggior parte delle funzioni native (esempio OrderSend()) in mql4 sono oggetti dal nostro punto di vista. Noi non vediamo i loro codici ma li accettiamo. Credo che questa accettazione delle librerie di altri sia qualcosa che un programmatore professionale che lavora su grandi progetti deve accettare e su cui deve costruire. Altrimenti sei bloccato a ricreare la ruota.
C'è una differenza . . . Non ho altra scelta che usare OrderSend() se voglio piazzare un ordine . . . Ho la scelta di usare o meno la libreria di qualcun altro . . . anche quando il sorgente è rispettato cerco comunque di capirlo prima di provare ad usarlo, è così che alcuni errori vengono trovati e corretti: https://www.mql5.com/en/forum/133792/page3 "E la mia correzione per il commentodi RaptorUK :"