[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 655

 
Vinin:

Natürlich, und wann sonst.


mm, dachte ich, Stücke von abgeschlossen, na ja, es sind 128 Kilobyte zusammengelegt - aufgezeichnet. Das wäre im Falle eines Absturzes korrekter. Aber für die Geschichte ist das natürlich egal.

Ich konnte es einfach nicht herausfinden, ich war beim Herunterladen, aber es gab keinen Weg, bis ich das Terminal geschlossen hatte))

 
ToLik_SRGV
Danke für den Tipp zu Print(), ich werde es mir ansehen.
 
sanyooooook:

Sie können diesen Parameter in der Instanz ändern, aber beim Start ist dies zweifelhaft.


Danke, denn wenn sich die TF auf dem Fenster ändert, wird der Indikator neu gestartet, das heißt, wir können die Puffer neu einfärben

Und der Punkt ist, dass bei jedem TF die Farbe der Linien, die der Stochastik anderer TFs entsprechen, immer dieselbe Farbe ist. D.h. wenn der Stunden-Stochastik blau ist, soll er auf allen TFs blau sein.

Natürlich können wir den entsprechenden TF Puffer in der entsprechenden Farbe zuweisen, aber dann wird das Verarbeitungsprogramm komplizierter. Und wir wollen, dass er unter allen Bedingungen ein und denselben Puffer liest.

 
ToLik_SRGV:

Print() müssen Sie hier zuerst einfügen:

dass, stellen Sie sicher, dass Array c1b_1[i] leer ist, so dass der Vergleich in wenn Nullen, verständlicherweise Geschäfte nicht geöffnet werden.

Und dort Nullen, weil die Mittelungsperiode in der Funktion iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i) (extern int AvgB=25;) größer ist als das Array c1b selbst , ArrayResize(c1b,PeriodB ) (extern int PeriodB=20;), so dass sie nichts mitteln kann.


Ja, in der Tat "0", aber was zu tun ist, sagen Sie mir - es funktioniert nicht in beide Richtungen (und gleiche Perioden gesetzt) versucht beide Optionen (neue und alte) Print("NormalizeDouble(c1b_1 ..., null gibt (zeigt nur c1b[i] Wert, alle anderen, einschließlich c1s[i] - Nullen), helfen Sie mir eine der Optionen zu einem funktionierenden Zustand zu bringen oder zumindest einen Hinweis teilen, die den Fehler sehen?

Neu:

// Торговые критерии   
   double c1b[];
   ArrayResize(c1b,PeriodB);
   double c1b_1[];
   ArrayResize(c1b_1,AvgB);
   for(i=1;i<=PeriodB;i++)
   {
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   {
   c1b_1[i]=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i);
   }
   }
   
   double c1s[];
   ArrayResize(c1s,PeriodS);
   double c1s_1[];
   ArrayResize(c1s_1,AvgS);
   for(i=1;i<=PeriodS;i++)
   {
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   {
   c1s_1[i]=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i);
   }
   }
   
   Print("NormalizeDouble(c1b_1[i],4) - ",NormalizeDouble(c1b_1[i],4));
   Print("NormalizeDouble(c1b_1[i+2],4) - ",NormalizeDouble(c1b_1[i+2],4));
   Print("NormalizeDouble(c1b_1[i+3],4) - ",NormalizeDouble(c1b_1[i+3],4)); 

if (NormalizeDouble(c1b_1[i],4)<NormalizeDouble(c1b_1[i+2],4)&&NormalizeDouble(c1b_1[i+2],4)>NormalizeDouble(c1b_1[i+3],4))
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if (NormalizeDouble(c1s_1[i],4)>NormalizeDouble(c1s_1[i+2],4)&&NormalizeDouble(c1s_1[i+2],4)<NormalizeDouble(c1s_1[i+3],4))
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

Alt:

// Торговые критерии
   double c1b[];
   ArrayResize(c1b,PeriodB);
   for(i=1;i<=PeriodB;i++)
   {
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   }
   double c1b_1=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,1);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,3);
   
   double c1s[];
   ArrayResize(c1s,PeriodS);
   for(i=1;i<=PeriodS;i++)
   {
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   }
   double c1s_1=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,1);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,3);
   
   Print("NormalizeDouble(c1b_1,4) - ",NormalizeDouble(c1b_1,4));
   Print("NormalizeDouble(c1b_2,4) - ",NormalizeDouble(c1b_2,4));
   Print("NormalizeDouble(c1b_3,4) - ",NormalizeDouble(c1b_3,4));

if (NormalizeDouble(c1b_1,4)<NormalizeDouble(c1b_2,4)&&NormalizeDouble(c1b_2,4)>NormalizeDouble(c1b_3,4))
     {
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if (NormalizeDouble(c1s_1,4)>NormalizeDouble(c1s_2,4)&&NormalizeDouble(c1s_2,4)<NormalizeDouble(c1s_3,4))
     {
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

Ganz und gar:

Dateien:
21_1.mq4  15 kb
 

Meine Herren, ich frage mich, wenn ich vier Zeitrahmen durchlaufe, um ein Signal zu finden, werden die Daten dann jedes Mal abgerufen, was zu einer höheren CPU-Belastung führt, als wenn es z.B. vier Fenster desselben Indikators mit unterschiedlichen Zeitrahmen gibt?

 
Rossi:

Meine Herren, ich frage mich, wenn ich eine Schleife durch vier Zeitrahmen durchlaufe, um das Signal zu finden, werden die Daten jedes Mal abgerufen, mit mehr CPU-Last, als wenn es zum Beispiel vier Fenster des gleichen Indikators mit verschiedenen Zeitrahmen gibt?


Es kommt darauf an, wie es umgesetzt wird.
 

int TimeMassive[15, 30, 60, 240] ;

for(int k=0; k<4; K++)

{

timeframe= TimeMassive[k] ;

for(int i=0; i<limit; i++)

Puffer[i]= iMA(NULL, Zeitrahmen,..........................) ;

}

etwa so, ohne dass für jedes Zeitfenster Speicher zugewiesen wird

 
Dasselbe.
 
Rossi:

int TimeMassive[15, 30, 60, 240] ;

for(int k=0; k<4; K++)

{

timeframe= TimeMassive[k] ;

for(int i=0; i<limit; i++)

Puffer[i]= iMA(NULL, Zeitrahmen,..........................) ;

}

etwa so, ohne dass für jedes Zeitfenster Speicher zugewiesen wird


int TimeMassive[]={15, 30, 60, 240} ;

for(int k=0; k<4; K++)

{

timeframe= TimeMassive[k] ;

for(int i=0; i<limit; i++)

Buffer[i]= iMA(NULL, timeframe,..........................) ;

}
Das ist ein bisschen genauer
 
Was kann einen Stapelüberlauf verursachen? Wenn Sie eine Position mit einem großen Take eröffnen (der Take wird aus der Volatilität berechnet und mit 100 multipliziert, die Größe ist 41*100), wird ein Stack Overflow protokolliert und... ... nimm es einfach. Es werden keine weiteren Positionen eröffnet, bis diese geschlossen wird, und diese wird natürlich nicht geschlossen, weil der riesige TP... Und der EA arbeitet überhaupt nicht korrekt, denn er sollte alle Positionen schließen, wenn der vordefinierte Gesamtgewinn der offenen Positionen erreicht ist... Aber das passiert nicht, obwohl diese eine Position seit langem riesige Gewinne erzielt hat, etwa zweitausend Punkte... Wie bekämpfe ich sie? Man kann sich nicht vor der Situation schützen, dass offene Positionen den Stapel überlaufen lassen und alles durcheinander gerät...