Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 817

 
pivomoe:
Ho capito bene che il metodo Volume della classe CPositionInfo restituisce il volume corrispondente al momento in cui il metodo Select() è stato chiamato per ultimo? Cioè, puoi scoprire il volume che c'era un mese fa per questo simbolo?
Hai sbagliato tutto. Il metodo Volume della classe CPositionInfo restituisce il volume di una posizione. La posizione che è stata precedentemente selezionata tramite PositionSelect.
 

Avete spiegato come preparare CPositionInfo. Però continuo a non capire due cose:

1) Come segue questa ricetta dall'aiuto della classe CPositionInfo?

2) Perché abbiamo bisogno della classe stessa, se non si può usare più di un oggetto normalmente, perché prima di ogni accesso alla proprietà position, dobbiamo configurare la posizione usando il metodo Select, altrimenti improvvisamente useremo il metodo Select per un altro oggetto CPositionInfo da qualche altra parte.

 
pivomoe:

Avete spiegato come preparare CPositionInfo. Però continuo a non capire due cose:

1) Come segue questa ricetta dall'aiuto della classe CPositionInfo?

2) Perché abbiamo bisogno della classe stessa, se non si può usare più di un oggetto normalmente, perché prima di ogni accesso alla proprietà position, dobbiamo configurare la sua posizione usando il metodo Select, altrimenti improvvisamente useremo il metodo Select per un altro oggetto CPositionInfo in qualche altro posto.

1). Tutto questo è nella guida. Con diligenza e attenzione, più un po' di auto-scrittura, questo vi darà una comprensione.
2). Ancora una volta: la classe CPositionInfo non è uno scrigno che memorizza tutti i dati di tutte le posizioni; è solo un comodo strumento per accedere alle proprietà di una posizione.

E questo è sempre stato il caso: prima si seleziona la posizione e poi si ottengono le sue proprietà. Dopo di che, il ciclo si ripete: la posizione viene evidenziata e solo allora vengono recuperate le proprietà della posizione.
 

Non capisco quale sia il mio errore nell'usare l'aiuto.

1) Avevo bisogno del volume della posizione nel programma.

2) Attraverso una ricerca ho trovato il metodo Volume della classe CPositionInfo.

3) Si riferisce all'utilizzo del metodo Select prima di chiamare Volume.

4) Non c'è alcun riferimento nella descrizione del metodo Select. Per andare sul sicuro, studio la descrizione della classe CPositionInfo.

5) Scrivo il codice. Ottengo un risultato che non deriva dal riferimento.


Dov'è l'errore?

Ancora una volta so di scegliere una posizione e un ordine prima di accedere alle proprietà. Ma questa conoscenza e la conoscenza di CPositionInfo nell'aiuto non si intersecano.

 
pivomoe:

Dov'è l'errore?

Se imparate a scrivere in modo più dettagliato, sarete in grado di vedere dove sbagliate.

Prova a scrivere così:

CPositionInfo PositionInfoKotiryemii,PositionInfoVedygii;
double Volume1=0; Volume2=0;
string Symbol1=""; Symbol2="";

if ( PositionInfoVedygii.Select("SBRF-12.17") ) // Select 1
{ Volume1=PositionInfoVedygii.Volume(); Symbol1=PositionInfoVedygii.Symbol(); } // Use 1
else Print("Не удалось выбрать позицию по символ SBRF-12.17 ");

if ( PositionInfoKotiryemii.Select("SBRF-3.18") ) // Select 2
{ Volume2=PositionInfoKotiryemii.Volume(); Symbol2=PositionInfoKotiryemii.Symbol(); } // Use 2
els Print("Не удалось выбрать позицию по символ SBRF-3.18 ");
 
Print(Symbol2," Объем ",Volume2," ",Symbol1," Объем ",Volime1);
 
pivomoe:

Non capisco quale sia il mio errore nell'usare l'aiuto.

1) Avevo bisogno del volume della posizione nel programma.

2) Attraverso una ricerca ho trovato il metodo Volume della classe CPositionInfo.

3) Ha un riferimento all'uso del metodo Select prima di chiamare Volume.

4) Non c'è alcun riferimento nella descrizione del metodo Select. Per andare sul sicuro, studio la descrizione della classe CPositionInfo.

5) Scrivo il codice. Ottengo un risultato che non deriva dal riferimento.


Dov'è l'errore?

Ancora una volta sulla selezione della posizione, l'ordine, prima di accedere alle proprietà che conosco. Ma questa conoscenza e la conoscenza di CPositionInfo nell'aiuto non si sovrappongono.


È un blocco di codice che bypassa tutte le posizioni e stampa informazioni simili a quelle del terminale nella scheda "Trade":

   for(int i=PositionsTotal()-1;i>=0;i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
        {
         string str_position_type=(m_position.PositionType()==POSITION_TYPE_BUY)?"buy":"sell";
         Print(m_position.Symbol()+" | "+
               IntegerToString(m_position.Ticket())+" | "+
               TimeToString(m_position.Time(),TIME_DATE|TIME_MINUTES|TIME_SECONDS)+" | "+
               str_position_type+" | "+
               DoubleToString(m_position.Volume(),2)+" | "+
               DoubleToString(m_position.PriceOpen(),2));

}

Algoritmo di lavoro: prima si seleziona la posizione (prendere un barattolo di marmellata dallo scaffale del supermercato), poi si accede alle proprietà della posizione selezionata e si stampano queste proprietà (leggere l'etichetta sul barattolo di marmellata).

 
pivomoe:

Si scopre che la classe CPositionInfo non ha senso, perché normalmente si può lavorare solo con un oggetto di questa classe.

Sì, è un involucro.
 

Ivan Ivanov ,Vladimir Karputov, fxsaber grazie per il vostro aiuto.

 

Recupero i dati dagli indicatori nell'Expert Advisor. Prima calcolo la maniglia, poi copio gli ultimi valori reali dai buffer degli indicatori.

Domande:

1. Qual è la profondità della storia in questi indicatori?

2. Esiste un metodo per limitare la profondità dei calcoli?
In questo caso abbiamo bisogno solo di pochi ultimi valori per determinare l'inflessione o la direzione su/giù.
L'Expert Advisor è multi-valuta, ci sono decine di indicatori, quindi non ho bisogno di fare calcoli inutili.

 
User_mt5:

Recupero i dati dagli indicatori nell'Expert Advisor. Prima calcolo la maniglia, poi copio gli ultimi valori reali dai buffer degli indicatori.

Domande:

1. Quanto è profonda la storia in questi indicatori?

2. C'è un modo per limitare la profondità dei calcoli?
In questo caso abbiamo bisogno solo di alcuni ultimi valori per determinare l'inflessione o la direzione su/giù.
L'Expert Advisor è multi-valuta, ci sono decine di indicatori, quindi non c'è bisogno di fare calcoli inutili.


Spero che tu crei le maniglie dell'indicatore UNA volta in OnInit()?

La profondità di calcolo dipende dall'indicatore. Rari indicatori limitano forzatamente la profondità - di regola, tutti calcolano l'intera storia. Pertanto, forse è utile la seguente variante: introdurre la variabile responsabile della profondità nell'indicatore, e poi passare questo parametro attraverso iCustom nell'Expert Advisor.