Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 131

 
Sepulca:

Eine gute Aufgabe für das Gehirn. Sie können es so versuchen:

Testergebnis für Dimension 4. Wenn X-Element von array nicht ausgewählt ist, ansonsten array[digit] und Fragment für Dimension 6 verwenden:


Ich habe mir Ihren Code angesehen, aber was ich nicht verstehe, ist, dass Sie zu keinem Zeitpunkt die Daten des ursprünglichen Arrays gelesen haben. nur die Anzahl der Elemente darin
 
//chief2000:

Ich habe mir Ihren Code angesehen, aber was ich nicht verstehe, ist Folgendes: Sie haben bei keinem der Schritte die Daten des ursprünglichen Arrays gelesen. nur die Anzahl der Elemente darin


Wozu benötige ich Daten aus dem ursprünglichen Array? Ich sammele nur die Elemente des Arrays entsprechend Ihrer Idee. Und Sie entscheiden selbst, was Sie mit den Stichprobendaten machen wollen. D.h. wenn N[0]=3, wenn N[1]=2, wenn N[2]=1, wenn N[3]=0, verwenden wir array[N[0]], array[N[1]], array[N[2]], array[N[3]] zur weiteren Analyse, und wenn N[0]=3, N[1]=2, N[2]<0, N[3]<0, dann verwenden wir für die weitere Analyse nur array[N[0]], array[N[1]], da N[2]<0 und N[3]<0. Wir probieren alle möglichen Kombinationen aus, die sich laut Ihrem Beitrag nicht wiederholen (unter Berücksichtigung der Tatsache, dass die Nummerierung des Arrays von 0 bis ArraySize(array)-1 beginnt):

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

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

Und dann handeln Sie nach Ihrem Algorithmus:

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:


Wozu benötige ich Daten aus dem ursprünglichen Array? Ich nehme einfach Elemente des Arrays gemäß Ihrer Idee auf. Und Sie entscheiden selbst, was Sie mit den Stichprobendaten machen wollen. D.h. wenn N[0]=3, wenn N[1]=2, wenn N[2]=1, wenn N[3]=0, verwenden wir array[N[0]], array[N[1]], array[N[2]], array[N[3]] zur weiteren Analyse, und wenn N[0]=3, N[1]=2, N[2]<0, N[3]<0, dann verwenden wir für die weitere Analyse nur array[N[0]], array[N[1]], da N[2]<0 und N[3]<0. Wir zählen alle möglichen Kombinationen auf, die sich gemäß Ihrem Beitrag nicht wiederholen (unter Berücksichtigung, dass die Array-Nummerierung von 0 bis ArraySize(array)-1 beginnt):

Und dann gehen Sie nach Ihrem Algorithmus vor:


Jetzt ist es klar (ich habe die Daten im nächsten Schritt gelesen, bin es nur nicht gewohnt, mit fremdem Code zu arbeiten).
Herzlichen Dank!

 

Helfen Sie mir, einen Fehler in der Funktion zu finden.

Das Problem ist, dass die Funktion den richtigen Wert liefert, wenn Sie die Balken oberhalb des MA zählen.

Liegt er jedoch unter dem MA, gibt die Funktion immer 1 (eins) zurück.

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:

Helfen Sie mir, einen Fehler in der Funktion zu finden.

Das Problem ist, dass die Funktion den richtigen Wert liefert, wenn Sie die Balken oberhalb des MA zählen.

Liegt er jedoch unter dem MA, gibt die Funktion immer 1 (eins) zurück.

Auf den ersten Blick ist das besser, obwohl der Code deutlich optimiert werden kann, da ich nur die Grammatik korrigiert habe:

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:

Für Ihr Beispiel macht es eigentlich keinen Unterschied, aber Sie müssen trotzdem den Anfang und das Ende des Arrays angeben.

Der Anfang macht einen Unterschied, wenn das Feld groß ist. Wenn die Bedingung zum Beispiel als Regel am Ende des Arrays ausgelöst wird, ist es besser, am Ende zu beginnen. Dieses Beispiel ist typisch für die Auftrags-/Positionssuche. Wenn Sie in diesem Fall zuerst die Suche durchführen, gelangt das Programm natürlich trotzdem zu diesem Punkt, aber es werden mehr Ressourcen benötigt.


Nochmals vielen Dank! Jetzt habe ich versucht, die Anzahl der "überprüfbaren" Balken zu optimieren, aber die Ergebnisse im Fenster sind einfach nicht vorhanden. Ich habe versucht, sowohl am Anfang als auch am Ende mit dem Zählen zu beginnen, aber vergeblich.

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:
Auf den ersten Blick ist dies besser, obwohl der Code noch erheblich optimiert werden könnte:


Das funktioniert... Ich danke Ihnen!

Ich muss nur verstehen, warum meine Version nicht funktionieren will...

 
MarkTrade:


Das funktioniert so... Ich danke Ihnen!

Ich wünschte nur, ich würde verstehen, warum meine Version nicht funktionieren will...


Schauen Sie sich Ihren Code genauer an

 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))
     
Sie vergleichen einfach den ersten Term mit Null, d. h. wahr oder falsch.
 
MarkTrade:


Es funktioniert... Ich danke Ihnen!

Ich wünschte nur, ich würde verstehen, warum meine Version nicht funktionieren will...

Ihr 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);
   }

Vielleicht ist es einfacher zu verstehen...

Ups... man hat Ihnen bereits gesagt, dass Sie es ohne Normalisierung machen können...

 
Roger:


Schauen Sie sich Ihren Code genauer an

Man vergleicht einfach den ersten Term mit Null, d.h. wahr oder falsch.


Der Ausdruck "wenn a und c größer als c sind" ist also nicht richtig, aber "wenn a größer als c ist und c größer als c ist" ist richtig?
Grund der Beschwerde: