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

 
Евгений:
Gibt es eine Möglichkeit zu überprüfen, ob die Eröffnungsskripte am Wochenende funktionieren?
Nein. Nur Expert Advisors können am Wochenende im Strategietester überprüft werden.
 
Karputov Vladimir:
Nur der Indikator verarbeitet alle Ticks in OnCalculate(). Ohne jegliche Auslassungen.
Eh nein. Und er überspringt. Aber weniger als andere. Aber er überspringt.
 
Victor Nikolaev:
Äh, nein. Und er verfehlt. Aber weniger als andere. Aber er überspringt.
Der Indikator kann den Tick nur überspringen, wenn der Indikator bei jeder Eingabe in OnCalculate() ressourcenintensive Berechnungen durchführt.
 
kashi_ann:

Das ist gut, vielen Dank.

Eine andere Frage:

BestellungAuswählen

Wählt einen Auftrag für die weitere Arbeit mit ihm aus. Gibt bei erfolgreichem Abschluss der Funktion true zurück. Gibt false zurück, wenn die Funktion fehlschlägt. Sie müssen die FunktionGetLastError() aufrufen, um Informationen über den Fehler zu erhalten.

Die FunktionOrderSelect(
ulong ticket// Ticket der Bestellung
);

Parameter

Ticket

[Das Ticket der Bestellung.

Wie wird dieses Ticket zugewiesen? Wo kann ich es bekommen? Oder wie richte ich es ein?

In der Hilfe heißt es

OrderGetTicket

Gibt das Ticket des entsprechenden Auftrags zurück und wählt den Auftrag automatisch für die weitere Bearbeitung mit Funktionen aus. Wir müssen alle Bestellungen nach Index durchsehen und gegebenenfalls ein Ticket besorgen. Allerdings wird mit dieser Funktion auch der Auftrag selbst ausgewählt. Das Ticket wird vom Vermittler festgelegt, und wir können es nicht ändern.

ulong  OrderGetTicket( 
   int  index      // номер в списке ордеров 
   );
 

Hallo zusammen!

Ich habe eine Funktion geschrieben, die jeden Tag eine "Nicht-Handelszeitzone" in den Chart einzeichnen soll.
Aber hier ist ein Problem - wenn ich es starten, das Modul OnInit, zeichnet, wie es sein sollte, aber wenn ich es in das Modul OnTimer aus irgendeinem unbekannten Grund auslösen die Variable Datum hält Werte, die im Modul OnInit zugewiesen wurden.

Frage: Warum?

int OnInit()

  {

    EventSetTimer(1);

    MqlDateTime date;

    TimeLocal(date); 

    offtimeCreate(date); // Рисуем на графике заполненный прямоугольник (не торговая зона) с 21:00 до 23:59 в день указанный в переменной date

    return(INIT_SUCCEEDED); 

  } 

 ...

void onTimer()

  {

    MqlDateTime date;

    TimeLocal(date);

    if (date.hour==9 && date.min==0 && date.sec==0)  offtimeCreate(date); // Каждое утро, в 9:00, рисуем новую "не торговую зону" для дня указанного в переменной date

  } 

...
 
INGFX:

Hallo zusammen!

Ich habe eine Funktion geschrieben, die jeden Tag eine "Nicht-Handelszeitzone" in einem Diagramm einzeichnen soll.
Aber es gibt ein Problem - wenn es im Modul OnInit ausgeführt wird, zeichnet es das Datum, wie es sein sollte, aber wenn es im Modul OnTimer aus irgendeinem unbekannten Grund ausgeführt wird, behält die Datumsvariable die Werte, die im Modul OnInit zugewiesen wurden.

Frage: Warum?

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Wanzen, Wanzen, Fragen

Karputov Vladimir, 2016.01.09 20:51

Wie kommen Sie darauf, dass in der Timer-Variable date der zuvor in OnInit() definierte Wert übergeben wird?

Sie müssen sich Ihre Funktion ansehen, die den Bereich zeichnet.

Abgeschlossen:

Korrekterweise müsste es OnTimer heißen, nicht onTimer.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

INGFX, 2016.01.09 21:20

Weil A) ich visuell sehe, dass die "Zeitzone" heute nicht von 21:00 bis 23:59 Uhr gezogen wird, sondern von gestern 21:00 bis heute 23:59 Uhr

B) Wenn ich die Eigenschaften des grafischen Objekts (schattiertes Rechteck - "Zeitzone") öffne, sehe ich, dass sich die erste Variable nicht geändert hat, d.h. sie hat denselben Wert wie gestern um 21:00

...
bool offtimeCreate(MqlDateTime &stm)
  {
    color clr=Black;
    datetime tm1,tm2;
    tm1 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 21:00");
    tm2 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 23:59");

    RectangleCreate(0,"offtime",0,tm1,0,tm2,200,clr); // chrart_id,object_name,sub_window,time1,price1,time2,price2,color

    return(true);
  }
...

 
Karputov Vladimir:
Das richtige Wort ist OnTimer, nicht onTimer
Ja, es ist OnTimer, ich habe einen Fehler gemacht, als ich es hierher kopiert habe ... Der Code selbst ist korrekt.
 
INGFX:
Ja OnTimer, habe einen Fehler beim Umschreiben hier gemacht ... der Code selbst ist korrekt

Sie hätten Ihren Code überprüfen müssen. Sie haben es satt, Ihre Teile zusammenzustecken - hier ist der Code. Ersetzen Sie in OnTimer Ihre Ortszeit und vergleichen Sie die Ausdrucke bei der Initialisierung und im Timer:

//+------------------------------------------------------------------+
//|                                                       TestEA.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(1);
   MqlDateTime date;
   TimeLocal(date);
   offtimeCreate(date); // Рисуем на графике заполненный прямоугольник (не торговая зона) с 21:00 до 23:59 в день указанный в переменной date
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   MqlDateTime date;
   TimeLocal(date);
   if(date.hour==22 && date.min==33 && date.sec==00)
      offtimeCreate(date); // Каждое утро, в 9:00, рисуем новую "не торговую зону" для дня указанного в переменной date
  }
//+------------------------------------------------------------------+
/*void offtimeCreate(MqlDateTime &struct_date)
  {
   string text="";
   text=IntegerToString(struct_date.hour)+":"+
        IntegerToString(struct_date.min)+":"+
        IntegerToString(struct_date.sec);
   Comment(text);
//ChartRedraw();
  }*/
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool offtimeCreate(MqlDateTime &stm)
  {
   color clr=Black;
   datetime tm1,tm2;
   tm1 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 21:00");
   tm2 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 23:59");

   Print(tm1+"      "+tm2);
//RectangleCreate(0,"offtime",0,tm1,0,tm2,200,clr); // chrart_id,object_name,sub_window,time1,price1,time2,price2,color

   return(true);
  }
//+------------------------------------------------------------------+
 
Karputov Vladimir:

Sie hätten Ihren Code überprüfen müssen.

Vladimir, ich danke Ihnen für Ihre Geduld und Ihre Hilfe!
Ich habe wirklich einen Fehler im Code gemacht ...
Von nun an werde ich vorsichtiger sein.