Diskussion über die Einführung von Ratsmitgliedern. - Seite 8

 
altec3:

Guten Tag!

Ich versuche, eine Funktion zu schreiben, die den Gewinn für den aktuellen Tag ermittelt:

Können Sie mir sagen, wie in der Funktion

Geben Sie den Zeitraum ab dem aktuellen Tag an. Es ist klar, dass das Ende des Zeitraums to_date=TimeCurrent() ist, aber wie kann man den Beginn des Zeitraums from_date korrekt angeben, so dass er mit 00h:00m:00c des aktuellen Tages beginnt?

Wählen Sie nach Geschmack:

datetime  iTime(
   const string        symbol,          // символ
   ENUM_TIMEFRAMES     timeframe,       // период PERIOD_D1
   int                 shift            // сдвиг
   );
int  CopyTime(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период PERIOD_D1
   int              start_pos,       // откуда начнем 0
   int              count,           // сколько копируем 1
   datetime         time_array[]     // массив для копирования времени открытия. Объявить заранее

Oder die meisten, die meisten. Dies wurde bereits vorgeschlagen.

 
Vladimir Karputov:

Unter der Annahme, dass es heute mindestens einen Tick gab, läuft der Algorithmus wie folgt ab: Die aktuelle Zeit wird an die StrukturMqlDateTime gesendet. Dann setzen Sie die Stunden, Minuten und Sekunden in dieser Struktur auf Null. Es bleibt, die bearbeitete Struktur in eine Zeit umzuwandeln:


Ergebnis:

Ich danke Ihnen! Eine weitere Frage: Wenn ich eine Funktion hinzufüge

//+------------------------------------------------------------------+
//|Функция возвращает прибыль за текущие сутки                       |
//+------------------------------------------------------------------+
double Day_Profit()
  {
//--Запрашиваем историю сделок за последнии сутки
   HistorySelect(TimeCurrent()-PeriodSeconds(PERIOD_D1),TimeCurrent());
   uint     total       =HistoryDealsTotal();   // количество сделок в истории
   ulong    ticket      =0;                     // тикет сделки в истории
   long     type        =0;                     // тип сделки
   double   profit      =0.0;                   // финансовый результат сделки
   double   commission  =0.0;                   // коммиссия по сделке
   double   DayProfit   =0.0;                   // прибыль за текущие сутки
//--- for all deals
   for(uint i=0; i<total; i++)
     {
      if((ticket=HistoryDealGetTicket(i))>0)       //--- если имеются сделки, то...
        {
         profit      =HistoryDealGetDouble(ticket,DEAL_PROFIT);
         commission  =HistoryDealGetDouble(ticket,DEAL_COMMISSION);
         if(HistoryDealGetInteger(ticket,DEAL_TYPE)!=DEAL_TYPE_BALANCE)
           {
            DayProfit+=(profit+commission);
           }
        }
     }
   return (DayProfit);
  }
//+------------------------------------------------------------------+

an den Expert Advisor, wie wird der Zeitraum, für den die Trades analysiert werden, aktualisiert? Wenn mein Expert Advisor zum Beispiel ein paar Tage lang funktioniert, wird der Zeitraum am nächsten Tag aktualisiert?

Implementierung der oben genannten Funktion in den Expert Advisor:

void OnTick()
  {
   if(Day_Profit()<ProfitMax)
     {
      ExtExpert.OnTick();
     }
   return;
  }
 
altec3:

Ich danke Ihnen! Eine andere Frage, wenn ich die Funktion hinzufüge:

wie wird der Zeitraum, für den die Trades analysiert werden, aktualisiert? Zum Beispiel, wenn der Expert Advisor für ein paar Tage arbeitet, dann mit dem nächsten Tag wird der Zeitraum aktualisiert werden?

Die Implementierung der oben genannten Funktion im Expert Advisor:

Die Zeit sollte vom Beginn eines Tages bis zur aktuellen Uhrzeit + Tag oder + drei Tage eingestellt werden.

Sie wissen bereits, wie Sie den Beginn des Tages bestimmen können.

 

Guten Tag!

Es ist notwendig, den Spread für ein Symbol zu ermitteln, bevor ein Auftrag für dieses Symbol erteilt wird. Die Standard-MQL5-Bibliothek enthält die Klasse CSymbolInfo. Da habe ich mich gefragt, wie man diese Prüfung besser implementieren kann - über CSymbolInfo oder mit einer Funktion? Bitte, Herr Experte, beraten Sie mich, was zu tun ist! Sollte diese Frage bereits gestellt worden sein, wäre ich Ihnen sehr dankbar, wenn Sie mich in die richtige Richtung lenken könnten.

 

Guten Tag!

Ich brauche einen Rat. Wie werden Balken berücksichtigt, wenn ein EA Signalmodule aus verschiedenen Zeitrahmen enthält?

Ich habe zum Beispiel einen einfachen Expert Advisor mit zwei Signalmodulen, die auf der Stochastik basieren (wenn die Hauptlinie bei 0 und 1 Balken über der Signallinie liegt - KAUFEN, bei 0 und 1 Balken unter der Signallinie - VERKAUFEN) - eines auf H1 und das andere auf M15. Die Gewichtung beider Module ist gleich, und im Expert Advisor ist der Schwellenwert für die Eröffnung eines Geschäfts so festgelegt, dass Signale aus beiden Modulen gleichzeitig berücksichtigt werden sollten. Der Expert Advisor arbeitet auf dem Chart im Zeitrahmen H1. Wenn Sie sich den Screenshot von H1 ansehen, ist alles klar - die Hauptlinie ist höher als die Signallinie bei den letzten und vorletzten Balken, und deshalb kaufen wir. Aber auf dem Diagramm von M15 kann ich nicht verstehen, welcher Balken als 0 und welcher als 1 betrachtet werden soll? Das Geschäft ist offen - das bedeutet, dass am M15 auch die Bedingung für das Geschäft erfüllt sein sollte.

Dateien:
H1.png  43 kb
M15.png  21 kb
 
altec3:

Zum Beispiel gibt es einen einfachen Expert Advisor, der zwei Signalmodule auf Basis der Stochastik enthält (wenn die Hauptlinie über der Signallinie bei 0 und 1 Balken liegt - KAUFEN, unter der Signallinie bei 0 und 1 Balken - VERKAUFEN) - eines für H1, das andere für M15.

Zero Bar ist böse! Der Indikator auf der Geschichte sehen Sie berechnet, als ob auf 1 bar - geschlossen (gut, vereinfacht, wenn nicht unter Berücksichtigung der Möglichkeit der re-crossing). Dementsprechend ist die Strategie auf einem geschlossenen Balken aufgebaut, und im Tester zeigt der Indikator des Haupt-TF in MT4 das Ergebnis sogar eines Null-Balkens als geschlossenen Balken an - d.h. aus der Zukunft.
Das Ergebnis ist Enttäuschung: Eine Sache ist im Tester anders, während in Echtzeit das Gegenteil der Fall ist.
Nehmen Sie mich beim Wort - ich habe die Hälfte meines Lebens damit verbracht, herauszufinden, wo der Systemfehler liegt. Für die korrekte Zuordnung von Indikatoren höherer TFs auf einen niedrigeren ist ein spezieller Ansatz erforderlich. Gewöhnlich ist bei Puschka, zum Beispiel, alles einfach - multiplizieren Sie die Periode mit dem TF-Verhältnis und der Reihenfolge, aber wenn es nicht-lineare Berechnungen gibt, dann gibt es nur eine Nachahmung der Berechnung auf 0 bar.
Ich habe den RSI ein Jahr lang gebrochen, um ihn dazu zu bringen, die wichtigsten TF auf dem Chart korrekt anzuzeigen.
Ich bestehe nicht darauf, ich empfehle als Minimum, Signale aus geschlossenen Bars zu verwenden, vor allem aus höheren in Bezug auf den aktuellen Zeitrahmen, und auch überprüfen, vor allem benutzerdefinierte Indikatoren für die Re-Bewertung.
 
altec3:

Guten Tag!

Ich brauche einen Rat. Wie werden Balken berücksichtigt, wenn ein EA Signalmodule aus verschiedenen Zeitrahmen enthält?

Ich habe zum Beispiel einen einfachen Expert Advisor mit zwei Signalmodulen, die auf der Stochastik basieren (wenn die Hauptlinie bei 0 und 1 Balken über der Signallinie liegt - KAUFEN, bei 0 und 1 Balken unter der Signallinie - VERKAUFEN) - eines auf H1 und das andere auf M15. Die Gewichtung beider Module ist gleich, und im Expert Advisor ist der Schwellenwert für die Eröffnung eines Geschäfts so festgelegt, dass Signale aus beiden Modulen gleichzeitig berücksichtigt werden sollten. Der Expert Advisor arbeitet auf dem Chart im Zeitrahmen H1. Wenn Sie sich den Screenshot von H1 ansehen, ist alles klar - die Hauptlinie ist höher als die Signallinie bei den letzten und vorletzten Balken, und deshalb kaufen wir. Aber auf dem Diagramm von M15 kann ich nicht verstehen, welcher Balken als 0 und welcher als 1 betrachtet werden soll? Das Geschäft ist offen, das bedeutet, dass am M15 auch die Bedingung für das Geschäft erfüllt sein sollte.

Auf der Historie sehen Sie bereits geschlossene Balken und der Null-Balken ist kein Übel, aber er ist beweglich und wir müssen ihn berücksichtigen, weil er sich in Abhängigkeit vom aktuellen Preis bildet und stochastische Richtungsänderungen möglich sind, wenn die Preise springen, also ister empfindlicher, er kann zum Beispiel schließen.

Versuchen Sie, eine weitere Leiste hinzuzufügen, um 0 && 1 && 2 zu öffnen. Vielleicht werden die Pflaumen reduziert.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...