[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 173

 
Ctmcn:

Können Sie mir sagen, was der Fehler beim Kompilieren des EA bedeutet?

\Programmende' - unausgewogene linke Klammer


Unausgewogene linke Klammer.
 
Roll:

Unausgewogene linke Klammer.

Hoppla... Ich habe es gefunden. DANKE!
 

Hier ist eine Frage.

Die Orders werden als BUY/SELL STOP eröffnet. Einige werden zu Marktaufträgen, andere werden gelöscht.

Für die letzten N-Börsenaufträge (offene und geschlossene) müssen wir wissen, ob es sich um Kauf- oder Verkaufsaufträge handelt.

Mein erster Gedanke ist, alle Bestellungen aus OrdersHistoryTotal() und OrdersTotal() zu durchsuchen und sie zu sortieren nach

und sortieren sie dann nach OP_BUY und OP_SELL. Aber das ist lang und wird den Prozessor stark verlangsamen.

- Vielleicht gibt es eine andere, einfachere Variante?

Ich danke Ihnen!

 

Guten Tag.

Kann jemand helfen?

Ich habe meinen ersten einfachen Indikator geschrieben, der die durchschnittliche Volatilität für die letzten 2, 3, 4 und 5 Tage berechnen soll.

Der Indikator hat sechs Puffer,

SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,VolatBuffer0);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1,VolatBuffer1);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexBuffer(2,VolatBuffer2);
   SetIndexStyle(3,DRAW_HISTOGRAM);
   SetIndexBuffer(3,VolatBuffer3);
   SetIndexStyle(4,DRAW_HISTOGRAM);
   SetIndexBuffer(4,VolatBuffer4);
   SetIndexStyle(5,DRAW_LINE);
   SetIndexBuffer(5,VolatBuffer5);

In seinem Fenster auf dem Diagramm zeichnet normalerweise nur fünf vertikale Linien der Volatilität für 0 Tage, 1 Tag, Durchschnitt für 2 Tage, 3 Tage und 4 Tage.

Die durchschnittliche Volatilität, die sich aus der Summe der 5 Vortage ergibt, wird als gestrichelte Linie für 50 Tageskerzen eingezeichnet - so viele Kerzen sind angegeben.

Der Inhalt der Puffer wird wie folgt berechnet: Mittelwertbildung für 5 Tage - im Zyklus (um eine Linie für 50 Tage zu ziehen), andere gemittelte Daten - außerhalb des Zyklus.

while(i>=0)
   {
    
   int day0= (High[i] - Low[i])/Point;
   int day1= (High[i+1] - Low[i+1])/Point;
   int day2= (High[i+2] - Low[i+2])/Point;
   int day3= (High[i+3] - Low[i+3])/Point;
   int day4= (High[i+4] - Low[i+4])/Point;
   int day5= (High[i+5] - Low[i+5])/Point;

        int D5_av = (day1+ day2+ day3+ day4+ day5) / 5;
       VolatBuffer5[i]=D5_av;
      i--;
        }
        day0= (High[0] - Low[0])/Point;
   day1= (High[1] - Low[1])/Point;
   day2= (High[2] - Low[2])/Point;
   day3= (High[3] - Low[3])/Point;
   day4= (High[4] - Low[4])/Point;
        
        int D4_av = (day1+ day2+ day3+ day4)/4;
        int D3_av = (day1+ day2+ day3)/3;
        int D2_av = (day1+ day2)/2;
        int D1_av = day1/1;
        int D0_av = day0/1;
        
        VolatBuffer0[0]=D0_av;
      VolatBuffer1[1]=D1_av;
      VolatBuffer2[2]=D2_av;
      VolatBuffer3[3]=D3_av;
      VolatBuffer4[4]=D4_av;
Comment("Волатильность. За 5 дн.= "+VolatBuffer5[5]+" За 4 дн.= "+VolatBuffer4[4]+" За 3 дн.= "+VolatBuffer3[3]+" За 2 дн.= "+VolatBuffer2[2]+" Вчера= "+VolatBuffer1[1]+" Сегодня= "+VolatBuffer0[0]);

Die Coment-Zeile im Indikator, in die der Inhalt der Puffer eingetragen wird, führt zu einer absurden Darstellung auf dem Bildschirm:

Mittelwertbildung für 5 Tage - keine Volatilität größer als 194 Pips für diese Tage und korrekte Ergebnisse für die anderen Tage.

Kommentar = "Volatilität. Für 5 Tage = 219,000000 Für 4 Tage = 171,0000000 Für 3 Tage = 189,00000 Für 2 Tage = 187,00000 Gestern = 194,00000 Heute = 5 "

Zero-Day "Today" steigt deutlich mit der Volatilität des aktuellen Tages

Beim Aufruf dieser Puffer an den Expert Advisor

int Volat0= iCustom(Symbol(), 1440, "Volat_Average_Gist",0,0);
      int Volat1= iCustom(Symbol(), 1440, "Volat_Average_Gist",1,0);
      int Volat2= iCustom(Symbol(), 1440, "Volat_Average_Gist",2,0);
      int Volat3= iCustom(Symbol(), 1440, "Volat_Average_Gist",3,0);
      int Volat4= iCustom(Symbol(), 1440, "Volat_Average_Gist",4,0);
      int Volat5= iCustom(Symbol(), 1440, "Volat_Average_Gist",5,0);

tester's Print line Gibt eine weitere Absurdität aus - nicht korrekt, anders als die Coment line, aber ähnlich der Wahrheit, das durchschnittliche Ergebnis für 5 Tage und die korrekte Volatilität des heutigen "Day Zero".

Der Rest ergibt eine feste absurde Zahl.

Der Tester Print zeigt die Volatilität in 5 Tagen=181 In 4 Tagen= 2147483647 In 3 Tagen= 2147483647 In 2 Tagen= 2147483647 Gestern= 2147483647 Heute= 5

Seit einigen Tagen kann ich nicht verstehen, warum dem Expert Advisor andere Daten als die in den fünf Indikatorpuffern enthaltenen Daten übermittelt werden, mit Ausnahme des Puffers "Day Zero"?

 

Versuchen Sie zu ersetzen

VolatBuffer1[1]=D1_av;

zu

VolatBuffer1[0]=D1_av;

und auch alle anderen Puffer.

 
Roger:

Versuchen Sie zu ersetzen

VolatBuffer1[1]=D1_av;

zu

VolatBuffer1[0]=D1_av;

und auch alle anderen Puffer.

Ich danke Ihnen!

Es hat funktioniert. Der Expert Advisor begann, normale Daten zu empfangen.

Darüber hinaus gibt es einen interessanten Effekt - in der Zeile "Kommentar" des Indikators

nur 219 für 5 Tage bleibt, wie es war.

Gleichzeitig erhält der Expert Advisor 181 anstelle von 219, wie es eigentlich sein sollte.

Coment'' zeigt Volatilität über 5 Tage= 219.000000 über 4 Tage= 2147483647 über 3 Tage= 2147483647 über 2 Tage= 2147483647 gestern= 2147483647 heute= 5

 
Roger:

Versuchen Sie zu ersetzen

VolatBuffer1[1]=D1_av;

zu

VolatBuffer1[0]=D1_av;

und auch alle anderen Puffer.

Ich habe einen weiteren Effekt gefunden. Alle vertikalen Linien im Indikatorfenster werden übereinander gezeichnet

Der größte Wert deckt alle anderen ab. Sie ist für den Expert Advisor nicht unbedingt erforderlich.

 
Vekker:

Guten Tag.

Kann jemand helfen?

Habe meinen ersten einfachen Indikator geschrieben - sollte die durchschnittliche Volatilität für die letzten 2,3,4,und 5 Tage zählen.

Durch die Verwendung von ATR können Sie die Dinge erheblich vereinfachen:

iATR(NULL, PERIOD_D1, Number_Of_Days, 1)
 
Roll:
Zwei Drehbücher:

Die Frage ist nicht mehr, wie man den Code schreibt, sondern auf der Ebene einer Idee - ist es möglich, Mehrfachschleifen zu vermeiden,

was eine große Belastung für den Prozessor darstellt. Es gab z.B. die Idee, die Anzahl der offenen STOP-Aufträge zu verfolgen - wenn die Anzahl um eins gesunken ist, aber der Auftrag nicht gelöscht wurde => einen Marktauftrag eröffnen.

seine Öffnungszeit und sein Typ sollten in einem Array abgelegt werden. Etwa so.

Jede Idee ist willkommen.

Danke!

 
chief2000:

Durch die Verwendung von ATR können Sie die Dinge erheblich vereinfachen:



Ich danke Ihnen! Ich werde es versuchen.
Grund der Beschwerde: