Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 452

 

Hallo. Können Sie mir sagen, wie ich eine Ausführungsverzögerung organisieren kann? So dass nach einer neuen Kerze 10 Sekunden vergehen, bevor die Aktualisierung durchgeführt wird.

#define   WM_COMMAND                    0x0111
#property indicator_chart_window
#import "user32.dll"
int RegisterWindowMessageA(string lpstring);
int PostMessageA(int  hWnd,int  Msg,int  wParam,string lParam);
int New_Bar;
datetime Time_0;
#import
int start()
 {
     New_Bar=0;                   // Для начала обнулимся
  if (Time_0 != Time[0])          // Если уже другое время начала бара
      {
      New_Bar= 1;                 // А вот и новый бар
      Time_0 = Time[0];           // Запомним время начала нового бара
      PostMessageA (WindowHandle (Symbol(), Period()), WM_COMMAND, 33324, 0);
      PostMessageA (WindowHandle (Symbol(), 0), RegisterWindowMessageA ("MetaTrader4_Internal_Message"), 2, 1);
      } 
 return(0);
 }
 
Hallo, bitte schreiben Sie Code auf die Bedingung, dass, wenn Sie 1 Objekt aus dem Diagramm zu löschen, dann der Rest (eine Auswahl) wird gelöscht werden

Ich habe andere Objekte, die an 1 Objekt angehängt sind, und wenn Sie dieses Objekt löschen, bleibt der Rest einfach im Diagramm hängen
 
Dmitry Ivkin:
Hallo, ich bitte Sie, Code für die Bedingung zu schreiben, dass, wenn Sie ein Objekt aus dem Diagramm entfernen, dann der Rest (wie Sie wählen) entfernt werden

Ich habe andere Objekte zu einem Objekt angehängt, und wenn ich dieses Objekt entfernen, der Rest nur auf dem Diagramm hängen
Bei der Erstellung von Objekten verwende ich Präfixe, d. h. Namen, die mit. Zum Beispiel: ObjectCreate("777_a" ... ObjectCreate("777_z") und dann die Gruppe löschen ObjectsDelete(0, "777_")
 
werter:

Hallo. Können Sie mir sagen, wie ich eine Ausführungsverzögerung organisieren kann? Ich möchte 10 Sekunden nach einem neuen Candlestick warten, bevor ich die Aktualisierung ausführe.

Am einfachsten ist es, Sleep(10000); nach Time_0 = Time[0]; einzufügen, und ich denke, die untere #import-Anweisung sollte 2 Zeilen nach oben verschoben werden

 
STARIJ:

Am einfachsten ist es, Sleep(10000); nach Time_0 = Time[0]; einzufügen, und ich denke, die untere #import-Anweisung sollte 2 Zeilen höher gesetzt werden

Ja, das wäre ein Expert Advisor... Im Schlafanzeiger geht das leider nicht.
 
STARIJ:
Bei der Erstellung von Objekten verwende ich ein Präfix, d.h. den Anfang eines Namens. Zum Beispiel: ObjectCreate("777_a" ... ObjectCreate("777_z" und dann lösche ich die Gruppe ObjectsDelete(0, "777_")

Vielen Dank für die Antwort, nein, du verstehst nicht, ich habe andere Objekte an das Objekt angehängt, und wenn Sie den Indikator zu entfernen, dann ist alles normal, aber wenn Sie mit der rechten Maustaste und löschen, dann entfernen Sie genau 1 Objekt und müssen alle angeschlossenen, ich hoffe, Sie verstehen)

 
Dmitry Ivkin:

Vielen Dank für Ihre Antwort, nein, Sie verstehen nicht, ich habe andere Objekte an das Objekt angehängt und wenn Sie den Indikator löschen, dann ist alles in Ordnung, aber wenn Sie mit der rechten Maustaste klicken und löschen, dann wird 1 Objekt gelöscht und ich brauche alle angehängten, ich hoffe, Sie verstehen)

Regelmäßig(bei jedem Tick?) das Vorhandensein des Hauptobjekts überprüfen und untergeordnete Objekte anhand des Präfixes entfernen, wenn es nicht vorhanden ist
 
werter Ja, nun, wenn es ein Experte wäre... Mit dem Schlafanzeiger geht das leider nicht.
datetime Time_0=0;

void ...
{
   if (Time_0 < TimeCurrent())
   {
      Alert(TimeCurrent());
      Time_0 = Time[0]+PeriodSeconds()+10; 
   }
 

Es ist lange her, dass ich in MQL4 geschrieben habe, jetzt muss ich meinen EA aus MQL5 neu schreiben. Ist der Code, der 1 Handel auf das Symbol öffnen sollte, wo der EA steht, ist es richtig?

Im Strategy Tester werden aus irgendeinem Grund 2 Trades geöffnet

...
if(!Orderex(_Symbol))
{
   OrderSend(NULL,OP_SELL,lot,Bid,30,Bid+stop*Point,Bid-take*Point,NULL,magicf,0,clrRed);
}
...
bool Orderex(string symbol)
{
   for(int i=OrdersTotal(); i>0; i--)
      {
         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==symbol && OrderMagicNumber()==magicf) return true;
      
      
      
      }


   return false;
}
 

Ich bin auf eine weitere Nuance gestoßen, an die ich vorher nicht gedacht hatte

1) Wir haben eine Vielzahl von Expert Advisors auf den Paaren installiert

2) Beim Öffnen einer Order durch einen beliebigen Expert Advisor mit eigenen Einstellungen (manche EAs öffnen z.B. 0.1 oder 0.5), erscheint dieser Eintrag in der EAs-Zeile

3) Die Zeile "Experten" wird gelesen und andere Roboter löschen sich selbst, wenn es offene Positionen für mehr als x Lots gibt.


Die Frage ist, wie man sie lesen und verarbeiten kann, denn sie sind nicht in den Protokolldateien enthalten.

Grund der Beschwerde: