Wann ist es sinnvoll, einen Teil des Robotercodes in einem Indikator zu behalten? - Seite 23

 
Vinin:

Der EMA-Wert zum Zeitpunkt der Unterbrechung der Kommunikation ist nicht korrekt berechnet. Sie wird als die zuletzt berechnete genommen. Dies ist jedoch falsch. Dies hat zur Folge, dass die Funktion nicht bei n Balken, sondern bei einer viel größeren Anzahl von Balken fehlerhaft arbeitet. Wenn Werte gespeichert werden, gilt natürlich

Offenbar sind sie nicht in den Code eingedrungen. Kommentiert:

// Комментирую для такого случая. Крайний известный M1-бар был в 14:00.
// Произошел разрыв связи на 10 минут после чего происходит вызов start.
void start()
{
  EMA = GetEMA();
  
  return;  
}

double GetEMA()
{
  static int PrevTime = 0;
  
  if (PrevTime == Time[0]) // Выпонится, когда история за крайние 10 минут подгрузится.
                           // Если истории не было, например, сутки, то может произойти ошибка.
                           // Но мы говорим про РЕАЛ, т.е. адекватность человека.
                           // Т.к. если нет связи сутки, советник оставлять нельзя.
    return(EMA);

  int i = iBarShift(Symbol(), Period(), PrevTime) - 1; // Здесь мы получим номер бара в 14:01.

  PrevTime = Time[0]; // запомним текущее время 14:10
  
// Производим расчет текущего EMA с учетом полученных 10 баров.
  while (i >= 0)
  {
    EMA = EMA * Alpha + (1 - Alpha) * GetPrice(i);
    
    i--;
  }
  
  return(EMA);
} 
 
Als ich von Fehler und Angemessenheit sprach, meinte ich nicht, dass dies nur für den "All-in-one"-Fall gilt, sondern auch für den "mit Indikator"-Fall.
 
hrenfx:
Als ich von Irrtum und Angemessenheit sprach, meinte ich die Anwendbarkeit dieses Grundsatzes nicht nur für den "All-in-One"-Fall, sondern auch für den "mit Indikator"-Fall.


Das Gespräch funktioniert nicht, anscheinend will jemand ein wenig Kritik nicht hören.

Wir können daraus schließen, dass dieser Zweig nutzlos ist

 
Vinin:


Ich führe kein Gespräch, offenbar will jemand ein wenig Kritik nicht hören.

Man könnte zu dem Schluss kommen, dass dieser Thread nutzlos ist

Sehen Sie, es gibt keinen Grund zur Spitzfindigkeit. Ich habe sogar einen Kommentar zu Ihrem Code abgegeben. Was kann man daran nicht mögen? Sind Sie der Meinung, dass das Beispiel einer 10-minütigen Pause einen Fehler verursacht? Ich habe mich sehr klar ausgedrückt. Sie sagen, dass es einen Fehler gibt, also sehen Sie, wo er liegt. Dann seien Sie nicht faul, zeigen Sie mir einfach, wo es ist. Sie haben ihn bereits identifiziert.

P.S. Sie sind die zweite Person, die mich hinhält. Und sagen Sie nicht, ich würde das nicht verstehen. Zeigen Sie mir deutlich, wo der Fehler liegt. Wenn ich mich irre, werde ich es zugeben. Das wird mir nichts nützen.

 
hrenfx:

Hören Sie, es gibt keinen Grund, ausweichend zu sein. Ich habe sogar einen Kommentar zu Ihrem Code abgegeben. Was kann man daran nicht mögen? Glauben Sie, dass das Beispiel mit der 10-Minuten-Lücke, das ich Ihnen gegeben habe, einen Fehler verursacht? Ich habe mich sehr konkret geäußert. Sie sagen, dass es einen Fehler gibt, also sehen Sie, wo er liegt. Dann seien Sie nicht faul, zeigen Sie mir einfach, wo es ist. Sie haben sie bereits identifiziert.

P.S. Sie sind die zweite Person, die mich hinhält. Und sagen Sie nicht, ich würde das nicht verstehen. Zeigen Sie mir deutlich, wo der Fehler liegt. Wenn ich mich irre, werde ich es zugeben. Das wird mir nichts nützen.


Jemand will einfach nicht nachdenken. Ich kann sie nicht machen, und ich will es auch nicht.
 
Vinin:

Jemand will einfach nicht denken. Ich kann sie nicht dazu zwingen, und ich will es auch nicht.


Verdammt noch mal, niemand hat sich dazu geäußert. Wieder Wasser. Mehrere Leute (ich kenne MT4+MQL4 sehr gut) sagen mir, dass mein Code mit einem Fehler funktionieren wird, aber ich kann kein konkretes Beispiel-Argument nennen (ich habe mehrmals danach gefragt). Und das in einem Code von nur 10 Zeilen.

Vielleicht könnten Sie den Integer-Code und meinen Code in einen separaten Thread stellen und die MQL4-Programmierer fragen, was in dem Code falsch ist. Und sorgen Sie als Moderator dafür, dass es nicht zu Überschwemmungen kommt. In diesem Fall wird der Code nicht einmal gefunden.

Ich denke, es wird für die MQL4-Gemeinschaft nützlich sein.

 
hrenfx:

Sehen Sie, es gibt keinen Grund zur Spitzfindigkeit. Ich habe Ihnen sogar einen Kommentar zu dem Code gegeben. Was kann man daran nicht mögen?

Der Preis wird an erster Stelle stehen. Dann werden die Gitterstäbe kommen. Wenn die Barren ankommen, sind sie zwar "irgendwie" verarbeitet worden, aber in Wirklichkeit sind sie nicht erfasst, weil sie bei der Verarbeitung nicht vorhanden waren.

Das ist das zweite Mal, dass ich das sage.

 
TheXpert:

Der Preis wird an erster Stelle stehen. Dann werden die Gitterstäbe kommen. Wenn die Barren ankommen, sind sie zwar "irgendwie" verarbeitet, aber in Wirklichkeit werden sie nicht berücksichtigt, weil sie zum Zeitpunkt der Verarbeitung nicht verfügbar waren.

Ja, der Preis kommt zuerst an, aber die Bedingung if (PrevTime == Time[0]) wird immer ausgelöst, bis es einen neuen Balken gibt.

Sie verstehen, dass der EA mit dem Indikator falsche EMA-Werte vor dem Paging der Historie erhält, wenn ein neuer Balken eintrifft, ohne dass ein Paging der letzten 10 Minuten erfolgt ist. Infolgedessen wird der EA alles tun.
 
hrenfx:


Meine Güte, niemand hat sich dazu geäußert. Wieder Wasser. Mehrere Leute (MT4+MQL4 sehr gut kennen) sagen mir, dass mein Code mit Fehlern funktionieren wird, aber sie können nicht ein konkretes Beispiel-Argument (ich habe für sie mehrmals gefragt) geben. Und das in einem Code von nur 10 Zeilen.

Warum stellen Sie den Integer-Code und meinen Code nicht in einen separaten Thread und fragen die MQL4-Programmierer, was in dem Code falsch ist. Und Sie, als Moderator, sorgen dafür, dass es keine Überschwemmungen gibt. In diesem Fall wird der Code nicht einmal gefunden.

Ich denke, es wird für die MQL4-Gemeinschaft nützlich sein.


Ich habe die Logik für einen brauchbaren Algorithmus geliefert. Es hat nicht geklappt. Tut mir leid, dass ich nicht durchgekommen bin.
 
hrenfx:
Ja, der Preis kommt zuerst, aber bis es einen neuen Balken gibt, wird die Bedingung if (PrevTime == Time[0]) die ganze Zeit ausgelöst.
Nein, der Preis wird auf einem neuen Balken stehen. Dies ist beim Einschalten des Terminals deutlich zu erkennen. Am Anfang sieht der Balken wie ein Punkt aus.