[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 589

 
lottamer:

Änderung ist sicher im Gange - der Auftrag ist offen - Sie müssen die Stop-Steaks setzen...

Warum haben Sie sie dann in eckige Klammern { } if gesetzt (z. B. Kreuzdurchschnitte)?
 

Ich werde vor meinen Augen Mutter! (d.h. eine Matriarchin zu werden!) :))

Das ist die andere Sache.

Wenn ich eine Bestellung änderte, erschien anschließend das Benachrichtigungsfenster, das mich darüber informierte, dass die Bestellung erfolgreich geändert worden war. Wenn ich in diesem Fenster auf OK klicke, ist es zu schlecht. Außerdem, wenn ich den EA nach dem Erscheinen dieses Fensters deaktiviere, dann wird der EA nach dem Drücken von OK im Nachrichtenfenster seine Aktionen IMMER WIEDERHERSTELLEN (in diesem Fall das Schließen einer Position). Interessant ist, dass der EA zwar verschwunden ist, seine Befehle aber immer noch ausgeführt werden!

Ich musste ein wenig nachdenken und habe die Zeile

message=message+"Fehler bei der Auftragsänderung#"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+". "+error_desc+" \n"

Danach lief alles wie es sollte. keine Fenster... alles öffnet und schließt sich... öffnet und schließt sich... öffnet und schließt sich...

:))))))))))))

P.S.

aber wenn Sie die

OrderPrint(); 

weiter;

es gibt keine Veränderung ... dasselbe gilt für die Linie

if(ret==IDOK) return(0);

ob sie da ist oder nicht - keine Veränderung!

Warum ist das so?

 
lottamer:


Warum?

wenn der Auftrag noch nicht eröffnet wurde - was werden Sie ändern?

lottamer:

und ist es möglich, My_buy (nicht-boolesche Variable) auf TRUE-FALSE zu prüfen?

Wer ist hier also der Boolesche PRAGRAMIST?! Man kann immer eine Boolesche aus einer "Nicht-Booleschen" machen!

lottamer:

die Änderung geht bedingungslos - der Auftrag ist offen - Sie müssen die Stop-Einsätze setzen...

Dazu wird geprüft, ob der Auftrag OFFEN ist.

Sie haben mutig den nächsten Schritt in Ihren Sprachkenntnissen getan - Sie haben sich mit der Funktionsweise von Bibliotheken vertraut gemacht:

#include <WinUser32.mqh>

Dies ist die Bibliothek - die Standardbibliothek aus der MetaTrader-Auslieferung. Die Leute schreiben ihre eigenen (benutzerdefinierten) Bibliotheken. Beispiel für eine Bibliothek mit Funktionen für Handelsaufträge. Diese Funktionen werden einmal geschrieben und dann je nach Bedarf in ihren Codes verwendet.

 
sergeev:
Warum haben Sie sie dann innerhalb der Klammern { } if (z. B. Kreuzdurchschnitte) gesetzt?


also wäre sie da.

Wo kann er Ihrer Meinung nach eingefügt werden? nur unmittelbar nach der Eröffnung einer Bestellung.

 
lottamer:

Ich werde vor meinen Augen Mutter! (d.h. eine Matriarchin zu werden!) :))

Warum ist das so?

Ich muss nur nachschlagen: "Was ist MessageBox()?" - über die Tastenkombination Strg+F1 in MetaEditor.
 
TarasBY:

was würden Sie ändern, wenn der Auftrag nicht geöffnet würde?

Wer ist hier also der Boolesche PRAGRAMIST?! Man kann immer eine Boolesche aus einer "Nicht-Booleschen" machen!

Dafür ist die Prüfung des offenen Haftbefehls gedacht.

Sie haben den nächsten Schritt beim Erlernen der Sprache gewagt - Sie haben sich mit der Funktionsweise von Bibliotheken vertraut gemacht:

Dies ist die Bibliothek - die Standardbibliothek aus der MetaTrader-Auslieferung. Die Leute schreiben ihre eigenen (benutzerdefinierten) Bibliotheken. Ein Beispiel für eine Bibliothek mit Funktionen für Handelsaufträge. Diese Funktionen werden einmal geschrieben und dann je nach Bedarf in Ihrem Code verwendet.


Wenn der Auftrag nicht geöffnet wurde, kann er nicht geändert werden, weil es nichts zu ändern gibt. Ich habe noch nicht den ganzen EA geschrieben, ich schreibe ihn in Blöcken und prüfe ihn sofort, dann beende ich ihn und prüfe ihn erneut. Aber ich glaube nicht, dass EA völlig aufgeschmissen ist, wenn ein Geschäft nicht geöffnet wird, weil es nicht weiß, was es tun soll - es gibt einen Auftrag zu ändern und es gibt keine offene Position. :))) wird bei den nächsten Ticks geöffnet... und dann wird es sich ändern

2)BOH hier bist du einzigartig, denn ich, ein Sünder, verstehe nicht einmal, wie so Boolean-innon-Boolean... D.h. es gibt eine brauchbare Funktion und sagen wir, sie wurde ausgeführt, d.h. die Pose geöffnet. So jetzt wird die Maschine verstehen, dass meine verwendbare Funktion jetzt TRUE ist, weil es ausgeführt wurde? ..... sorry für nicht wissen, die Frage

3) siehe 1

4)#include ist ein Thema, das mir zu peinlich ist, um danach zu fragen!

Verstehe ich das richtig, dass man theoretisch, sagen wir mal, aus meinen CLOSE_ALL- und MODIFY-Skripten ein#include anstelle einer benutzerdefinierten Funktion machen und darauf verweisen kann?

aber wie würde ich dieses#include My_buy nach der if-Bedingung einfügen?

 
TarasBY:
Man muss nur nachschlagen: "Was ist MessageBox()?" - über die Tastenkombination Strg+F1 in MetaEditor.

das ist eine Nuance...und ich möchte den Expert Advisor jetzt fertigstellen... :))
 

Weiß jemand etwas über den Rollover?

Kann es bei der Wiedereröffnung von Aufträgen mit Rollover zu Verschiebungen bei den Stop- und Takeout-Werten kommen? Und wie wird der Stop gesetzt, wenn nach dem Rollover die Differenz zwischen Eröffnungs- und Stop-Kurs kleiner ist als der Stop-Leveler?

Meine Aufgabe lautet wie folgt. Wenn ich einen offenen Marktauftrag habe, sollte ich prüfen, ob er mit Rollover geöffnet wurde, und wenn ja, sollte ich das Ticket des vorherigen Auftrags erhalten, der geschlossen wurde. Vielleicht kann mir jemand den Suchalgorithmus nennen? Ich gehe derzeit folgendermaßen vor:

1. Ich wähle den ersten offenen Auftrag aus.
2. Wenn sie von 23:40 bis 00:20 Uhr geöffnet wurde, dann prüfe ich diesen Auftrag weiter (das 40-Minuten-Fenster wird nur für den Fall genommen, obwohl man theoretisch auch von 23:50 bis 23:59 Uhr nehmen könnte)
3. Ich erinnere mich an das Ticket, Stop und Take-Preis
4.Ich überprüfe alle geschlossenen Aufträge auf die Geschichte, und Kommentare enthalten das Wort "Swap" und Währungspaare übereinstimmen

5. Ich vergleiche die Daten von Stopps und Übernahmen, wenn sie übereinstimmen, ist es das gewünschte Auftragspaar, wenn nicht - gehe ich zurück zu Schritt 1

 

Bitte erklären Sie mir, was gemeint ist mit

while(true)

in dem Modifizierungsskript, das ich in den EA eingefügt habe?

und was bedeutet diese seltsame Prüfung für

if(cmd==OP_BUY || cmd==OP_SELL) ?

Wäre es nicht besser, einfach zu prüfen, ob eine offene Stelle vorhanden ist?

int My_modify ()
 {
//      bool   result;
//      double stop_loss,take_profit,point,bid,ask, lotsize;
//      int    cmd, total, error, spread;
//      string message;
//----
   total=OrdersTotal();

//----
   for(int i=0; i<total; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         //---- print selected order
         OrderPrint();
         cmd=OrderType();
         point=MarketInfo(OrderSymbol(),MODE_POINT);
         bid= MarketInfo(OrderSymbol(),MODE_BID);
         ask= MarketInfo(OrderSymbol(),MODE_ASK);
         spread=MarketInfo(OrderSymbol(),MODE_SPREAD);     
         //---- buy or sell orders are considered
         if(cmd==OP_BUY || cmd==OP_SELL)
          {
            //---- modify first market order
            while(true)
             {
                if(cmd==OP_BUY){
                        string type = "buy";
                        if(OrderStopLoss()!=0)stop_loss=OrderStopLoss();
                        else stop_loss=OrderOpenPrice()-StopLoss*point;
                        if(OrderTakeProfit()!=0)take_profit=OrderTakeProfit();
                        else take_profit=OrderOpenPrice()+TakeProfit*point;
                }
                     
                else{
                        type = "sell";
                        if(OrderStopLoss()!=0)stop_loss=OrderStopLoss();
                        else stop_loss=OrderOpenPrice()+StopLoss*point;
                        if(OrderTakeProfit()!=0)take_profit=OrderTakeProfit();
                        else take_profit=OrderOpenPrice()-TakeProfit*point;
                }   
                result=OrderModify(OrderTicket(), OrderOpenPrice(), stop_loss, take_profit, 0, CLR_NONE);
                if(result!=true) { error=GetLastError(); Print("LastError = ",error);}
                else {error=0;}
                if(error==135) RefreshRates();
                else break;
              }
                if(error==0){
                        //message=message+"Ордер #"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+" успешно модифицирован.\n";
                        }
                        else{
                                if(error == 130){string error_desc = " - Неправильные стопы";} else error_desc = "";
                                if(error != 1)
                        message=message+"Ошибка модификации ордера #"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+". "+error_desc+" \n";
                        }

              //---- print modified order (it still selected after modify)
              OrderPrint();
              continue;             
           }
        }
      else { Print( "Error when order select ", GetLastError()); break;}
     }
        int ret=MessageBox(message, NULL, MB_OK);
        if(ret==IDOK) return(0);
//----
   return(0);
  }
 
lottamer:

Dies ist eine Nuance ... und jetzt möchte ich den Berater zu beenden ...:))

Sie wollen "den Karren" für "Kucher's Nase" bewegen. Bei geringen Sprachkenntnissen müssen Sie mit dem Üben beginnen:

Nehmen Sie einen bereits funktionierenden Expert Advisor, der Ihrer Strategie sehr nahe kommt, und passen Sie ihn an Ihre Bedürfnisse an - so werden Ihre Aktionen schneller verständlich und nachvollziehbar (ohne dass Sie die "Fibel" lesen wollen).

Viel Glück!

P.S. AXIOMA: "Kutscher fahren nicht auf Kutschen!!!"