[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 825

 
eugggy:
Ich verstehe das im Allgemeinen, aber was bedeutet es, wenn(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))break; wenn keine solche Bestellung ausgewählt ist, dann abbrechen oder was?


OrderSelect (siehe https://docs.mql4.com/ru/trading/OrderSelect) gibt FALSE zurück, wenn die Funktion fehlschlägt. Siehe https://docs.mql4.com/ru/basis/operators/break für Pausenbetreiber.

Dies kann vereinfacht werden zu

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

die Hauptsache ist, die Reihenfolge zu wählen.

 
eugggy:


Und für mich sieht es nach ganz anderen Dingen aus. Könnten Sie Folgendes in Ihren Code einfügen if(Tip==OP_BUYSTOP||Tip==OP_SELLSTOP&&Minute()<59&&Minute()>57) OrderDelete(Ticket);

und wenn ja, welchen Teil?


Ohne Ihren Code zu sehen, kann ich davon ausgehen, dass stattdessen (es hängt alles von Ihrem Algorithmus):

if(OrderType()==OP_BUYSTOP) OrderDelete(OrderTicket());
if(OrderType()==OP_SELLSTOP) OrderDelete(OrderTicket());
if(OrderType()==OP_BUYLIMIT) OrderDelete(OrderTicket());
if(OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket());

Sie müssen nur die Reihenfolge der Variablen und die Klammern in der Bedingung mit || und && korrigieren.

Die Bedingung Minute()<59&&Minute()>57 kann auf Minute()==58 reduziert werden oder >= oder <= verwenden.

Um die Schließung eines schwebenden Auftrags am Ende einer Periode oder zu einem bestimmten Zeitpunkt zu erzwingen, können Sie den Parameter Verfallsdatum angeben - siehe https://docs.mql4.com/ru/trading/OrderSend. In diesem Fall brauchen Sie sich nicht um die Programmierung der Schließung zu kümmern. Und die Bestellung wird bedingungslos geschlossen, ohne dass eine Korrektur für die fehlende Verbindung erfolgt.

 
eugggy:

Ja, eine Menge nützlicher Dinge. Ich hätte auf die Werbegeschenke verzichten können, aber es ist ein sehr kompliziert geschriebenes Lehrbuch.
Sie sehen... Ich bin beim Thema, wie "sie jetzt reden" :)

Freebie, Leute! Yo! Kommt alle her!!!

Ich denke, wenn das SC-Lehrbuch so geschrieben wäre, wäre es eine 6+.

Entschuldigung für das Off-Topic...

 
eugggy:

Nein, wir brauchen sie nicht stattdessen, sondern zusätzlich. Ich habe mir das Diagramm angesehen: Manchmal verlässt der Kurs den High-Low-Kanal nicht und die schwebenden Aufträge bleiben bestehen. Wenn sie den High-Low-Kanal nicht verlassen, bleiben sie bestehen. Das Einzige, was Sie tun müssen, ist, die ausstehenden zu schließen, bevor die neuen erscheinen. Was das Buch von 1986 betrifft, ist das Ihr Ernst? Ich bin selbst uralt, aber ich denke, das ist zu viel.


Darüber hinaus müssen Sie zusätzlichen ähnlichen Code schreiben. Irgendwie kommt es mir so vor, als ob Ihr Code ein bisschen durcheinander ist.

Das mit dem Buch von 1986 war kein Scherz. Nochmals: Wenn Sie die Grundlagen des Programmierens lernen wollen, müssen Sie sie lernen, ohne Ihren Kopf mit modernen Sprachkonstrukten zu verstopfen. Sie brauchen die Grundlagen. Informatik-Lehrbücher für Gymnasien, insbesondere das erste, sind methodisch gut für "dumme" Menschen aufgebaut. Wie, von wem, für wen und warum moderne Lehrbücher geschrieben werden, ist ein eigenes Thema

 

Datum Uhrzeit Lose Preis

26 2010.01.05 12:24 Verkauf 12 0.10 1.44026 1.44907 1.43526 0.00 3200.09
28 2010.01.05 13:21 Kauf 13 0.26 1.44326 1.43445 1.44826 0.00 3200.09
30 2010.01.05 15:34 Verkauf 14 0.43 1.44026 1.44907 1.43526 0.00 3200.09
32 2010.01.05 16:27 kaufen 15 0.72 1.44326 1.43445 1.44826 0.00 3200.09
34 2010.01.05 17:18 verkaufen 16 1.19 1.44026 1.44907 1.43526 0.00 3200.09

Hier haben wir 5 offene Aufträge in den entsprechenden Richtungen.

Wie berechnet man die Gesamtspanne für alle offenen Aufträge?

Paar: EURUSD, Kontrakt 100.000, Hebelwirkung 100.

 
ikatsko:

Datum Uhrzeit Lose Preis

26 2010.01.05 12:24 verkaufen 12 0,10 1,44026 1,44907 1,43526 0,00 3200,09
28 2010.01.05 13:21 kaufen 13 0,26 1,44326 1,43445 1,44826 0,00 3200,09
30 2010.01.05 15:34 verkaufen 14 0,43 1,44026 1,44907 1,43526 0,00 3200,09
32 2010.01.05 16:27 kaufen 15 0,72 1,44326 1,43445 1,44826 0,00 3200,09
34 2010.01.05 17:18 sell 16 1.19 1.44026 1.44907 1.43526 0.00 3200.09

Hier sind 5 offene Aufträge in den jeweiligen Richtungen.

Wie berechne ich die Gesamtspanne für alle offenen Aufträge?

Paar: EUROLLAR, Kontrakt 100000, Hebelwirkung 100.

MarketInfo(Symbol(),MODE_MARGINREQUIRED);

Gibt den Betrag an freien Mitteln zurück, der benötigt wird, um 1 Lot in einem Kaufauftrag zu eröffnen. Schauen Sie sich die anderen an, je nach Ihren Bedürfnissen.

Dies könnte für Sie auch nützlich sein:

double AccountFreeMarginCheck ( string symbol, int cmd, double volume)

Gibt den Betrag der freien Mittel zurück, der nach Eröffnung der angegebenen Position zum aktuellen Preis auf dem aktuellen Konto verbleibt. Wenn nicht genügend Mittel zur Verfügung stehen, wird der Fehler 134 (ERR_NOT_ENOUGH_MONEY) erzeugt.
 
Danke für die schnelle Antwort, aber ich möchte die Marge berechnen, BEVOR diese Positionen eröffnet werden! Die Strategie ist eine Lawine, ich muss wissen, ob es einen Stop Out geben wird, nachdem die entsprechenden Positionen geöffnet wurden? Die Losgrößen aller anstehenden Lose sind im Voraus bekannt. Ich würde gerne wissen: Wie viele Aufträge (mit vorher bekannten inkrementellen Lots) können eröffnet werden?
 
ikatsko:
Danke für die schnelle Antwort, aber ich möchte die Marge berechnen, BEVOR diese Positionen eröffnet werden! Die Strategie ist eine Lawine, ich muss wissen, ob es einen Stop Out geben wird, nachdem die entsprechenden Positionen geöffnet wurden? Die Losgrößen aller anstehenden Lose sind im Voraus bekannt. Ich möchte wissen: Wie viele Aufträge (mit im Voraus bekannten inkrementellen Lots) können eröffnet werden?
// ==========================================================================
// ------------ Функция рассчёта величины лота для открытия позиции ---------
// Если лот превышает возможный для открытия позы, то он корректируется 
// ==========================================================================

double CorrectLots(double lt)
{
   double ltcorr;
   double pnt =      MarketInfo(Symbol(),MODE_POINT);
   double mspr =     MarketInfo(Symbol(),MODE_SPREAD);
   double dig =      MarketInfo(Symbol(),MODE_DIGITS);
   double MaxLot =   MarketInfo(Symbol(),MODE_MAXLOT);
   double MinLot =   MarketInfo(Symbol(),MODE_MINLOT);
   double StpLot =   MarketInfo(Symbol(),MODE_LOTSTEP);
   double OneLot =   MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble(AccountFreeMargin()/4.0,dig);    // Свободные средства, разрешенные к торговле
   
   lt=MathAbs(lt);
   ltcorr=lt;                       // Зададим начальное значением ltcorr равным значению lt
   
   if (lt>MaxLot) ltcorr=MaxLot;   // Проверим превышение допустимых ...
   if (lt<MinLot) ltcorr=MinLot;   // ... значений лота
   
   double Money=ltcorr*OneLot+mspr*pnt;    // Вычисляем стоимость открываемой позы

   if (Money<TradeMrg)              // Если свободных средств больше, чем цена позиции - 
      {
         return(ltcorr);                                                            // ... возвращаем неизменённый лот
      }
   else if (Money>=TradeMrg)        // Если цена позиции равна или больше, чем есть свободных средств, то ...
      {
         ltcorr=MathAbs(MathFloor(TradeMrg/OneLot/StpLot)*StpLot);               // ... рассчитаем допустимый лот
         double MoneyCorr=ltcorr*OneLot+mspr*pnt;                      
         Print("Func CorrectLots: лот ",lt," скорректирован до ",ltcorr,
               " Стоимость позы до корректировки = ",Money,
               " Стоимость позы после корректировки = ",MoneyCorr
               ); 
         return(ltcorr);                                                         // ... и вернём его значение
      }
   Print("Func CorrectLots: лот вернули без изменений");
   if (lt>MaxLot) ltcorr=MaxLot;   // Проверим превышение допустимых ...
   if (lt<MinLot) ltcorr=MinLot;   // ... значений лота
   return(ltcorr);                            // Возврат изначального лота в непредусмотренных случаях с сообщением
}

Versuchen Sie es und finden Sie es selbst heraus... :)

Und, noch einmal.

double AccountFreeMarginCheck ( string symbol, int cmd, double volume)

Ich habe diese Funktion in einem benutzerdefinierten EA verwendet, der auch ein nacktes Martingal verwendet.
Ich musste eine Zeile schreiben, bevor ich eine Position öffnete, um sie stabiler zu machen:

double lt;                           // Лот
// --------------------------------- +

lt=CorrectLots(lt*2);                // Умножаем лот на 2 с проверкой и коррекцией под допустимый размер лота

// ------- Открытие позы ----------- +
 
Artem, ich muss die Marge selbst berechnen, das heißt, ich muss die Berechnungsformel kennen. Ich brauche keine Antwort des Terminals über die aktuellen Möglichkeiten. Ich kenne die Formel, aber da ist etwas mit der Berechnung der Marge bei sich überschneidenden Positionen! Und ich weiß nicht einmal, was sich überschneidende Positionen sind! Ich habe ausdrücklich ein Beispiel genannt, an dem Sie sehen können, dass jede aufeinanderfolgende Position in die entgegengesetzte Richtung zur vorherigen geöffnet wird. Wenn Sie die Marge für offene Positionen berechnen, indem Sie alle Lots zusammenzählen (und diesen Betrag in die Formel einfügen), stimmt sie nicht mit der tatsächlichen Reaktion des DC überein, wenn er einen Stop Out anwendet. Ich möchte es so berechnen, wie es der DC berechnet
 
ikatsko:
Artem, ich muss die Marge selbst berechnen, d.h. ich muss die Berechnungsformel kennen. Ich brauche keine Antwort des Terminals über die aktuellen Möglichkeiten. Ich kenne zwar die Berechnungsformel, aber es gibt irgendeine Besonderheit bei der Berechnung der Marge für sich überschneidende Positionen!!! Und ich weiß nicht einmal, was sich überschneidende Positionen sind! Ich habe ausdrücklich ein Beispiel genannt, an dem Sie sehen können, dass jede aufeinanderfolgende Position in die entgegengesetzte Richtung zur vorherigen geöffnet wird. Wenn Sie die Marge für offene Positionen berechnen, indem Sie alle Lots zusammenzählen (und diesen Betrag in die Formel einfügen), stimmt sie nicht mit der tatsächlichen Reaktion des DC überein, wenn er einen Stop Out anwendet. Ich möchte es so berechnen, wie es das DC berechnet

Sind sich überschneidende Positionen nicht gleichzusetzen mit gesperrten Positionen? Dies ist die Marge, die erforderlich ist, um zwei offene Positionen mit gleichem Volumen, aber entgegengesetzter Richtung zu halten. Sie beträgt in der Regel die Hälfte der Marge, die erforderlich ist, um eine offene Position mit demselben Volumen zu halten wie eine der beiden gesperrten Positionen.

Ich habe es sofort bemerkt, aber ich dachte nicht, dass es dich verwirren würde...

Für den gleichen EA habe ich die Marge auf diese Weise berechnet, ich weiß jetzt nicht, vielleicht ist es falsch??? :

// ======================================================================
// -------------------------- Рассчёт свободной маржи -------------------
// ======================================================================
bool LastFreeMargin(string sy, int op, double lot)
{
   if (sy=="0" || sy=="") sy=Symbol();
   double FreeEqu  = AccountFreeMargin();                         // Вся маржа
   double FreeEqu4 = NormalizeDouble(Equ_Start/4.0, 2);           // Делим маржу на 4 (Средства для торговли)
   double CheckEqu = AccountFreeMarginCheck(sy, op, lot);         // Остаток всех средств после открытия позы 
   double EquTrade = FreeEqu-CheckEqu;                            // Средства, требуемые для открытия следующей
   
   if (FreeEqu4-EquTrade>0) return(true);
   else return(false);
}   

Das ist alles, was der DC an Sie zurückgibt:

MODE_MARGININIT 29 Erforderliche Anfangsmarge für 1 Lot
MODE_MARGINMAINTENANCE 30 Höhe der Einschussforderung zur Deckung offener Positionen pro 1 Lot
MODE_MARGINHEDGED 31 Marge für überlappende Positionen pro 1 Lot
MODE_MARGINREQUIRED 32 Höhe der freien Mittel, die benötigt werden, um 1 Los zum Kauf zu eröffnen
Grund der Beschwerde: