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

 

Hallo! Ich vergleiche die Eröffnungskurse von 3 Bars (3,2,1). Wie kann ich die Balken, bei denen die Preise gleich sind, nicht zählen?

for( x=<3;x--)
{
 if( Open[x]==Open[x] )
  {
    x+1;
   }
  if( Open[x]<Open[x] )
   {
   ,,,
   }
 
skyjet:

Hallo! Ich vergleiche die Eröffnungskurse von 3 Bars (3,2,1). Wie kann ich die Balken, bei denen die Preise gleich sind, nicht zählen?

for (int x=1; x<3; x++)
{
 if(Open[x]==Open[x+1]) continue;
 if(Open[x]<Open[x+1])
   {
   //--- action
   }
}
 
Hallo, helfen Sie mir weiter. Ich spiele auf H1, ich habe einen H4-Indikator. Sie wird korrekt angezeigt. Aber wenn ich es im Tester laufen lasse, mit Visualisierung, zum Beispiel zu Beginn des Jahres, zeigt es die aktuellen Informationen, die jetzt auf dem Markt sind. Im Allgemeinen funktioniert sie im Strategy Tester nicht. Wie man es anstellt. Oder werfen Sie auf das Thema, wo es gelöst ist.
 
artmedia70:
Warum ist sie leer? Wird überhaupt etwas ausgegeben, oder befinden sich Nullen in den Array-Zellen?


Überhaupt nichts.

Auch wenn Sie in Objekte es gibt überhaupt nichts, außer den Pfeilen und den Trendlinien...

artmedia70:

Warum erhöhen Sie das i im Hauptteil der Schleife?

und dies: i<=p, warum "oder gleich" ?


Ich habe aus Müdigkeit einen Fehler gemacht. Ich habe es auf diese Weise gelöst:

for(i=0; i<p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
      }

Dieser Teil des Codes befindet sich in der Funktion selbst:

//+-------------------------------------------------------------------------------------+
//| Закрытие ордеров, отсортированных по размеру лотов                                  |
//+-------------------------------------------------------------------------------------+
void ClosePosBySortLots()
{
   double a[][2];
   int p = 0;
   
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() < 2)
      {
         p++;
         ArrayResize(a, p);
         a[p-1][0] = OrderLots();
         a[p-1][1] = OrderTicket();
      }
   }
//   pr ("ClosePosBySortLots(): " + "p = " + p);
   if (p > 0)
   {
      ArraySort(a, WHOLE_ARRAY, 0, MODE_DESCEND);
      
      for(i=0; i<p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
      }
      
      for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES))
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }
   }
}
 
hoz:


Überhaupt nichts.

Auch wenn Sie in Objekte es gibt überhaupt keine Objekte, außer den Pfeilen und Trendlinien...


Ich war es, der vor lauter Müdigkeit einen Fehler gemacht hat. Ich habe es auf diese Weise gelöst:

Dieser Teil des Codes befindet sich in der Funktion selbst:

Vorher und nachher

if (p > 0)

p-Wert ausdrucken.

Muss ich die Abfolge der Fehlersuche für Sie schreiben?

 
artmedia70:

Vorher und nachher.

Drucken Sie den p-Wert aus.

Muss ich die Fehlersequenz für Sie schreiben?



In der Tat, ja. Wie auch immer, die Situation ist wie folgt:

void ClosePosBySortLots()
{
   double a[][2];
   int p = 0;
   
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() < 2)
      {
         p++;
         ArrayResize(a, p);
         a[p-1][0] = OrderLots();
         a[p-1][1] = OrderTicket();
      }
   }
//   pr ("ClosePosBySortLots(): " + "p = " + p);
   pr("___p = " + p);   // Значение кол-ва позиций до if..
   
   if (p > 0)
   {
      pr("p = " + p);   // Значение кол-ва позиций после if..
      
      ArraySort(a, WHOLE_ARRAY, 0, MODE_DESCEND);
      
      for(i=0; i<p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
      }
      
      for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES))
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }
   }
}

Ich habe es auf diese Weise gemacht, aber auch an dieser Stelle des Diagramms kommt nichts heraus. Obwohl an anderen Stellen 0 gedruckt wurde, wenn eine Position offen war und sie auf einmal durch Nehmen geschlossen wurde. D.h., in diesem Bereich arbeitet kosakova, als ob...

Hier ist ein Bildschirmfoto:

Soll ich alle diese Werte jetzt ausdrucken?

p++;
ArrayResize(a, p);
a[p-1][0] = OrderLots();
a[p-1][1] = OrderTicket();

Es scheint, als gäbe es noch viel mehr zu tun. Schließlich steht dort in der Regel alles klar und deutlich geschrieben.

 
hoz:


Das ist es tatsächlich. Wie auch immer, die Situation ist wie folgt:

Ich habe es so gemacht, aber auch an dieser Stelle des Diagramms kommt nichts heraus. Obwohl an anderen Stellen 0 gedruckt wurde, wenn eine Position offen war, wurde sie bei der Übernahme sofort geschlossen. D.h., in diesem Bereich arbeitet Kosakowa, als ob...

Hier ist ein Bildschirmfoto:

Soll ich alle diese Werte jetzt ausdrucken?

Es scheint, als gäbe es noch viel mehr zu tun. Schließlich steht dort alles klar und deutlich geschrieben.

Verstehen und sehen Sie, was in Ihrem Array enthalten ist, unmittelbar nachdem es mit Optionsscheindaten "gefüllt" wurde? Nein. Sie wissen es nicht, Sie vermuten es nur. SPRINT den Inhalt aller Array-Zellen, nicht mit Ihrem pr(), sondern mit dem Standard Print() und versuchen Sie, in das Protokoll des Testers zu schauen und zu sehen, was Sie in dem Array haben, in jeder Zelle, direkt nachdem es gefüllt ist. Wenn Sie sicher sind, dass der Inhalt des Arrays mit Ihren Vorstellungen übereinstimmt, drucken Sie ihn mit Ihrem pr() aus. Wenn Sie nicht die gleichen Ergebnisse erhalten, liegt es an Ihrem pr(), wenn die Daten übereinstimmen, suchen Sie im nächsten Schritt nach einem Fehler.
 
Es gibt losbezogene Fehler im Logbuch(OrderSend-Fehler 4051). Lösen Sie dieses Problem. Vielleicht hilft das ja. Dann werden wir sehen, was passiert.
 
hoz:
Es gibt losbezogene Fehler im Logbuch (OrderSend-Fehler 4051). Lösen Sie dieses Problem. Vielleicht hilft es ja. Und dann werden wir sehen.

Schauen Sie sich die Tanks an, starten Sie neu, vielleicht hilft das ja... :-)

P.S. Ich bin hier nur freundlich.

 
Dies ist ein eindimensionales Array, dessen Größe variieren kann.
Wie kann man alle möglichen Kombinationen von Array-Elementen miteinander durchlaufen?
Die Reihenfolge der Elemente spielt keine Rolle, d.h. 123==213==321...

Hier ist ein Beispiel für ein Array mit 4 Elementen:
[4] <=> { 1 2 3 4 }

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