Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1482

 
MrBrooklin #:

Ciao Alexey, la variabile pos_total=PositionsTotal(), era solo impostata a livello globale. Ora l'ho spostata all'interno della funzione ed è risultato che il problema era questo. Tutto ha funzionato. Qual è il problema? Non capisco affatto lo scherzo!!!

Ora, per fare un esperimento, ho spostato di nuovo pos_totale a livello globale e ha smesso di funzionare di nuovo, ma quando l'ho messo dentro la funzione, funziona come dovrebbe! Solo qualche miracolo, beh, almeno per me!!!! )))

Risulta che una variabile a livello globale non può essere inizializzata da una funzione? È vero?

Saluti, Vladimir.

A volte è possibile, ma non per tutte le variabili. In questo caso, quando si esegue l'EA, esso non vede ancora le posizioni aperte e la variabile è uguale a zero....

In realtà, ieri ho sperimentato il campionamento delle posizioni e sono giunto alla conclusione che PositionsTotal() è necessario solo per determinare il numero di posizioni. E questo numero è necessario solo per limitare il ciclo.

Ecco un ciclo di questo tipo

  int i = 0;
  while(bool(posTicket = PositionGetTicket(i)) && !IsStopped())
   {
    string posSymbol = PositionGetString(POSITION_SYMBOL);
    double posPrice = PositionGetDouble(POSITION_PRICE_OPEN),
           pos_tp = PositionGetDouble(POSITION_TP),
           pos_sl = PositionGetDouble(POSITION_SL);
    printf("%s Ticket %d цена = %g тейк-профит = %g стоп-лосс = %g", posSymbol, posTicket, posPrice, pos_tp, pos_sl);
    i++;
   }


funziona anche se si ottiene un elenco di ordini o transazioni dalla cronologia precedente. Uno di questi giorni verificherò se la selezione degli ordini pendenti interferisce con esso.


E nel vostro caso è più facile scrivere senza un ciclo

      PositionGetTicket(PositionsTotal()-1); // получим тикет позиции

se avete bisogno dell'ultima posizione...

 
Alexey Viktorov #:
In questo caso, quando si avvia l'EA, questo non vede ancora le posizioni aperte e la variabile è uguale a zero ...

Sarei d'accordo con te, ma ecco il problema: quando ho messo la variabile pos_total a livello globale, l'EA non ha visto le posizioni aperte durante l'intero periodo di test, sebbene siano state aperte più di 50 posizioni durante questo periodo. Non capisco! Risulta che questa opzione non funziona?

Saluti, Vladimir.

 
Alexey Viktorov #:

Nel vostro caso è più facile scrivere senza un ciclo

se hai bisogno dell'ultima posizione...

Sono d'accordo, se non avessi diverse posizioni aperte su un simbolo diverso e in direzioni diverse. Intendo comprare e vendere. Ma grazie comunque per il suggerimento!

Saluti, Vladimir.

 
MrBrooklin #:

Sono d'accordo, se non ci fossero più posizioni aperte su un simbolo diverso e in direzioni diverse. Intendo dire comprare e vendere. Ma grazie comunque per il suggerimento!

Saluti, Vladimir.

Non fa alcuna differenza quante posizioni sono aperte e se vanno verso nord o verso la scopa o in tutte le direzioni contemporaneamente... L'ultima sarà PositionsTotal()-1.

 
Alexey Viktorov #:

Non fa differenza il numero di posizioni aperte e se sono aperte verso nord, verso nord o in tutte le direzioni contemporaneamente... L'ultima sarà PositionsTotal()-1.

Ciao Alexei, ero un po' confuso. Hai ragione come sempre!!! )))

Saluti, Vladimir.

 
Alexey Viktorov #:

In realtà, ieri ho sperimentato il campionamento delle posizioni e sono giunto alla conclusione che PositionsTotal() è necessario solo per determinare il numero di posizioni. E questo numero è necessario solo per limitare il ciclo.

Ecco un ciclo di questo tipo


funziona anche se si ottiene un elenco di ordini o transazioni dalla cronologia precedente. L'altro giorno verificherò se la selezione degli ordini in sospeso interferisce.

Anche qui c'è una sottigliezza.

Se l'elenco è molto grande e ordinato in base a qualche criterio, può essere più vantaggioso cercare l'elemento richiesto non cercando tutti gli elementi nel ciclo, ma dividendoli per metà, e in questo caso la conoscenza del numero totale di elementi nell'elenco può essere molto utile.

 
JRandomTrader #:

Anche qui c'è una sottigliezza.

Se l'elenco è molto grande e ordinato in base a qualche criterio, potrebbe essere più proficuo cercare l'elemento richiesto non eseguendo un ciclo su tutti gli elementi, ma eseguendo una divisione a metà, e in questo caso la conoscenza del numero totale di elementi dell'elenco può essere molto utile.

Non ho detto che la funzione è completamente inutile. Ma in alcuni casi si può e si deve fare a meno di essa. Dopo tutto, ogni funzione è tempo. Si può digitare un po' alla volta fino a quando non si ottiene un freno....

 
MrBrooklin #:

Ciao Alexei, sono stata stupida. Hai ragione come sempre!!! )))

Saluti, Vladimir.

Ho ragione, ma non ho specificato che la funzione così come l'hai scritta non funziona correttamente se vengono aperti più trade su simboli diversi.

Poiché si controlla solo l'ultimo, e questo (l'ultimo) può essere aperto su un altro simbolo.

 
Aleksandr Slavskii #:

Giusto, ma non ho specificato che la funzione così come l'hai scritta non funzionerà correttamente se vengono aperte diverse operazioni su simboli diversi.

Poiché si controlla solo l'ultima e questa (l'ultima) può essere aperta su un altro simbolo.

Ciao Alessandro, ho già pensato a questo argomento, ma non ho ancora iniziato a porre la domanda qui, perché non ho raggiunto il punto del codice in cui ci saranno diverse posizioni di simboli. Grazie per il suggerimento! )) Ora sono a un punto morto, ma non voglio portarlo qui per una revisione pubblica, perché c'è un desiderio irrefrenabile di "finirlo" con le mie forze.

A proposito, ho notato che tutti i miei cosiddetti "inciampi" si trovano in piccole cose che non riesco a vedere. Prendiamo lo specificatore di cui mi ha parlato Artem Trishkin. È una cosa così piccola e mi sono rotto la testa sul perché lo script non funziona. O lo stesso link &. Ho perso molto tempo. In generale, devo ancora imparare, imparare e imparare, e in russo - leggere, leggere e leggere la documentazione.

Saluti, Vladimir.

 
Buon pomeriggio!


Ho un conto di compensazione.

Nel mio Expert Advisor utilizzo il codice per controllare le operazioni effettuate:

HistorySelect(0,TimeCurrent());
ulong ticket = OrderGetTicket(0);
N_deals = HistoryDealsTotal();

Ma ho anche bisogno di stimare il numero di transazioni chiuse.
Penso di dover utilizzare il modificatore DEAL_ENTRY_OUT.
Ma non riesco a capire come utilizzarlo.

Per favore, aiutatemi.

Saluti, Alexander