Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 131

 
Sepulca:

Une bonne tâche pour le cerveau. Vous pouvez essayer comme ça :

Résultat du test pour la dimension 4. Si l'élément X du tableau n'est pas sélectionné, sinon utiliser tableau[chiffre] et fragment pour la dimension 6 :


J'ai regardé votre code, mais ce que je ne comprends pas, c'est que vous n'avez pas lu les données du tableau original à aucun moment. seulement le nombre d'éléments qu'il contient.
 
//chief2000:

J'ai parcouru votre code, mais ce que je ne comprends pas, c'est ce qui suit : vous n'avez pas lu les données du tableau d'origine à l'une des étapes, mais seulement le nombre d'éléments qu'il contient


Pourquoi ai-je besoin des données du tableau original ? Je ne fais qu'échantillonner les éléments du tableau selon votre idée. Et c'est à vous de décider ce que vous voulez faire avec les données échantillonnées. I.e. si N[0]=3, si N[1]=2, si N[2]=1, si N[3]=0, nous utilisons le tableau [N[0]], le tableau [N[1]], le tableau [N[2]], le tableau [N[3]] pour une analyse plus poussée, et si N[0]=3, N[1]=2, N[2]<0, N[3]<0, alors pour la suite de l'analyse nous n'utilisons que le tableau[N[0]], le tableau[N[1]] car N[2]<0 et N[3]<0. Nous essayons toutes les combinaisons possibles qui ne se répètent pas selon votre message (en tenant compte du fait que la numération du tableau commence de 0 à ArraySize(array)-1) :

[4] <=> { 1 2 3 4 }

1, 12, 13, 14, 123, 124, 134, 1234, 
2, 23, 24, 234, 
3, 34,
4

Et ensuite, agissez en fonction de votre algorithme :

if(NewComb){
// Получили новую комбинацию в массиве N размерностью k    
    
    for(i=0;i<k;i++){// Перебираем массив N. Если N[i]<0 то элемент array[N[i]] не участвует в выборке.
                     // Например, для размерности 4 если N[0]=3,N[1]=1,N[2}<0,N[3]<0 то это выборка array[3] и array[1]
                     //                             если N[0]=3,N[1]=2,N[2]=1,N[3]=0 то это выборка array[3] и array[2] array[1] и array[0]
     if(N[i]>=0){// использовать как-то array[N[i]]}
    }

   }
 
Sepulca:


Pourquoi ai-je besoin des données du tableau original ? J'échantillonne simplement les éléments du tableau selon votre idée. Et c'est à vous de décider ce que vous voulez faire avec les données échantillonnées. I.e. si N[0]=3, si N[1]=2, si N[2]=1, si N[3]=0, nous utilisons le tableau [N[0]], le tableau [N[1]], le tableau [N[2]], le tableau [N[3]] pour une analyse plus poussée, et si N[0]=3, N[1]=2, N[2]<0, N[3]<0, alors pour la suite de l'analyse nous n'utilisons que le tableau[N[0]], le tableau[N[1]] car N[2]<0 et N[3]<0. Nous énumérons toutes les combinaisons possibles qui ne sont pas répétées selon votre post (en tenant compte du fait que la numérotation des tableaux commence de 0 à ArraySize(array)-1) :

Et ensuite, procédez selon votre algorithme :


Maintenant c'est clair (j'ai lu les données dans l'étape suivante, je n'ai juste pas l'habitude de travailler avec du code qui n'est pas le mien).
Merci beaucoup !

 

Aidez-moi à trouver une erreur dans la fonction.

Le problème est que si vous comptez les barres au-dessus de la MA, la fonction renvoie la valeur correcte.

Mais si elle est inférieure à la MA, la fonction renvoie toujours 1 (un).

int CheckFiltr ()
   {
   int i=1;
   for (;;)
      {
      if (NormalizeDouble(High[i],Norm)&&NormalizeDouble(Low[i],Norm)<NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm)||NormalizeDouble(High[i],Norm)&&NormalizeDouble(Low[i],Norm)>NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm))
         {
         i++;
         Comment ("Фильтр = ", i);         
         }
      else break;
      }
   return (i);
   }
 
MarkTrade:

Aidez-moi à trouver une erreur dans la fonction.

Le problème est que si vous comptez les barres au-dessus de la MA, la fonction renvoie la valeur correcte.

Mais si elle est inférieure à la MA, la fonction renvoie toujours 1 (un).

A première vue, c'est mieux, bien que le code puisse être considérablement optimisé, car je n'ai corrigé que la grammaire :

int CheckFiltr ()
   {
   int i=1;
   int Norm=Digits;
   for (;;)
      {
      if (
           (   NormalizeDouble(High[i],Norm)<NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm)
            && NormalizeDouble(Low[i] ,Norm)<NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm)
           )
          ||
           (   NormalizeDouble(High[i],Norm)>NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm) 
            && NormalizeDouble(Low[i] ,Norm)>NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm)
           )
         )

         {
         i++;
         Comment ("Фильтр = ",i);         
         }
      else break;
      }
   return (i);
   }
 
paladin80:

Pour votre exemple, cela ne fait pas de différence, mais vous devez de toute façon spécifier le début et la fin du tableau.

Le début fait une différence si le tableau est grand. Par exemple, si la condition est déclenchée en tant que règle à la fin du tableau, il est préférable de commencer à la fin. Cet exemple est typique de la recherche par ordre/position. Bien sûr, si vous effectuez d'abord la recherche dans ce cas, le programme arrivera de toute façon à ce point, mais cela prendra plus de ressources.


Merci encore ! J'ai maintenant essayé d'optimiser le nombre de barres "vérifiables", mais les résultats dans la fenêtre ne sont tout simplement pas là. J'ai essayé de commencer à compter depuis le début et la fin, mais en vain.

extern int number=3;
//------------------------------------+
for (int x=number; x>=1; x--)
{
 if(Open[x]==Open[x-1]) continue;
    if(Open[x]<Open[x-1])
   {
   //--- action
   }
 else{
    if(Open[x]>Open[x-1])
   {
   //--- action
  }
 }
}
 
Sepulca:
À première vue, c'est mieux, même si le code pourrait être considérablement optimisé :


Ça marche... Merci !

J'ai juste besoin de comprendre pourquoi ma version ne veut pas fonctionner...

 
MarkTrade:


Ça marche comme ça... Merci !

J'aimerais juste comprendre pourquoi ma version ne veut pas fonctionner...


Regardez de plus près votre code

 if (NormalizeDouble(High[i],Norm)&&NormalizeDouble(Low[i],Norm)<NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm)
||NormalizeDouble(High[i],Norm)&&NormalizeDouble(Low[i],Norm)>NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm))
     
Vous comparez simplement le premier terme à zéro, c'est-à-dire vrai ou faux.
 
MarkTrade:


Ça marche... Merci !

J'aimerais juste comprendre pourquoi ma version ne veut pas fonctionner...

Votre code :

int CheckFiltr ()
   {
   int i=1;
   for (;;)
      {
      if (NormalizeDouble(High[i],Norm)&&
          NormalizeDouble(Low[i],Norm)<NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm)
            ||    
          NormalizeDouble(High[i],Norm)&&
          NormalizeDouble(Low[i],Norm)>NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm))
         {
         i++;
         Comment ("Фильтр = ",i);         
         }
      else break;
      }
   return (i);
   }

C'est peut-être plus facile à comprendre...

Oups... on vous l'a déjà dit, vous pouvez le faire sans normalisation...

 
Roger:


Regardez de plus près votre code

Il suffit de comparer le premier terme à zéro, c'est-à-dire vrai ou faux.


L'expression "si a et c sont supérieurs à c" n'est donc pas correcte, mais "si a est supérieur à c et c est supérieur à c" l'est ?
Raison: