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

 
ser7051200:
Bitte beraten Sie, wie man einen Handelsroboter kaufen?
Wie kauft man einen Handelsroboter auf dem MQL5-Markt?
 

Hallo,

Bitte haben Sie diese Frage über den EA:

Ich habe einen Auftrag zu öffnen, indem Sie schwingen, zum Beispiel, wenn MA_1 > MA_2 dann kaufen wir. Aber wenn ich den Handel beende, wird diese Regel wieder ausgelöst.

Wie kann ich den EA anweisen, eine Position nur dann zu eröffnen, wenn sich der Preis nicht mehr als 4 Balken von MA_2 entfernt hat?


Ich danke Ihnen!

Wenn etwas falsch oder am falschen Ort ist, treten Sie mich nicht. Dies ist mein erster Beitrag in diesem riesigen Forum.

 
Jony5Proz:

Hallo,

Bitte haben Sie diese Frage über den EA:

Ich habe einen Auftrag zu öffnen, indem Sie schwingen, zum Beispiel, wenn MA_1 > MA_2 dann kaufen wir. Aber wenn ich den Handel beende, wird diese Regel wieder ausgelöst.

Wie kann ich den EA anweisen, eine Position nur dann zu eröffnen, wenn sich der Preis nicht mehr als 4 Balken von MA_2 entfernt hat?


Ich danke Ihnen!

Wenn etwas falsch oder am falschen Ort ist, treten Sie mich nicht. Dies ist mein erster Beitrag in diesem riesigen Forum.

https://book.mql4.com/ru/samples/expert
 

Danke, ich bin gerade auf diesem Stand des Wissens. Mit dem Skript im Beispiel gibt es das gleiche Problem. Es ist lästig, wenn man das Skript einschaltet und es am Ende des Trends eintritt.

Wie kann ich dem Skript mitteilen, dass es nur dann ausgelöst wird, wenn nach der Kreuzung zweier Balken weniger als 4 Balken vorhanden sind?

 
https://www.mql5.com/ru/code/10773 Letztes Mal bade ich
 
Jony5Proz:

Danke, ich bin gerade auf diesem Stand des Wissens. Mit dem Skript im Beispiel gibt es das gleiche Problem. Es ist lästig, wenn man das Skript einschaltet und es am Ende des Trends eintritt.

Wie kann ich dem Skript mitteilen, dass es nur dann ausgelöst wird, wenn nach der Kreuzung zweier Balken weniger als 4 Balken vorhanden sind?

Das Skript versteht keine Wörter. Sie haben es in der Hand: Führen Sie das Skript spätestens 4 Bars nach dem Überschreiten von 2 MAs aus.
 

Leute, ich habe hier bereits gefragt, wie man eine Order nur dann öffnen kann, wenn eine neue Kerze erscheint. Ich verwende einen D1-Zeitrahmen.

Ich habe beschlossen, schwebende Orders auf bestimmten Niveaus zu platzieren (buystop_lvl und sellstop_lvl), basierend auf der Analyse der vorherigen Candlesticks.

Ich wollte sie zu Beginn des Tages platzieren und sie löschen, wenn eine neue Kerze eintrifft. Es spielt keine Rolle, ob die Pending Orders aktiviert wurden oder nicht, wenn sie aktiviert wurden, dann sollten die Market Orders auch geschlossen werden. Höchstens 2 Aufträge, Buystop und Sellstop.

Hier ist, was ich geschrieben habe:

1. Zunächst prüfe ich, ob die Marktaufträge oder die schwebenden Aufträge aktiv sind, und wenn ja, lösche/schließe ich sie.

int total=OrdersTotal();
   if (total!=0 && NewBar()==true){
                 for (int i=0; i<total; i++)
                    {
                     OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
                     if(OrderType()==OP_BUY)  OrderClose(OrderTicket(),OrderLots(),Bid,10);
                     if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,10);
                     if(OrderType()==OP_BUYSTOP)  OrderDelete(OrderTicket());
                     if(OrderType()==OP_SELLSTOP) OrderDelete(OrderTicket());
                    }
                }

2. Dann platziere ich schwebende Aufträge nach berechneten Niveaus:

if(NewBar() == True && OrdersTotal()==0)
    {
     OrderSend(Symbol(),OP_BUYSTOP ,Lot,buystop_lvl ,10,buystop_SL ,buystop_TP,"Expert buystop\sellstop");
     Sleep(10000);
     OrderSend(Symbol(),OP_SELLSTOP,Lot,sellstop_lvl,10,sellstop_SL,sellstop_TP,"Expert buystop\sellstop");
     
    }

3. Meine implementierte NewBar-Funktion (NewBar):

//Функция нового бара
bool NewBar()
{
  static datetime lastbar = 0;
  datetime curbar = iTime(Symbol(),1440,0);
  if(lastbar != curbar)
  {
    lastbar = curbar;
    return(true);
  }
  else return(false);
}

Wenn sich eine neue Kerze öffnet, werden die Aufträge erteilt und sofort gelöscht. Die Bestellungen werden aufgegeben und sofort gelöscht.

Als ich den Code aus Punkt (1) auskommentierte, konnte ich ihn nicht dazu bringen, Aufträge im Tester zu öffnen, aber die Aufträge wurden nicht geöffnet, d.h. die Aufträge wurden nicht zu Marktaufträgen.

Können Sie mir sagen, was das Problem sein könnte?

 

Diese Funktion NewBar() kann nicht zweimal hintereinander verwendet werden

Etwas in dieser Art ist besser:

bool newBar = NewBar();

// und weiter im Text, Ersetzen von NewBar() durch newBar

 
Scheiße, ich weiß immer noch nicht, wie man das macht. Ich benötige den Code zum Löschen und Schließen von Aufträgen erst beim nächsten Candlestick. Aber es wird auch andere geben, die sich darauf einlassen. Das bedeutet, dass das Programm erneut in die Löschung eingreift. Ich brauche eine Fahne, aber mein Gehirn schwitzt schon, um zu verstehen, wie man es macht :)
 
Noterday:
Und im Allgemeinen wirft man NewBar weg, schaut sich den Zeitpunkt der letzten Auftragseröffnung an und vergleicht ihn mit Time[0]. Wenn sie höher ist, ist es Ihr Fall, Sie können alles löschen.