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

 

Nein, es piepst nicht ständig, sondern es heißt "Array außerhalb des Bereichs", wenn >=. Und warum?

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(rates_total<2) return(0);
     {
      int limit=rates_total-prev_calculated;
      if(limit>1) 
        {
         ArrayInitialize(BufferUP,EMPTY_VALUE);
         ArrayInitialize(BufferDN,EMPTY_VALUE);
        }
      for(int i=limit; i>=0; i--) 
        {
         if(TimeCurrent()>=Input1 || TimeCurrent()>=Input2 || TimeCurrent()>=Input3)
           {
            BufferUP[i]=low[i]-10*Point;// в этой строке array out of range in 'a1.mq4' (75,28)

            Alert("__",TimeCurrent());
           }
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
volyal:
Ich danke Ihnen. Nur>= ist nicht möglich, es wird ein konstantes Signal geben, nach dem ersten Datum müssen Sie den Zeitbereich festlegen. Wie wird eingestellt?

dies ist der zweite Teil der Frage und der zweite Teil der Antwort

Wenn das Signal (der Alarm) ausgelöst wird, müssen Sie festlegen, dass das Signal bereits angewendet wurde, Sie brauchen eine zusätzliche Bedingung:

 {
//---
   static bool alerton=true;
   A=1;B=2;
   if(rates_total<2) return(0);
     {
      int limit=rates_total-prev_calculated;
      if(limit>1)
        {
         ArrayInitialize(BufferUP,EMPTY_VALUE);
         ArrayInitialize(BufferDN,EMPTY_VALUE);
        }
      for(int i=limit; i>=0; i--)
        {
         if(alerton)
           {
            if(A>B)
              {
               if((TimeCurrent()>=Input1 || TimeCurrent()>=Input2 || TimeCurrent()>=Input3))
                 {
                  BufferUP[i]=low[i]-10*Point;
                  Alert("__",TimeCurrent());
                  alerton = false;
                 }
              }
           }
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }

Sie haben in Ihrem Code klare Bedingungen für die Auslösung des Alarms. Normalerweise verlangen Indikatoren ein Signal pro Takt, dann müssen Sie den Zeitpunkt des Taktes an eine Variable "binden", die den Zeitpunkt der Auslösung des Alarms speichert, d.h. ich spreche von

statisch datetime alerton=0;

Suchen Sie nach fertigen Beispielen, ich denke, Sie werden es jetzt verstehen.

 
Aleksey Vyazmikin:

Wenn viele Signale auf einmal gleich sind, gruppieren Sie sie und spielen Sie sie als ein einziges ab. Oder sammeln Sie sie in Arrays nach Signalart und spielen Sie sie langsam ab :)

Gruppieren Sie sie in einem Array und spielen Sie sie in einem separaten Skript ab - das ist ziemlich klar und entspricht Ihrem ersten Tipp.

Aber sie zu gruppieren und als Einheit zu spielen, das verstehe ich nicht ganz. Als eine Audiodatei?

Wie gruppiert man zum Beispiel

if(Sobitie_1)

{
PlaySound("Symbol.wav");
PlaySound("Sobitie1.wav");
PlaySound("Punkt.wav");
}?


Wie PlaySound("Symbol Sobitie1 Period.wav");? In diesem Fall ist die Anzahl von Symbol * Sobitie * Periode=3*10*7=210. Das ist zu viel):

Außerdem stammen die Signale für die Wiedergabe von Indikatoren aus verschiedenen TFs. Ich weiß noch nicht, wie ich das berücksichtigen soll.

 
Algus:

Gruppieren Sie sie in einem Array und spielen Sie sie in einem separaten Skript ab - das ist im Allgemeinen verständlich, entsprechend Ihrem ersten Vorschlag.

Aber sich zu einer Gruppe zusammenzuschließen und gemeinsam zu spielen, das verstehe ich nicht ganz. Als eine Audiodatei?

Wie gruppiert man zum Beispiel

if(Sobitie_1)

{
PlaySound("Symbol.wav");
PlaySound("Sobitie1.wav");
PlaySound("Zeitraum.wav");
}?


As PlaySound("Symbol Sobitie1 Zeitraum.wav");? In diesem Fall ist die Anzahl der Dateien Symbol * Sobitie * Zeitraum=3*10*7=210. Das ist eine ganze Menge...):

Außerdem stammen die Signale für die Wiedergabe von Indikatoren aus verschiedenen TFs. Ich weiß noch nicht, wie ich das berücksichtigen soll.

Ich sprach über die Häufigkeit, mit der das Signal kommt in, dh, wie ich verstehe, haben Sie die gleichen und nicht den gleichen Ton, während der Wiedergabe eines Tons ist in einem Puffer angesammelt (kann in der grafischen akkumulieren) die Warteschlange zu spielen, nach dem Spiel Warteschlange analysiert und verworfen, die Klänge, die zum Zeitpunkt der Wiedergabe der Datei kam und haben den gleichen Klang, dh nicht tragen die neuen Informationen. Ich kenne die Details Ihres Melophons nicht :).

 

Guten Tag!

Bitte helfen Sie mir bei diesem Missverständnis:

Ich setze eine Bedingung, um eine Position zu eröffnen:

if(MathAbs(WPR1)<20.0)
        {
         if(MathAbs(WPR14)>44.0 && MathAbs(WPR14)<60.0 && op0<cl1) 
{ps2=true;ps1=false;ps3=false;ps4=false;ps5=false;ps6=false;ps7=false;ps8=false;Alert("условие ps2"); OpenSell();}
        }

Und statt einer Position mit der Flaggeps2 werden zwei geöffnet, mit den Flaggenps2 undps3. Und egal, was ich mache, es ändert sich nichts. Ich habe alle Situationen mit Warnungen überprüft und nichts gefunden. Was ist los???? Es scheint alles in Ordnung zu sein, die Flaggen setzen verschiedene Stufen von TP. Aber noch immer kein Bedarf an einer zusätzlichen Stelle.

Ich danke Ihnen.

 
novichok2018:

Guten Tag!

Bitte helfen Sie mir bei diesem Missverständnis:

Ich setze eine Bedingung, um eine Position zu eröffnen:

Und statt einer Position mit der Flaggeps2 werden zwei geöffnet, mit den Flaggenps2 undps3. Und egal, was ich mache, es ändert sich nichts. Ich habe alle Situationen mit Warnungen überprüft und nichts gefunden. Was ist los???? Es scheint alles in Ordnung zu sein, die Flaggen setzen verschiedene Stufen von TP. Aber trotzdem brauche ich keine zusätzliche Stelle.

Danke.

Außerdem steht im Protokoll, dass zuerstps3 und dannps2 geöffnet wird.

 
novichok2018:

Guten Tag!

Bitte helfen Sie mir bei diesem Missverständnis:

Ich setze eine Bedingung, um eine Position zu eröffnen:

Und statt einer Position mit der Flaggeps2 werden zwei geöffnet, mit den Flaggenps2 undps3. Und egal, was ich mache, es ändert sich nichts. Ich habe alle Situationen mit Warnungen überprüft und nichts gefunden. Was ist los???? Es scheint alles in Ordnung zu sein, die Flaggen setzen verschiedene Stufen von TP. Aber trotzdem brauche ich keine zusätzliche Stelle.

Ich danke Ihnen.

Wowotschka kommt von der Schule zurück. fragt Papa:

- Welche Note hast du heute bekommen?

- Ich habe eine Vier in Naturwissenschaften.

- Warum?

- Der Lehrer zeigt mir den Schwanz eines Vogels und fordert mich auf, zu erraten, um welche Art von Vogel es sich handelt...

Dieser Vater geht in die Schule, öffnet die Klassenzimmertür und zeigt seinen Hintern hinein.

- Wer zum Teufel ist das...

...fragt die Lehrerin...

- Raten Sie selbst.


Dies ist genau Ihr Code...))))

 
Alexey Viktorov:

Wowotschka kommt von der Schule nach Hause. fragt Papa:

- Welche Note hast du heute bekommen?

- Ich habe eine Vier in Naturwissenschaften.

- Warum?

- Der Lehrer zeigt dir den Schwanz eines Vogels und sagt dir, du sollst erraten, um welche Art von Vogel es sich handelt...

Dieser Vater geht in die Schule, öffnet die Klassenzimmertür und zeigt seinen Hintern hinein.

- Wer zum Teufel ist das...

...fragt die Lehrerin...

- Raten Sie selbst.


Das ist genau Ihr Code... ))))

Die Fünftklässlerin Ljoshenka kommt nicht in die ersten Klassen, um zu helfen, sondern um zu stänkern.

Das ist genau Ihre Antwort.

 
novichok2018:

Außerdem steht im Logbuch, dass zuerst dieps3 und dann dieps2 geöffnet wird.

Das war's, ich habe es herausgefunden. Es stellte sich heraus, dass es einfach war: In den Ausschreibungen mit der Bedingungps8 gab es statt 8 nur 3. Und Bedingung 8 ist breiter als Bedingung 2 und liegt höher auf den Linien. Das Problem wurde behoben und eingegrenzt, alles ist in Ordnung.

Aber du solltest nicht mit dem Schwanz wedeln, dieser Thread ist für Neulinge. Ein echter Experte, der keine Details kennt, sollte verstehen, wo der Fehler ungefähr liegt, oder zumindest Suggestivfragen stellen, andernfalls sollte er überhaupt nicht antworten, anstatt sich als Pseudo-Wirbler aufzuspielen.

 
Aleksey Vyazmikin:

Ich sprach über die Häufigkeit, mit der das Signal kommt in, dh, wie ich verstehe, haben Sie die gleichen und nicht den gleichen Ton, während der Wiedergabe der Ton in einem Puffer angesammelt (Sie können in der Grafik akkumulieren) Warteschlange zu spielen, nach dem Spielen der Warteschlange zu analysieren und zu verwerfen, die Klänge, die zum Zeitpunkt der Wiedergabe der Datei kam und haben den gleichen Klang, dh, nicht tragen die neuen Informationen. Ich weiß nicht genau, was für ein Melophon Sie da haben :)

Es gibt einen Indikator, der auf und alle funktionierenden TFs und Währungen steht. Ich arbeite im Intraday-Bereich, fast Scalping, mit 2-3 Instrumenten. Ich benutze akustische Signale, um keine Ereignisse zu verpassen, und mir fallen am Ende des Tages nicht die Augen aus.

In der Tat gibt es 10-14 Indikatoren, die sich mit Windows befassen. Es stellt sich heraus, dass wir die Warteschlange der verschiedenen Indikatoren, die unabhängig voneinander arbeiten, aufbauen müssen. Dies ist keine einfache Aufgabe für das Terminal oder seine Programmierung.

Das ist die Art von "Musik", die wir bekommen):