[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 504

 
prom18:
Das Diagramm sollte wie eine ansteigende gerade Linie aussehen.

Warum glauben Sie das?
 
Vinin:

Warum haben Sie das entschieden?
Nun, jeder Balken hat ein Volumen, das größer als Null ist, und ich benötige ihre Summe, die neu berechnet wird, wenn ein neuer Balken erscheint.
 

an sergeev:

Ah, jetzt verstehe ich, was Sie meinen. Denn es merkt sich genau, mit welchem Wert der Zähler verglichen werden soll, und ändert ihn nicht. Wenn OrdersTotal also 2 zurückgegeben hat, wird for sich dies merken und mit 2 arbeiten.

 
Solree:

an sergeev:

Ah, jetzt verstehe ich, was Sie meinen. Denn es merkt sich genau, mit welchem Wert der Zähler verglichen werden soll, und ändert ihn nicht. Wenn OrdersTotal also 2 zurückgibt, merkt sich for dies und arbeitet mit 2.


Nein. Das ist nicht das, was ich sage.

Die Bedingung für das Anhalten der Schleife (in Ihrem Fall OrdersTotal()) wird !bei jeder Iteration berechnet !

also bei der ersten Iteration =2
bei der zweiten Iteration =1

Bist du ein Programmierer oder was? Du kannst elementare Dinge nicht verstehen.

 

an sergeev:

Sie haben mir die Augen geöffnet. Ich habe sogar absichtlich die IDE für C++ geöffnet, um es auszuprobieren. Und es stellt sich heraus, dass Sie doppelt Recht haben! Ich danke Ihnen! :) Aber... Der Auftrag ist immer noch nicht ausgewählt, auch wenn Sie es auf diese Weise tun:

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:
Nun, jeder Balken hat ein Volumen, das größer als Null ist, und ich brauche ihre Summe, die neu berechnet wird, wenn ein neuer Balken erscheint.

Das Gesamtvolumen kann sowohl steigen als auch fallen.
 
Vinin:

Das Gesamtvolumen kann sowohl steigen als auch fallen.
Das verstehe ich nicht. Das Volumen ist die Anzahl der Ticks innerhalb eines Balkens. Das Volumen der ersten ist 30, das der zweiten 20 und das der dritten 10. Die Summe würde 60 betragen. Oder ist es nicht so?
 
Solree:

an sergeev:

Sie haben mir die Augen geöffnet. Ich habe sogar absichtlich die IDE für C++ geöffnet, um es auszuprobieren. Und es stellt sich heraus, dass Sie doppelt Recht haben! Ich danke Ihnen! :) Aber... Der Auftrag ist immer noch nicht ausgewählt, auch wenn Sie es auf diese Weise tun:


Löschen Sie Aufträge immer durch Rückwärtszählen

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:

Aber... der Auftrag ist immer noch nicht ausgewählt, auch wenn Sie es so einrichten:

und das wird es nicht!

Sie machen OrderSelect nach Positionsnummer.

in der ersten Iteration wählen Sie die erste Bestellung, Bestellposition a=0

nachdem dieser Auftrag abgeschlossen ist, wird die Anzahl der Aufträge zu OrdersTotal=1.
Das bedeutet, dass die ehemalige zweite Ordnung von Position 1 zu Position 0 wird.

Aber bei der zweiten Iteration Ihrer Bestellung ist a = 1, nicht 0! Der OrderSelect für die jetzt nicht mehr vorhandene Position=1 wird also einen Fehler zurückgeben.

-------

Denken Sie einen Moment nach, bevor Sie Ihren nächsten Beitrag schreiben. Welche zwei Optionen können Sie vorschlagen, um diese Dynamik zu vermeiden?

 
prom18:
Das verstehe ich nicht. Das Volumen ist die Anzahl der Ticks innerhalb eines Balkens. Die erste hat ein Volumen von 30, die zweite von 20, die dritte von 10. Die Summe wird 60 betragen. Oder doch nicht?


Nehmen Sie eine Zeitreihe mit Volumina und rechnen Sie mit Stiften nach

Zum Beispiel gibt es die folgenden Bände

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

Hier sind die Summen von drei

50, 48, 44, 55

Es gibt einen Aufstieg und einen Fall.

Das ist genau wie im Leben.