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

 
Trolls:

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



Utilizzare \my_symbol.RefreshRates();\ invece di \my_symbol.Refresh();\. Allora funziona!
 
-Alexey-:
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....

 
Trolls:

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

void  Name(string name)  { m_name=name; Refresh();}
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").
 
Trolls:

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

void OnTick()
  {
   my_symbol.Name(_Symbol);
   my_symbol.Refresh();
   Print(_Symbol," ",my_symbol.Bid());
  }

Ecco la risposta al perché il valore Bid viene stampato come zero. Il codice sorgente mostra che la funzione Bid() è descritta dalla riga

double  Bid()  const { return(m_tick.bid);}

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.

 
Probabilmente si può migliorare il codice aggiungendo una chiamata a Refresh() nella parte finale diRefresh(). allora tutti i dati saranno davvero aggiornati.....
 
Interesting:
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.
 
Yedelkin:
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


 
Interesting:

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, una soluzione normale per gli utenti sarebbe una descrizione chiara e comprensibile dei disegni disponibili e delle loro proprietà. Poi sarà l'utente stesso a capire come usare questi costrutti. E poiché una soluzione del genere è difficile da raggiungere per varie ragioni, coloro che pongono ulteriori domande a se stessi e agli altri andranno avanti :)
 
Yedelkin:
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....

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Документация по MQL5
 

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.