[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 580

 
lottamer:


Und darf ich fragen, was sie damit bezwecken?

for(int i=0; i<OrdersTotal(); i++)

Es scheint, als ob sie versuchen, offene Stellen zu zählen...

...Aber lassen Sie sich nicht von Ihren Gefühlen leiten, sondern halten Sie sich an die Regeln. In diesem Fall probiert die Schleife Parameter (in der "Liste" der Aufträge) mit einer ganzzahligen Variablen i aus, deren Wert bei jeder Iteration um 1 erhöht wird. Die Auftragsnummer wird ausprobiert. :)))
 
BeerGod:

Auf diese Weise wählt es die Aufträge nach den vorgegebenen Parametern aus.

z.B. https://www. mql5.com/ru/forum/131859/page3#434221

Funktion NumberOfPositions().

Diese Funktion gibt die Anzahl der momentan offenen Positionen zurück. Eine genauere Auswahl der zu zählenden Positionen wird durch externe Parameter festgelegt:

  • sy - Bezeichnung des Marktinstruments. Wenn dieser Parameter gesetzt ist, berücksichtigt die Funktion nur Positionen des angegebenen Instruments. Der Standardwert "" bedeutet ein beliebiges Marktinstrument. NULL bedeutet das aktuelle Instrument.
  • op - Handelsoperation, Positionsart. Gültige Werte: OP_BUY, OP_SELL oder -1. Der Standardwert -1 bedeutet eine beliebige Position.
  • mn - Positionsbezeichner, MagicNumber. Der Standardwert -1 bedeutet einen beliebigen Bezeichner.


Danke... ich werde diesen Forumsbeitrag zu meinen Lesezeichen hinzufügen. :))
 
Desead:


Deinit wird aufgerufen, wenn ich den Roboter aus dem Diagramm lösche - anders kann ich diese Bedingung nicht nachverfolgen..... , es ist wahrscheinlich einfacher, ein separates Skript zu schreiben, das alle verbleibenden Pendenzen löscht.

Übrigens, ein weiterer Gedanke zu diesem Thema:

Ich scheine das Problem des Löschens von Aufträgen gelöst zu haben. Ich berechnete die Anzahl der "notwendigen" (zu entfernenden) Aufträge in einer separaten Funktion, rief diese Funktion auf und dann while mit einer Bedingung (Total>0), dann den Zyklus des Entfernens for(int i=Total-1;i<=0l; i--), wieder die Berechnung der Anzahl der "notwendigen", Zähler der Entfernungsversuche mit einem Exit vonwhile, wenn das gegebene Niveau erreicht ist. Auf diese Weise wird alles gelöscht.

Hier kann es zu einer Endlosschleife kommen, wenn einer der Aufträge aus irgendeinem Grund nach dem Zeitpunkt der Zählung verschwindet.


Die Auftragszählung erfolgt jedes Mal nach der for-Schleife zum Löschen eines Auftrags, der Zähler iteriert, während die Schleife mitbreak verlassen wird, wenn der Zähler den Wert erreicht, den Sie in der externen Variablen festgelegt haben, Sie können vor dem Beenden eine Fehlerbehandlung hinzufügen und das Ergebnis mit
Alert(...)
oder
Drucken( ...)
Und wie mir jemand riet, einen Scheck für die Handelsauflösung hinzuzufügen. Es gibt also keine Möglichkeit, hier eine Schleife zu ziehen.


 
Dimka-novitsek:

Guten Tag!!! Ich kann keine schöne Lösung für diese Situation finden. Hier ist eine typische Auftragslage. Aber wenn ich meinem Roboter in den Parametern Null gebe, d.h. keine Stopps und Takeprofits, wird nichts funktionieren.

Wir können auch ein if setzen und zum zweiten Mal einen Auftrag mit Nullen eingeben, aber das ist ein bisschen umständlich.

Alles ist ausgereift - auf dem Niveau der Kunst!!! ;)

Und im Ernst: Lernen Sie, über das nachzudenken, was Sie gerade geschrieben haben. Bei Nullwerten der STOPPs sind Stoploss und Take Profit nach Ihrer Formel gleich dem Eröffnungskurs einer Order, was UNMÖGLICH ist. Haben Sie eine andere Lösung (können Sie Ihr Gehirn benutzen??? :))?

 
Dimka-novitsek:

Guten Tag!!! Ich kann keine gute Lösung für diese Situation finden. Hier ist eine typische Auftragslage. Aber wenn ich meinem Roboter in den Parametern Null gebe, d.h. keine Stopps und Takeprofits, wird nichts funktionieren.

Wir können auch ein if setzen und zum zweiten Mal einen Auftrag mit Nullen eingeben, aber das ist ein bisschen umständlich.



if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0; 
 
rigonich:


...Sie verschwenden Ihre Zeit (Sie lassen dem Mann keine Chance): wenn ein Mann seine grauen Zellen nicht stimuliert, wird er sein ganzes Leben "auf der Veranda" verbringen - "Gib mir einen Tipp, um Himmels willen!" :)))
 
BeerGod:

Auf diese Weise wählt es die Aufträge nach den vorgegebenen Parametern aus.

z.B. https://www. mql5.com/ru/forum/131859/page3#434221

Funktion NumberOfPositions().

Diese Funktion gibt die Anzahl der momentan offenen Positionen zurück. Eine genauere Auswahl der zu zählenden Positionen wird durch externe Parameter festgelegt:

  • sy - Bezeichnung des Marktinstruments. Wenn dieser Parameter gesetzt ist, berücksichtigt die Funktion nur Positionen des angegebenen Instruments. Der Standardwert "" bedeutet ein beliebiges Marktinstrument. NULL bedeutet das aktuelle Instrument.
  • op - Handelsoperation, Positionsart. Gültige Werte: OP_BUY, OP_SELL oder -1. Der Standardwert von -1 bedeutet eine beliebige Position.
  • mn - Positionsbezeichner, MagicNumber. Der Standardwert -1 bedeutet einen beliebigen Bezeichner.


angeschaut

ModifyOrder() Funktion. https://forum.mql4.com/ru/38949#434195

Es müssen 3 Parameter eingegeben werden. Zwei habe ich erraten, den dritten nicht.

Was bedeutet UseSound in der nächsten Zeile?

----------------------------------------------------

if (UseSound) PlaySound("alert.wav"); break;

 
lottamer:


Lassen Sie es funktionieren - ich habe eine Position und ein Werkzeug.

Aber es funktioniert nicht!

Er sagt, dass es einen Fehler im Code gibt

dazu.

---------------------------

int start()

{

//----

wenn AufträgeSumme()>0

PlaySound ("alert.wav");

//----

zurück(0);

}

-----------------------------

gibt 8 Fehler zu!!!


Setzen Sie die Bedingung (die nach if) in Klammern
 
TarasBY:

Sie haben alles ausgereift - auf einem künstlerischen Niveau!!! ;)

Und im Ernst: Lernen Sie, über das nachzudenken, was Sie gerade geschrieben haben. Wenn wir gemäß Ihrer Formel Null STOPPs setzen, sind Stop Loss und Take Profit gleich dem offenen Preis des Auftrags, was UNZULÄSSIG ist. Haben Sie eine andere Lösung (können Sie Ihr Gehirn benutzen??? :))?


:))) oops, darf ich auch den folgenden Punkt in "paneuropäisch" klären?

Was ist der Unterschied zwischen den Funktionen start und void?

 
TarasBY:

...Sie irren sich: Wenn ein Mensch seine grauen Zellen nicht stimuliert, wird er sein ganzes Leben "auf der Veranda" verbringen - "Gib mir einen Tipp, um Himmels willen!" :)))


Wahrscheinlich haben Sie recht, aber das ist meine Lebensphilosophie: Wenn es nicht zu viel Mühe macht, helfe anderen, und sie werden dir helfen, wenn du sie brauchst. Mit 55 ist es schwer, Gewohnheiten zu ändern.

P.S. Auf diese Weise lerne ich auch.