[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 655

 
Vinin:

Naturellement, et quand il le faut.


mm, je pensais, morceaux complétés, eh bien, il y a 128 kilo-octets fusionnés - enregistrés. Ce serait plus correct en cas d'accident. Bien que pour l'histoire, bien sûr, peu importe.

Je n'arrivais pas à comprendre, je téléchargeais, mais il n'y avait nulle part où aller jusqu'à ce que je ferme le terminal ;))

 
ToLik_SRGV
Merci pour le conseil sur Print(), je vais y réfléchir.
 
sanyooooook:

Vous pouvez modifier ce paramètre dans l'inite, mais au départ, c'est douteux.


Merci, car lorsque le TF de la fenêtre change, l'indicateur redémarre, cela signifie qu'il est possible de recolorer les tampons.

Et le fait est que sur n'importe quel TF, la couleur des lignes correspondant aux stochastiques des autres TF est toujours la même. Par exemple, si la stochastique horaire est bleue, elle doit être bleue sur tous les TF.

Bien sûr, nous pouvons affecter des tampons de la couleur appropriée au TF approprié, mais le programme de traitement devient alors plus compliqué. Et nous voulons qu'il lise un seul et même tampon dans toutes les conditions.

 
ToLik_SRGV:

Print() que vous devez mettre ici en premier :

que, s'assurer que le tableau c1b_1[i] est vide, donc en comparant dans si zéros, on comprend que les affaires ne sont pas ouvertes.

Et des zéros à cet endroit parce que la période de calcul de la moyenne dans la fonction iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i) (extern int AvgB=25;) est plus grande que le tableau c1b lui-même , ArrayResize(c1b,PeriodB ) (extern int PeriodB=20 ;), et ne peut donc pas calculer la moyenne.


Oui, en effet, "0", mais que faire, dites-moi - cela ne fonctionne pas dans les deux sens (et des périodes égales définies) a essayé les deux options (nouvelles et anciennes) Print("NormalizeDouble(c1b_1 ..., null returns (ne montre que la valeur c1b[i], toutes les autres, y compris c1s[i] - des zéros), aidez à mettre l'une des options dans un état de fonctionnement ou au moins partager un indice, qui verra la faille ?

Nouveau :

// Торговые критерии   
   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
     }

Vieux :

// Торговые критерии
   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
     }

Entièrement :

Dossiers :
21_1.mq4  15 kb
 

Messieurs, je me demande si, si je boucle sur quatre horizons temporels pour trouver le signal, les données seront-elles appelées à chaque fois, avec une charge CPU plus importante que s'il y avait, par exemple, quatre fenêtres du même indicateur avec des horizons temporels différents ?

 
Rossi:

Messieurs, je me demande si, si je boucle sur quatre horizons temporels pour trouver le signal, les données seront-elles appelées à chaque fois, avec une charge CPU plus importante que s'il y avait, par exemple, quatre fenêtres du même indicateur avec des horizons temporels différents ?


Cela dépend de la manière dont elle est mise en œuvre.
 

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,..........................) ;

}

approximativement comme ceci sans allouer de mémoire pour chaque période de temps

 
La même chose.
 
Rossi:

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,..........................) ;

}

approximativement comme ceci sans allouer de mémoire pour chaque période de temps


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,..........................) ;

}
C'est un peu plus précis
 
Qu'est-ce qui peut provoquer un débordement de pile ? Lorsque vous ouvrez une position avec une prise importante (la prise est calculée à partir de la volatilité et multipliée par 100, la taille est 41*100), un dépassement de pile est enregistré et... ... juste le prendre. Aucune autre position n'est ouverte tant que celle-ci n'est pas fermée, et celle-ci, bien sûr, ne sera pas fermée à cause de l'énorme TP... Et l'EA ne fonctionne pas du tout correctement, car il devrait fermer toutes les positions lorsque le profit total prédéfini des positions ouvertes est atteint.... Mais cela n'arrive pas, même si cette position a été très profitable pendant longtemps, environ deux mille points... Comment puis-je le combattre ? Vous ne pouvez pas vous prémunir contre la situation où les positions ouvertes débordent de la pile, et tout est sens dessus dessous...