[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 504

 
prom18:
O gráfico deve parecer uma linha reta crescente.

Por que você acha que sim?
 
Vinin:

Por que você decidiu isso?
Bem, cada barra tem um volume maior que zero e eu preciso de seu total, que é recalculado quando uma nova barra aparece.
 

a sergeev:

Ah, agora entendo o que você quer dizer. Pois lembra exatamente com que valor o contador deve ser comparado, e não o altera. Isto é, se a OrderTotal devolveu 2, então para se lembrar disso e trabalhar com 2.

 
Solree:

a sergeev:

Ah, agora entendo o que você quer dizer. Pois lembra exatamente com que valor o contador deve ser comparado, e não o altera. Portanto, se a OrderTotal devolveu 2, então para se lembrar disso e trabalhará com 2.


Não. Não é isso que estou dizendo.

A condição de parada do loop (no seu caso, OrderTotal()) é calculada !a cada iteração!

então na primeira iteração =2
na segunda iteração =1

Você é um programador ou o quê? Você não consegue entender as coisas elementares.

 

a sergeev:

Você me abriu os olhos. Eu até abri propositalmente a IDE para C++ para verificá-la. E acontece que você está duplamente certo! Obrigado! :) Mas... O pedido ainda não é selecionado, mesmo se você o fizer desta maneira:

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:
Bem, cada barra tem um volume maior que zero e eu preciso que sua soma seja recalculada quando uma nova barra aparecer.

O volume total pode tanto subir como descer.
 
Vinin:

O volume total pode tanto subir como descer.
Eu não entendo. Volume é o número de carrapatos dentro de uma barra. O volume do primeiro é de 30, o segundo de 20, o terceiro de 10. A soma seria de 60. Ou não é?
 
Solree:

a sergeev:

Você me abriu os olhos. Eu até abri propositalmente a IDE para C++ para verificá-la. E acontece que você está duplamente certo! Obrigado! :) Mas... O pedido ainda não é selecionado, mesmo se você o fizer desta maneira:


Sempre elimine ordens por contagem regressiva

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:

Mas... o pedido ainda não foi selecionado, mesmo que você o faça:

e não vai!

você faz OrderSelect por número de posição.

na primeira iteração, você seleciona a primeira ordem, posição de ordem a=0

após o fechamento desta ordem, o número de ordens se torna OrderTotal=1.
Isto significa que a antiga segunda ordem da posição 1 se torna a posição 0.

Mas na segunda iteração de seu pedido, a = 1, não 0! Portanto, a OrderSelect sobre a posição agora inexistente=1 retornará um erro.

-------

Agora pense por um minuto antes de escrever seu próximo post. Que duas opções você pode sugerir para evitar esta dinâmica.

 
prom18:
Eu não entendo. Volume é o número de carrapatos dentro de uma barra. O volume do primeiro é 30, o segundo 20, o terceiro 10. A soma será de 60. Ou será?


Faça uma série cronológica com volumes e recalcule com canetas

Por exemplo, existem os seguintes volumes

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

Aqui estão as somas de três

50, 48, 44, 55

Há uma ascensão, há uma queda.

É exatamente como na vida.