Autoapprendimento del linguaggio MQL5 da zero - pagina 66

 
Valeriy Yastremskiy:

L'operatore del ciclo e gli operatori nel corpo del ciclo. Non esattamente il classico russo.

Tutto è buono, naturalmente, ma dov'è l'iteratore i nel corpo del ciclo? E per ottenere il simbolo di posizione e il suo numero magico, deve essere prima selezionato. La descrizione della posizione è una struttura (in mcl5 tutta la struttura e gli ordini e il tempo e gli affari) e viene compilata tramite selezione, dall'iteratore che non è un biglietto di posizione, ma un numero di posizione. e dobbiamo ricordare che nella struttura della descrizione della posizione, è sempre l'ultima selezione di posizione.

Ciao Valery! Grazie per il chiarimento.

Ecco dove stava tutta la mia confusione, perché tutto funzionava senza l'operatore for loop, mentre non funzionava con esso per qualche motivo. Ho capito bene che dovrei prima fare tutte le ricerche necessarie tramite richiesta?

Saluti, Vladimir.

 
MrBrooklin:

Ciao Valery! Grazie per il chiarimento.

Ecco dove stava tutta la mia confusione, perché tutto funzionava senza l'operatore for loop, ma con esso, per qualche ragione, no. Ho capito bene che dovevo prima fare tutte le ricerche necessarie tramite richiesta?

Saluti, Vladimir.

No, non conosco bene MKL5 . Questa è una richiesta di esecuzione. Ed è necessario selezionare la posizione per numero, per lavorare ulteriormente con essa.

PositionSelect

Credo di sì.

 
MrBrooklin:

Buona giornata e buon umore a tutti!

Cari professionisti! Per favore consigliatemi, ma non a parole, altrimenti non imparerò mai il linguaggio di programmazione MQL5.

Saluti, Vladimir.

Ciao, il problema è che hai applicato il ciclo delle posizioni aperte, e non l'hai definito in termini di "if", cioè cosa cerca esattamente il ciclo for, e non l'hai ancora completato, deve restituire qualcosa...

Le posizioni aperte vengono contate di continuo, quindi è meglio creare un blocco con un ciclo, e quando lo si apre, lo si può chiamare, per esempio, in questo modo;

input int MaxOpenedPositions=1;
.
.
.
int Total=TotalPositions(-1);
if(Total<MaxOpenedPositions && другие условия для открытия) OpenBUY();//например
if(Total<MaxOpenedPositions && другие условия для открытия) OpenSELL();//например

//+------------------------------------------------------------------+
//| Total Positions                                                  |
//+------------------------------------------------------------------+
int TotalPositions(int Type)
   {
int cnt=0;
if(PositionsTotal()>0)
for(int i=PositionsTotal()-1;i>=0;i--)
   
if(PositionSelectByTicket(PositionGetTicket(i)) && PositionGetString(POSITION_SYMBOL)==_Symbol && PositionGetInteger(POSITION_MAGIC)==MagicNumber) 
   {
   if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) {cnt++;continue;}
   if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) {cnt++;}
   }
   return(cnt);
   }
 
Valeriy Yastremskiy:

No, non conosco bene MKL5. Questa è una richiesta di esecuzione. Ed è necessario selezionare una posizione per numero, al fine di lavorare ulteriormente con essa.

PositionSelect

Credo di sì.

Ho provato di tutto, compreso PositionSelect. Nessuno di loro ha aiutato.

Saluti, Vladimir.

 
VVT:

Ciao! Con le parole; il punto è che quando hai applicato il ciclo delle posizioni aperte, non l'hai specificato nelle condizioni "if", cioè cosa esattamente sta cercando il ciclo for, inoltre non l'hai terminato in nessun modo, dovrebbe restituire qualcosa...

Le posizioni aperte sono calcolate di continuo, quindi è meglio creare un blocco con un ciclo e chiamarlo quando si apre, per esempio;

Ciao!

Grazie per il suggerimento. Cercherò di analizzare e applicare il vostro metodo di enumerazione delle posizioni aperte.

Saluti, Vladimir.

 
VVT:

Ciao! A parole; il punto è che quando hai applicato il ciclo per cercare le posizioni aperte, non l'hai specificato nel "if", cioè cosa esattamente cerca il ciclo for, e non l'hai terminato in nessun modo, dovrebbe restituire qualcosa...

A proposito, il MQL5 Reference non dice nulla sul fatto che il ciclo deve restituire qualcosa al termine. Forse ho capito male qualcosa? O forse si riferisce all'istruzione if?

Cordiali saluti, Vladimir.

 
MrBrooklin:

Ho provato di tutto, compreso PositionSelect. Niente è servito.

Saluti, Vladimir.

Solo ottenuto, sì, la selezione della posizione in rete per strumento, non per numero. Oh, hanno fatto un casino).

È possibile attraverso

  • PositionGetTicket restituisce il biglietto di posizione per numero di posizione (e noi abbiamo un numero) e dopo aver ricevuto il biglietto di posizione possiamo ottenere il suo simbolo e la sua magia.
Oppure, se si tratta di netting, possiamo pensarci e decidere perché abbiamo bisogno del numero totale di ordini o posizioni, se possiamo avere solo una posizione su uno strumento e abbiamo bisogno di saperlo. Ecco perché forse non abbiamo bisogno di un ciclo. Sul nostro strumento facciamo Se PositionSelect restituisce False, apre una posizione e se True, seleziona una posizione su questo strumento e possiamo lavorare con essa e modificarla per il trawling.
 
Valeriy Yastremskiy:

Mi sono appena reso conto, sì, la selezione delle posizioni nel netting per strumento, non per numero. Oh, sono incasinati).

È possibile attraverso

  • PositionGetTicket restituisce un biglietto di posizione per numero di posizione (e noi abbiamo un numero) e ottenendo il biglietto di posizione possiamo ottenere il suo simbolo e la sua magia.
Oppure, se si tratta di netting, possiamo pensarci e decidere perché abbiamo bisogno del numero totale di ordini o posizioni, se possiamo avere solo una posizione su uno strumento e abbiamo bisogno di saperlo. Ecco perché forse non abbiamo bisogno di un ciclo. Sul nostro simbolo, facciamo Se PositionSelect restituisce False, apre una posizione e se True, seleziona una posizione su questo simbolo e possiamo lavorare con essa e modificarla per il trawling.

Quindi il codice è stato originariamente scritto senza l'operatore di loop, anche se ero curioso di provarlo in seguito.

Saluti, Vladimir.

 
MrBrooklin:

A proposito, non c'è niente nel MQL5 Reference sul fatto che il ciclo debba restituire qualcosa al suo completamento. Forse ho sbagliato di nuovo?

Sinceramente, Vladimir.

La formulazione non è del tutto corretta: le azioni dovrebbero essere eseguite nel corpo del ciclo, a seconda dell'iteratore. A seconda dell'iteratore. Ed è il risultato dell'esecuzione di queste azioni nel corpo del ciclo che dovrebbe essere restituito. Se il ciclo è stato passato e non c'erano operatori di pausa o di contingenza, significa che andremo all'espressione 3 e poi all'espressione 2 e se è True, la restituiremo con il nuovo iteratore al corpo del ciclo.

 
MrBrooklin:

Così in origine il codice è stato scritto senza l'operatore di loop, anche se poi ero interessato a provare come applicarlo.

Con rispetto, Vladimir.

Puoi applicare

  • PositionGetTicket restituisce un biglietto di posizione per numero di posizione (e noi abbiamo un numero) e avendo ricevuto il biglietto di posizione possiamo ottenere il suo simbolo e la sua magia.

Scorri tutti i biglietti per numero. E attraverso i biglietti scoprire i simboli della posizione e confrontarli con i nostri. Prendi il magik di posizione e confrontalo con il nostro.

if(PositionSelectByTicket(PositionGetTicket(i)) && PositionGetString(POSITION_SYMBOL)==_Symbol && 
PositionGetInteger(POSITION_MAGIC)==MagicNumber) // вот эта строчка

Ma solo perché.