[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 504

 
prom18:
Il grafico dovrebbe apparire come una linea retta crescente.

Perché lo pensa?
 
Vinin:

Perché l'hai deciso?
Bene, ogni barra ha un volume maggiore di zero e ho bisogno del loro totale, che viene ricalcolato quando appare una nuova barra.
 

a sergeev:

Ah, ora capisco cosa vuoi dire. Per ricorda esattamente a quale valore il contatore deve essere confrontato, e non lo cambia. Cioè, se OrdersTotal ha restituito 2, allora for si ricorderà di questo e lavorerà con 2.

 
Solree:

a sergeev:

Ah, ora capisco cosa vuoi dire. Per ricorda esattamente a quale valore il contatore deve essere confrontato, e non lo cambia. Quindi, se OrdersTotal ha restituito 2, allora for si ricorderà di questo e lavorerà con 2.


No, non è quello che sto dicendo.

La condizione di arresto del ciclo (nel vostro caso, OrdersTotal()) è calcolata ad ogni iterazione!

quindi alla prima iterazione =2
alla seconda iterazione =1

Sei un programmatore o cosa? Non riesci a capire le cose elementari.

 

a sergeev:

Mi hai aperto gli occhi. Ho persino aperto di proposito l'IDE per C++ per controllare. E si scopre che hai doppiamente ragione! Grazie! :) Ma... L'ordine non è ancora selezionato, anche se lo fai in questo modo:

int someA = OrdersTotal();
for (int a = 0; a < someA; a++)
    if (OrderSelect(a, SELECT_BY_POS, MODE_TRADES))
        if (OrderComment() == "Aelit" && OrderType() == OP_SELL)
            OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), 0);
 
prom18:
Bene, ogni barra ha un volume maggiore di zero e ho bisogno che la loro somma sia ricalcolata quando appare una nuova barra.

Il volume totale può sia salire che scendere.
 
Vinin:

Il volume totale può sia salire che scendere.
Non capisco. Il volume è il numero di tick all'interno di una barra. Il volume del primo è 30, il secondo 20, il terzo 10. La somma sarebbe 60. O non lo è?
 
Solree:

a sergeev:

Mi hai aperto gli occhi. Ho persino aperto di proposito l'IDE per C++ per controllare. E si scopre che hai doppiamente ragione! Grazie! :) Ma... L'ordine non è ancora selezionato, anche se lo fai in questo modo:


Cancellare sempre gli ordini facendo il conto alla rovescia

int someA = OrdersTotal();
for (int a = someA-1;a>=0 a--)
    if (OrderSelect(a, SELECT_BY_POS))
        if (OrderComment() == "Aelit" && OrderType() == OP_SELL)
            OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);
 
Solree:

Ma... l'ordine non è ancora selezionato, anche se lo si rende tale:

e non lo farà!

si fa OrderSelect per numero di posizione.

nella prima iterazione, si seleziona il primo ordine, posizione d'ordine a=0

quando questo ordine viene chiuso, il numero di ordini diventa OrdersTotal=1.
Questo significa che l'ex secondo ordine dalla posizione 1 diventa la posizione 0.

Ma alla seconda iterazione del vostro ordine, a = 1, non 0! Quindi l'OrderSelect sull'ormai inesistente position=1 restituirà un errore.

-------

Ora pensa un attimo prima di scrivere il tuo prossimo post. Quali due opzioni puoi suggerire per evitare questa dinamica.

 
prom18:
Non capisco. Il volume è il numero di tick all'interno di una barra. Il volume del primo è 30, il secondo 20, il terzo 10. La somma sarà 60. O lo è?


Prendere una serie temporale con volumi e ricalcolare con penne

Per esempio ci sono i seguenti volumi

10, 15, 25, 8, 11, 24, 30

Ecco le somme di tre

50, 48, 44, 55

C'è un aumento, c'è una caduta.

È proprio come nella vita.