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

 
lufer:
Dies löst das Problem nicht, jetzt scheint etwas inOnTick() falsch zu sein- wenn ich den EA im Terminalfenster lade, passiert nichts, und wenn ich versuche, ihn zu löschen, bleibt das Terminal sehr lange stehen und löscht ihn dann nach einiger Zeit. Ich habe versucht, einigen Elementen manuell Werte zuzuweisen, alles ist in Ordnung. Irgendetwas an der Array-Initialisierungsschleife scheint falsch zu sein.

Was meinen Sie damit, dass es "keine Lösung" ist? Sie schieben Daten mit doppelter Genauigkeit unter 1 in das Int-Array, die Ausgabe wird natürlich Nullen enthalten. Nun, die Schleife war auch verkrüppelt.

Dieser Code sollte funktionieren:

#property strict

extern int N=100;                       // Количество баров

double Mas[];                             // Объявление массива
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+

int OnInit()
  { 
    ArrayResize(Mas,N);
     return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
  {

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick()
  {                                       
       for(int i=0; i<N; i++)                     // Цикл записи данных
         {                      
    
              Mas[i]=iATR(NULL,0,5,i+1);           // Вычисление значений          
         }
           Print(DoubleToStr(Mas[0],_Digits),"," ,DoubleToStr(Mas[50],_Digits),"," ,DoubleToStr(Mas[99],_Digits));      // Вывод значений
  }
 
evillive:

Was meinen Sie mit "funktioniert nicht"? Sie schieben Double-Daten kleiner als 1 in das int-Array, natürlich wird die Ausgabe Nullen sein. Und die Schleife war ein einziger Schlamassel.

Diese Art von Code sollte funktionieren:

Natürlich haben Sie absolut Recht überdouble Mas[] (Ich habe berücksichtigt, dass ATP Punkte in Integer-Werte aus irgendeinem Grund zählt). Der Punkt war, dass es nicht angezeigt, auch nachdem ich den Array-Typ geändert hatte, aber ich habe meinen Fehler erkannt. Herzlichen Dank für Ihre Hilfe!
 
Ich möchte kein eigenes Thema erstellen, also frage ich hier. In der Dokumentation zur Funktion OrderSelect steht, daß alle Auftragsdaten in die "Programmumgebung" kopiert werden. Bezieht sie sich nur auf die aktuelle Karte oder auf das gesamte Terminal? Ich stelle diese Frage, weil ich ein Problem damit habe, gleichzeitig mit mehreren Aufträgen aus verschiedenen Charts zu arbeiten, die denselben EA installiert haben.
 
.roman.:
Ich möchte kein eigenes Thema erstellen, also frage ich hier. In der Dokumentation zur Funktion OrderSelect steht, daß alle Auftragsdaten in die "Programmumgebung" kopiert werden. Bezieht sie sich nur auf die aktuelle Karte oder auf das gesamte Terminal? Ich stelle diese Frage, weil ich ein Problem habe, gleichzeitig mit mehreren Aufträgen aus verschiedenen Charts mit demselben installierten EA zu arbeiten.
Diese Aufträge sind für alle Benutzeranwendungen verfügbar, die in dem Terminal laufen, in dem dieser Auftrag geöffnet ist.
 
evillive:
Diese Aufträge stehen allen Benutzerprogrammen zur Verfügung, die in dem Terminal laufen, in dem der Auftrag geöffnet ist.
Wie kann man dann verhindern, dass die Daten eines anderen Auftrags, der gleichzeitig aus einem anderen Diagramm ausgewählt wurde, fälschlicherweise in die Softwareumgebung kopiert werden?
 
.roman.:
Wie kann man dann verhindern, dass Daten einer anderen Bestellung, die gleichzeitig aus einem anderen Diagramm ausgewählt wurde, fälschlicherweise in die Softwareumgebung kopiert werden?
Die Daten verschiedener Aufträge überschneiden sich in keiner Weise, es gibt nichts, wogegen man sich schützen könnte.
 
evillive:
Die Daten der verschiedenen Aufträge überschneiden sich in keiner Weise und es gibt nichts, wovor man sich schützen müsste.

Wir sprechen also über unterschiedliche Dinge. Ich bezog mich ursprünglich auf die Frage, was die "Softwareumgebung" ist, die in der Dokumentation beschrieben wird. Ist damit das gesamte Terminal gemeint?

Konkret bestand mein Problem darin, dass trotz des ausschließlichen Vergleichs von OrderSymbol und Symbol in der OrderSelect-Funktion ein Problem auftrat, wenn Daten (Eröffnungszeit der Order, Eröffnungskurs usw.) aus einem Diagramm eines Paares angezeigt werden konnten. Das heißt, ich frage mich, ist es möglich, dass während der OrderSelect-Funktion des EA auf EURUSD, zum Beispiel, der EA wird auch beginnen, mit der OrderSelect-Funktion auf ein anderes Währungspaar und die Daten der Bestellung aus dem letzten Aufruf dieser Funktion wird in die "Programmumgebung" geladen werden?

 
.roman.:

Wir sprechen also über unterschiedliche Dinge. Ich bezog mich ursprünglich auf die Frage, was die "Softwareumgebung" ist, die in der Dokumentation beschrieben wird. Ist damit das gesamte Terminal gemeint?

Konkret bestand mein Problem darin, dass trotz des ausschließlichen Vergleichs von OrderSymbol und Symbol in der OrderSelect-Funktion ein Problem auftrat, wenn Daten (Eröffnungszeit der Order, Eröffnungskurs usw.) aus einem Diagramm eines Paares angezeigt werden konnten. Ich frage mich also, ob es möglich ist, dass der EA, während die OrderSelect-Funktion z. B. für EURUSD ausgeführt wird, auch mit der OrderSelect-Funktion für ein anderes Währungspaar arbeitet und die Auftragsdaten vom letzten Aufruf dieser Funktion in die "Programmumgebung" geladen werden?

Ich brauche den Code. Der Text enthält einen Fehler
 
.roman.:

Wir sprechen also über unterschiedliche Dinge. Ich bezog mich ursprünglich auf die Frage, was die "Softwareumgebung" ist, die in der Dokumentation beschrieben wird. Ist damit das gesamte Terminal gemeint?

Konkret bestand mein Problem darin, dass trotz des ausschließlichen Vergleichs von OrderSymbol und Symbol in der OrderSelect-Funktion ein Problem auftrat, wenn Daten (Eröffnungszeit der Order, Eröffnungskurs usw.) aus einem Diagramm eines Paares angezeigt werden konnten. Das heißt, ich frage mich, ist es möglich, dass während der OrderSelect-Funktion des EA auf EURUSD, zum Beispiel, der EA wird auch beginnen, mit der OrderSelect-Funktion auf ein anderes Währungspaar und die Daten der Bestellung aus dem letzten Aufruf dieser Funktion wird in die "Programmumgebung" geladen werden?

Jeder Auftrag hat eindeutige Parameter, die ihn deutlich von anderen Aufträgen unterscheiden. Dies sind das Ticket und der Zeitpunkt des Öffnens (oder Schließens, wenn Sie die Historie durchsuchen). Sie sind nur für ein einziges Handelskonto bestimmt, genau wie das Netzhautmuster.

Es reicht nicht aus, die Bestellungmit der Funktion OrderSelect auszuwählen, sondern wir müssen prüfen, ob es die richtige Bestellung ist oder ob wir die nächste auswählen müssen.

 
Vinin:
Sie brauchen einen Code. Sie enthält einen Fehler
for(int i=OrdersTotal()-1;i>=0;i--)
        {
            if(OrderSelect(i,SELECT_BY_POS) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
               {
                  if(OrderType()==OP_BUY)
                     {
                        double openPrice = 0;
                        openPrice = OrderOpenPrice();
                        if(Ask>openPrice)
                           {
                              Print("OrderSymbol ",OrderSymbol()," OrderTicket ",OrderTicket()," OrderOpenPrice ",OrderOpenPrice());
                           }
                     }
                  if(OrderType()==OP_SELL)
                     {
                        double openPrice = 0;
                        openPrice = OrderOpenPrice();
                        if(Bid<openPrice)
                           {
                              Print("OrderSymbol ",OrderSymbol()," OrderTicket ",OrderTicket()," OrderOpenPrice ",OrderOpenPrice());
                           }
                     }
               }
        }

Unnötige (für das Problem irrelevante) Berechnungen wurden entfernt. Die Drucker wurden dem Code hinzugefügt, um das Problem zu verdeutlichen. Trotz des Vergleichs des Ordersymbols mit dem Symbol, auf dem der EA offen ist, kann er dieses anzeigen (aus dem osi-Chart die Daten der Order auf den Euro nehmen, zum Beispiel, wie in diesem Fall):