Discussione sull’articolo "L'uso delle Librerie MQL5 Standard Trade Class nella scrittura di un Expert Advisor" - pagina 2

Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Cosa sto facendo di sbagliato? Perché il Bid non viene stampato?
Ecco il log del lavoro
2011.01.31 20:20:18 00 (EURUSD,M1) EURUSD 0
Ecco il codice
Usare ´my_symbol.RefreshRates();´ invece di ´my_symbol.Refresh();´. Allora funziona!
Grazie.
Probabilmente questa è una domanda per gli sviluppatori o per la persona che scrive la Guida.
L'articolo dice
mysymbol.Refresh()
Utilizzato per aggiornare tutti i dati per un simbolo. Quando si specifica un nuovo nome di simbolo per una classe, viene richiamato automaticamente.
mysymbol.RefreshRates()
Serve ad aggiornare le quotazioni. Quando viene impostato un nuovo simbolo, viene richiamato automaticamente.
1. Si scopre che non tutti i dati ?
2. Qual è la differenza tra specificare un nuovo simbolo e impostare un nuovo simbolo?
3. Non capisco la parola automaticamente. Sembra che io abbia impostato un simbolo con il comando mio_simbolo.Nome(_Simbolo), ma l'aggiornamento non è avvenuto....
L'articolo dice
mysymbol.Refresh()
Utilizzato per aggiornare tutti i dati per un simbolo. Quando viene specificato un nuovo nome di simbolo per una classe, questo metodo viene richiamato automaticamente.
mysymbol.RefreshRates()
Serve ad aggiornare le quotazioni. Quando viene impostato un nuovo simbolo, viene richiamato automaticamente.
1. Si scopre che non tutti i dati ?
2. Qual è la differenza tra specificare un nuovo carattere e impostare un nuovo carattere?
3. Non capisco il termine automaticamente. Mi sembra di aver impostato il simbolo con il comando mio_simbolo.Nome(_Simbolo), ma l'aggiornamento non è avvenuto....
Quel raro momento in cui non è necessario attendere la risposta dell'autore dell'articolo o dell'autore del libro di riferimento :) Basta guardare il codice sorgente per vedere che RefreshRates() duplica completamente la funzione SymbolInfoTick(), che "restituisce i prezzi correnti per il simbolo specificato in una variabile di tipo MqlTick". Pertanto, quando gli autori dicono "sull'aggiornamento delle quotazioni", in realtà stanno parlando dell'aggiornamento dei valori di una variabile di tipo MqlTick.
2. C'è una riga di questo tipo nel codice sorgente
Questo indica che quando si chiama la funzione Name(), viene attivata automaticamente solo la funzione Refresh(). Non ho trovato informazioni sull'attivazione automatica della funzione RefreshRates() quando si chiama la funzione Name(). Pertanto, risulta che "ad oggi" la modifica di un simbolo per la funzione Name() non attiva automaticamente la funzione RefreshRates(). Dovremo aggiornare autonomamente e forzatamente i valori della variabile di tipo MqlTick ("refresh quotes").Cosa sto facendo di sbagliato? Perché il Bid non viene stampato? Ecco il log di lavoro 2011.01.31 20:20:18 00 (EURUSD,M1) EURUSD 0
Ecco il codice
Ecco la risposta al perché il valore Bid viene stampato come zero. Il codice sorgente mostra che la funzione Bid() è descritta dalla riga
Pertanto, il valore della funzione Bid() è legato al valore di uno degli elementi di una variabile di tipo MqlTick. Questa variabile non viene aggiornata automaticamente quando viene cambiato un simbolo, ma tramite un'ulteriore chiamata alla funzione RefreshRates(). Nel vostro codice, la funzione Refresh() viene chiamata - anzi, viene chiamata due volte (tenendo conto del corpo della funzione Name()) - e la funzione RefreshRates() non viene chiamata una volta.
Forse si può migliorare il codice aggiungendo la chiamata RefreshRates () nella parte finale diRefresh(). allora tutti i dati saranno davvero aggiornati.....
Ho aggiunto la chiamata RefreshRates() alla funzione Name(). Ma si tratta comunque di patch a livello di singolo utente per le sue esigenze.
Ma se gli sviluppatori inseriscono Refresh() in altri punti (a loro discrezione), sarà una soluzione normale per la maggior parte degli utenti.
Se diciamo che Refresh aggiorna tutti i dati, allora tutti i dati dovrebbero essere aggiornati. IMHO
Ma se gli sviluppatori lo inseriscono in Refresh() e in altri punti (a loro discrezione), sarà una soluzione normale per la maggior parte degli utenti.
Se diciamo che Refresh aggiorna tutti i dati, allora tutti i dati dovrebbero essere aggiornati. IMHO
Non c'è nulla da obiettare. Tuttavia, la soluzione normale per gli utenti sarebbe una descrizione chiara e comprensibile dei progetti disponibili e delle loro proprietà. Sarà poi l'utente stesso a capire come utilizzare queste costruzioni. E poiché una soluzione del genere è difficile da raggiungere per vari motivi, coloro che pongono ulteriori domande a se stessi e agli altri andranno avanti :)
Non lo so, io uso la libreria standard solo per motivi di studio. Scrivo tutti i miei progetti sui miei componenti.
Aspetterò che i costruttori siano resi più convenienti, poi abbandonerò la libreria standard del tutto....
A proposito, ho scoperto che la classe CHistoryOrderInfo ha un paio di righe come queste
return(FormatType(str,Type())); ... FormatType(type,Type())
Ma la funzione Type() è assente nella classe.