Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 563

 
Василий:
Ja, ich frage nach MQL 5? Ja, es soll auf die Daten des aktuellen Symbols zugegriffen werden. Die Daten werden für den EA-Code benötigt. So muss ich zum Beispiel den Schlusskurs des dem aktuellen Balken vorausgehenden Balkens kennen.
Siehe das Beispiel für CopyTime
 
Karputov Vladimir:
Sehen Sie sich das Beispiel für CopyTime an
Verstanden, ich werde versuchen, es herauszufinden. Ich danke Ihnen!
 
Василий:
Ja, ich frage nach MQL5? Ja, es soll auf die Daten des aktuellen Symbols zugegriffen werden. Die Daten, die wir im Expert Advisor-Code benötigen. So muss ich zum Beispiel den Schlusskurs des dem aktuellen Balken vorausgehenden Balkens kennen

Sie sollten die Dokumentation ein wenig lesen.

int  CopyClose( 
   string           symbol_name,       // имя символа 
   ENUM_TIMEFRAMES  timeframe,         // период 
   int              start_pos,         // откуда начнем  
   int              count,             // сколько копируем 
   double           close_array[]      // массив для копирования цен закрытия 
   );

Hier ein Beispiel für das Abrufen des Schlusskurses und der Indikatorpuffer

ENUM_ORDER_TYPE indicator_01()
  {
   double ma[2];
   double close[2];
   static int h_ma=INVALID_HANDLE;
   if(Bars(_Symbol,PERIOD_CURRENT)<ma_period+1)return(WRONG_VALUE);
   if(h_ma==INVALID_HANDLE || h_ma==0)
     {
      h_ma=iMA(_Symbol,_Period,ma_period,ma_shift,ma_method,ma_price);
      return(WRONG_VALUE);
     }
   if(CopyBuffer(h_ma,0,1,2,ma)<2) return(WRONG_VALUE);
   if(CopyClose(_Symbol,PERIOD_CURRENT,1,2,close)<2) return(WRONG_VALUE);

   if(close[1]>ma[1]&&close[0]<ma[0])return(ORDER_TYPE_BUY);
   if(close[1]<ma[1]&&close[0]>ma[0])return(ORDER_TYPE_SELL);

   return(WRONG_VALUE);
  }
 
Sergey Gritsay:

...

Hier ein Beispiel für das Abrufen des Schlusskurses und der Indikatorpuffer

Schlechtes Beispiel. Die Variable, die den Indikator-Handle in MQL5 speichert, muss im "Header" deklariert werden - im Bereich der globalen Variablen, und der Handle sollte in OnInit() erhalten werden. Und nur dann können Sie sich auf das Handle des Indikators beziehen, um Daten von überall im Programm zu erhalten.
 

Hallo zusammen!

Ich erhalte Daten über die Handelshistorie im Tester mithilfe des OnTrade-Ereignisses.

  for(int i=0;i<HistoryDealsTotal();i++){
       ulong deal_ticket=HistoryDealGetTicket(i);
       Print("ticket=",deal_ticket);
       Print("price=",HistoryDealGetDouble(deal_ticket,DEAL_PRICE));
       Print("time=",TimeToString(HistoryDealGetInteger(deal_ticket,DEAL_TIME)));

Und das ist das, was ich in den Protokollen erhalte.

0 22:58:16.487 Core 1 2016.04.01 00:00 Anzahl der Balken in der Terminal-Historie für die Symbol-Periode GBPUSD im Moment = 7729
JR 0 22:58:16.487 Core 1 2016.04.01 03:00:00 Versuchter Abschluss 0 mit Lot 0.01
EL 0 22:58:16.487 Kern 1 2016.04.01 03:00:00 Markt kaufen 0,01 GBPUSD sl: 1,43033 tp: 1,44034 (1,43646 / 1,43654 / 1,43646)
GO 0 22:58:16.487 Core 1 2016.04.01 03:00:00 deal #2 buy 0.01 GBPUSD at 1.43654 done (based on order #2)
GE 0 22:58:16.487 Core 1 2016.04.01 03:00:00 Geschäft durchgeführt [#2 buy 0.01 GBPUSD at 1.43654]
NK 0 22:58:16.487 Kern 1 2016.04.01 03:00:00 Auftrag ausgeführt Kauf 0,01 zu 1,43654 [#2 Kauf 0,01 GBPUSD zu 1,43654]
HI 0 22:58:16.487 Kern 1 2016.04.01 03:00:00 ticket=1
HM 0 22:58:16.487 Kern 1 2016.04.01 03:00:00 Preis=0.0
HH 0 22:58:16.487 Kern 1 2016.04.01 03:00:00 time=2016.04.01 00:00
CR 0 22:58:16.487 Kern 1 2016.04.01 03:00:00 ticket=2
ID 0 22:58:16.487 Kern 1 2016.04.01 03:00:00 Preis=1.43654
OP 0 22:58:16.487 Kern 1 2016.04.01 03:00:00 time=2016.04.01 03:00

Woher kommt der erste Handel zum Nulltarif? Ich tue es nicht :-).

Ich tue es nicht :-) Erklären Sie bitte.

Z.P. Ich glaube, ich habe es verstanden. Das erste Geschäft hat einen Gewinn von 10K. Ich weiß nicht, was ich damit anfangen soll, aber es ist trotzdem seltsam. Und warum?

Und hier noch eine weitere Frage. Das Geschäft (Kauf bei 1,43654) ist noch nicht eröffnet worden. Wie ist sie in der Geschichte entstanden?

Ich muss Daten NUR auf geschlossene Geschäfte in das Array wie in MQL4 erhalten. Wie macht man das?

P.S. Filter nach DEAL_ENTRY_OUT ?

 
Alexandr Saprykin:
Haben Sie versucht, das Terminal neu zu installieren?
Ja, ich danke Ihnen. Das war das Einzige, was geholfen hat.
 
Karputov Vladimir:
Schlechtes Beispiel. Die Variable, die den Indikator-Handle in MQL5 speichert, muss im "Header" deklariert werden - im Bereich der globalen Variablen des Programms, holen Sie sich den Handle in OnInit(). Und nur dann können Sie sich auf das Handle des Indikators beziehen, um Daten von überall im Programm zu erhalten.

Ich stimme Ihnen nicht ganz zu, wenn es darum geht, ein Handle zu erhalten, da die Funktion OnInit() einmal ausgeführt wird und es keine 100%ige Garantie gibt, dass der Indikator beim ersten Mal erstellt wird. Sie könnten Recht haben, wenn Sie eine Variable deklarieren, aber ich möchte wissen, ob die folgende Dokumentation etwas Schlimmeres sagt als die Variante mit einer statischen Variable

Lokale Variablen, die mit dem Schlüsselwort static deklariert sind, speichern ihre Werte so lange, wie die Funktion existiert. Bei jedem nachfolgenden Aufruf einer Funktion enthalten diese lokalen Variablen die Werte, die sie beim vorherigen Aufruf hatten.

 
<br / translate="no">

Filtern nach DEAL_ENTRY_OUT

 
Sergey Gritsay:

Ich stimme Ihnen nicht ganz zu, wenn es darum geht, ein Handle zu erhalten, da die Funktion OnInit() einmal ausgeführt wird und es keine 100%ige Garantie gibt, dass der Indikator beim ersten Mal erstellt wird. Sie mögen mit der Deklaration einer Variablen Recht haben, aber ich möchte wissen, wie schlecht die Option einer statischen Variablen in der Dokumentation ist

...

Wir werden dies in OnInit() bei der Erstellung eines Indikator-Handles überprüfen. Wenn der Indikator-Handle nicht erstellt wurde, wird beiOnit()INIT_FAILED zurückgegeben.Das heißt, der Indikator-Handle wird nur einmal und nur in OnInit() erstellt. Dies ist nicht "4" - Durcheinander und Umherirren und Erklärung von Griffen in allen Ecken des Programms.
 
Karputov Vladimir:
Zu diesem Zweck prüft OnInit(), ob der Indikator-Handle angelegt ist. Wenn der Indikator-Handle nicht erstellt wurde, sollte OnOnit()INIT_FAILED zurückgeben.Das heißt, der Indikator-Handle wird nur einmal und nur in OnInit() erstellt. Dies ist nicht "4" - es ist nicht ein Durcheinander und wandern und deklarieren Griffe in allen Ecken des Programms.
Ich würde meine Aussage nicht so kategorisch treffen. Es ist kein Chaos in den Schränken, es ist ein Chaos in den Köpfen (c)
Grund der Beschwerde: