[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 582

 
Azerus:

Die von Kim zuletzt veröffentlichte Funktion GetPotentialLossInCurrency (https://forum.mql4.com/ru/11287/page107) berücksichtigt nur offene Aufträge:

Ich habe versucht, sie ein wenig zu erweitern, indem ich schwebende Aufträge einbezog (indem ich einfach andere Typen hinzufügte): aber schwebende Aufträge werden nicht berücksichtigt. Werden sie unterschiedlich gezählt? Die Dokumentation sagt nichts darüber aus....


Bei schwebenden Aufträgen gibt es keinen "potenziellen Totalverlust der offenen Positionen in der Einzahlungswährung".

Die Funktion GetPotentialLossInCurrency() gibt den gesamten potenziellen Verlust der offenen Positionen in der Depotwährung zurück.

Er bezieht sich auf Positionen auf dem Markt. Drücken Sie F1 auf diese Marktfunktionen, lesen Sie die Informationen sorgfältig durch:

tv=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
              if (OrderType()==OP_BUY) {
                pl+=(OrderOpenPrice()-OrderStopLoss())/po*OrderLots()*tv;
              }
              if (OrderType()==OP_SELL) {
                pl+=(OrderStopLoss()-OrderOpenPrice())/po*OrderLots()*tv;
              }
              pl+=OrderCommission()+OrderSwap();
 
Roman.:


Beischwebenden Aufträgen gibt es keinen "potenziellen Totalverlust der offenen Positionen in der Einzahlungswährung".

Die Funktion GetPotentialLossInCurrency() gibt den gesamten potenziellen Verlust der offenen Positionen in der Depotwährung zurück.

Es geht um Positionen auf dem Markt. Drücken Sie F1 auf diese Marktfunktionen, lesen Sie die Informationen sorgfältig durch:

 

Frage an die Programmierer:
auf einem neuen bar, der Expert Advisor prüft, ob die Bestellung auf Euro ist lebendig (zum Beispiel), wenn nicht - es macht ein neues Geschäft, wenn ja - es lässt alles, wie es ist.
setzen eine solche Bedingung:

 for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         int Tip=OrderType();                   // Тип ордера
         if(OrderSymbol()!="EURUSD"||Tip>1){continue;}else{// Не наш ордер

      
   RefreshRates();
  double point5 =MarketInfo("EURUSD", MODE_POINT);//Запрос Point
 double bid5 =MarketInfo("EURUSD", MODE_BID); // Запрос значения Bid
 double ask5 =MarketInfo("EURUSD", MODE_ASK); // Запрос значения Ask
  double SL5 = NormalizeDouble(bid5+(Stop*point5), MarketInfo("EURUSD", MODE_DIGITS));
 double TP5 = NormalizeDouble(bid5-(Profit*point5), MarketInfo("EURUSD", MODE_DIGITS)); 
  double SL5v = NormalizeDouble(bid5-(Stop*point5), MarketInfo("EURUSD", MODE_DIGITS));
 double TP5v = NormalizeDouble(bid5+(Profit*point5), MarketInfo("EURUSD", MODE_DIGITS));  
 if ((iVolume("EURUSD",Period(),4)) > (iVolume("EURUSD",Period(),1))) { 
 ticket=OrderSend("EURUSD",OP_SELL,lot_EUR,bid5,Slip,0,0);// Открытие Sell
 OrderSelect(ticket,SELECT_BY_TICKET);
 OrderModify(OrderTicket(),OrderOpenPrice(),SL5,TP5 ,0,CLR_NONE); 
 {Alert (GetLastError());} // Сообщение об ошибке
}else{ticket=OrderSend("EURUSD",OP_BUY,lot_EUR,ask5,Slip,0,0); // Открытие BUY
 OrderSelect(ticket,SELECT_BY_TICKET);
 OrderModify(OrderTicket(),OrderOpenPrice(),SL5v,TP5v ,0,CLR_NONE); 
 { Alert (GetLastError());} // Сообщение об ошибке
}}

        }                                       // Конец анализа орд.
     }                                          // Конец перебора орд.

Aber der Code funktioniert nicht. Wo liegt der Fehler?

 
Cruc:

Hier ist eine Frage an die Programmierer:
Bei einem neuen Balken prüft der EA, ob die EUR-Order noch gültig ist (wenn nicht, eröffnet er ein neues Geschäft, wenn ja, lässt er alles so, wie es ist).
Ich habe eine solche Bedingung gestellt:

Aber der Code funktioniert nicht. Wo liegt der Fehler?

Was passiert, wenn es ein Dutzend Bestellungen gibt und Ihre die siebte ist (zum Beispiel)?

Prüfen Sie das erste - es ist nicht unseres.

Überprüfen Sie das zweite, es ist nicht unseres.

...

Prüfen Sie die siebte - unsere

Prüfen Sie das achte, es ist nicht unseres.

...

 


Die Idee dahinter ist, dass Sie, wenn Sie eine Reihe von Aufträgen für ein Paar eröffnen, alle sich überschneidenden Aufträge in einer Bewegung schließen können.

Auftrag ändern/löschen--->Typ---->Überlappende Aufträge schließen

Er löscht sich überschneidende Aufträge... Gibt es eine solche Funktion in MQL?

Ups, gefunden:https://forum.mql4.com/ru/4822

 
ilunga:

was passiert, wenn es ein Dutzend Bestellungen gibt und Ihre die siebte ist (zum Beispiel)

Prüfen Sie das erste - es ist nicht unseres.

Überprüfen Sie das zweite, es ist nicht unseres.

...

Prüfen Sie die siebte - unsere

Prüfen Sie die achte, es ist nicht unsere, setzen Sie die Reihenfolge

...


Für dieses Paar gibt es nur einen offenen Auftrag. Ich prüfe nur für das angegebene EURUSD-Symbol, aber ich muss die Bedingung nicht richtig eingestellt haben

if(OrderSymbol()!="EURUSD"||Tip>1){Fortfahren;}else{

wir brauchen if(OrderSymbol()= Symbol("EURUSD"){

 
Cruc:


Es gibt nur einen offenen Auftrag für dieses Paar. Ich prüfe nur für das angegebene EURUSD-Symbol, aber ich muss die Bedingung falsch gesetzt haben

if(OrderSymbol()!="EURUSD"||Tip>1){Fortfahren;}else{

muss if(OrderSymbol()= Symbol("EURUSD"){

Wenn Sie nur 1 Symbol in einem Expert Advisor haben, können Sie sich einfach dessen Ticket merken und es jedes Mal überprüfen, ohne alle Aufträge durchgehen zu müssen
 
ilunga:
Wenn Sie nur 1 in Ihrem EA haben, können Sie sich einfach sein Ticket merken und jedes Mal überprüfen, ob es geschlossen ist oder nicht, ohne alle Aufträge durchzugehen

Vielen Dank für die Empfehlung, ich habe es fast herausgefunden, ich weiß nur nicht mehr, ob die Bestellung ausgelöst wird, dann nimmt das Ticket den Wert -10?
 
Roman.:


Bei schwebenden Aufträgen gibt es keinen "potenziellen Totalverlust der offenen Positionen in der Währung der Einlage".

Die Funktion GetPotentialLossInCurrency() gibt den gesamten potenziellen Verlust der offenen Positionen in der Depotwährung zurück.

Er bezieht sich auf Positionen auf dem Markt. Drücken Sie F1 auf diese Marktfunktionen, lesen Sie die Informationen sorgfältig durch:


Ich verstehe sehr gut, dass sich die Funktion GetPotentialLossInCurrency() auf offene Positionen bezieht. Ich habe eine Frage: Warum können schwebende Aufträge nicht ebenfalls berücksichtigt werden?

Die Dokumentation:

double OrderOpenPrice(  )

 Возвращает цену открытия для выбранного ордера.
 Ордер должен быть предварительно выбран с помощью функции OrderSelect().

double OrderStopLoss(   )

 Возвращает значение цены закрытия позиции при достижении уровня убыточности (stop loss) для текущего выбранного ордера.
 Ордер должен быть предварительно выбран с помощью функции OrderSelect().

Nirgendwo steht, dass OrderOpenPrice und/oder OrderStopLoss nur für offene Aufträge gelten.

 
Cruc:

Vielen Dank für die Empfehlung, ich habe es fast herausgefunden, kann mich nur nicht erinnern, ob der Auftrag ausgelöst wird, nimmt das Ticket einen Wert von -10?
Das Ticket bleibt wie es war
Grund der Beschwerde: