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

 
LRA:
Die Frage ist z. B. für ein Ausbildungssystem relevant. Um die Verteilung zu erhalten, installieren Sie MT4 auf einem Flash-Laufwerk. Oder kopieren Sie den Terminal-Ordner auf ein Flash-Laufwerk. Dieser Ordner kann dann beliebig oft auf beliebig viele Computer kopiert werden. Eine solche Verteilung ist nützlich für Backup-, Sicherungs- und Wiederherstellungszwecke... Starten Sie das Terminal am besten mit dem Schalter /portable, sonst werden auf Ihrem Computer lästige, nutzlose Ordner angelegt. Diese Frage wird in einem anderen Thema unter folgendem Link ausführlicher behandelt

Wie kann man sie einrichten?

Das Installationsprogramm, das ich herunterlade, installiert nichts aus dem Internet.

 

Wenn ich das Installationsprogramm starte, erscheint ein Fenster mit einer Anzeige für den Dateidownload.

Dann erscheint ein weiteres Fenster

Das Installationsprogramm fordert mich auf, Proxy-Einstellungen anzugeben, die ich nicht habe.

 
 
polpolpol:

Wenn ich das Installationsprogramm starte, erscheint ein Fenster mit einer Anzeige für den Dateidownload.

Dann erscheint ein weiteres Fenster

Das Installationsprogramm fordert mich auf, Proxy-Einstellungen anzugeben, die ich nicht habe.

Ich muss das Antivirenprogramm deaktivieren und es aus dem Speicher zurücksetzen.
 

Hallo, ist der folgende Eintrag korrekt? Die Funktion sollte, wenn sie aufgerufen wird, alle schwebenden Aufträge löschen.

void DeletedOrders()
         {
         for (int i=0; i<=OrdersTotal(), i++)
             {
             if (OrderSelect(i,SELECT_BY_POS))
                type=OrderType();
             if (type==2 || type==3 || type==4 || type==5)
                OrderDelete(i,clrNONE);
             }
         return();
         }  
 
bobrush:

Hallo, ist der folgende Eintrag korrekt? Die Funktion sollte alle ausstehenden Aufträge löschen, wenn sie aufgerufen wird.

Nein, das ist natürlich nicht der Fall. Wir sollten in der Schleife das Ticket und nicht die Bestellnummer angeben:OrderDelete(OrderTicket(),clrNONE);

Und die Bedingung ist völlig ausreichend:if(type>1).

Ich empfehle Ihnen auch, den Fehlercode öfter auszudrucken - das hilft.

Oh ja, Funktionen vom Typ "void" dürfen nichts zurückgeben, wir brauchen return() nicht bei normaler Ausführung, sondern nur, wenn eine Bedingung zum vorzeitigen Verlassen der Funktion führt.

 
bobrush:

Hallo, ist der folgende Eintrag korrekt? Die Funktion sollte, wenn sie aufgerufen wird, alle ausstehenden Aufträge löschen.

Beachten Sie, dass es noch undokumentierte Auftragsarten mit type=6 bzw. mit type=7 für Vorgänge über Saldo und über Kontoguthaben gibt.

Anstelle von i<=OrdersTotal() wäre i<OrdersTotal() besser, ohne OrderSelect unnötig aufzurufen

Und die Schleife muss vom Ende zum Anfang durchlaufen werden, andernfalls wird das ehemalige i+1-te Element an der i-ten Stelle übersprungen, wenn das Ordnungsarray Zeit hat, aktualisiert zu werden, nachdem das i-te Element darin entfernt worden ist. Es ist besser, vom Ende her zu beginnen.

Wenn wir bedenken, dass die Entwickler keine Ordnungsmäßigkeit im Array der Bestellungen garantieren, können wir nicht wirklich garantieren, dass die Reihenfolge der Bestellungen in ihrem Array nach dem Löschen eines von ihnen gleich bleibt. Das wäre recht zuverlässig. Wir durchlaufen die Schleife, bis der schwebende Auftrag erkannt wird. Die Schleife wird abgebrochen. Löschen Sie den gefundenen Auftrag. Wir warten auf Sleep (100), um das Array der Aufträge zu aktualisieren. Dann kehren wir zur Schleife zurück, um den ausstehenden Auftrag zu finden, aber mit einem neuen Array von Aufträgen. Wir führen eine vollständige Suche durch, aber nicht, indem wir die vorherige Schleife fortsetzen. Die Dreierschleife (Suchschleife, Löschung eines Auftrags, Warten auf die Aktualisierung des Arrays), bis der ausstehende Auftrag nicht gefunden wird.

 
evillive:

Nein, natürlich nicht. Das Ticket muss angegeben werden, nicht die Bestellnummer in der Schleife:OrderDelete(OrderTicket(),clrNONE);

Und die Bedingung ist völlig ausreichend:if(type>1).

Ich empfehle Ihnen auch, den Fehlercode öfter auszudrucken - das hilft.

Oh ja, Funktionen vom Typ "void" dürfen nichts zurückgeben, wir brauchen return() nicht bei normaler Ausführung, sondern nur, wenn eine Bedingung zum vorzeitigen Verlassen der Funktion führt.


Danke!
 
Vlad143:

Beachten Sie, dass es noch undokumentierte Auftragsarten mit type=6 bzw. mit type=7 für Transaktionen über Saldo und über Kontoguthaben gibt.

Anstelle von i<=OrdersTotal() wäre i<OrdersTotal() besser, ohne OrderSelect unnötig aufzurufen

Und die Schleife muss vom Ende zum Anfang durchlaufen werden, andernfalls wird das ehemalige i+1-te Element an der i-ten Stelle übersprungen, wenn das Ordnungsarray Zeit hat, aktualisiert zu werden, nachdem das i-te Element darin entfernt worden ist. Es ist besser, vom Ende her zu beginnen.

Wenn wir bedenken, dass die Entwickler keine Ordnungsmäßigkeit im Array der Bestellungen garantieren, können wir nicht wirklich garantieren, dass die Reihenfolge der Bestellungen in ihrem Array nach dem Löschen eines von ihnen gleich bleibt. Das wäre recht zuverlässig. Wir durchlaufen die Schleife, bis der schwebende Auftrag erkannt wird. Die Schleife wird abgebrochen. Löschen Sie den gefundenen Auftrag. Wir warten auf Sleep (100), um das Array der Aufträge zu aktualisieren. Dann kehren wir zur Schleife zurück, um den ausstehenden Auftrag zu finden, aber mit einem neuen Array von Aufträgen. Wir führen eine vollständige Suche durch, aber nicht, indem wir die vorherige Schleife fortsetzen. Die Dreierschleife (Suchschleife, Löschung eines Auftrags, Warten auf die Aktualisierung des Arrays), bis der ausstehende Auftrag nicht gefunden wird.


D.h., for(OrdersTotal()-1,i=0,i--) und am Ende der Schleife, sleep und break?
 
Vlad143: Wir warten auf Sleep (100), um die Liste der Aufträge zu aktualisieren.
IMHO, IMHO, meine persönliche Meinung statt Sleep (100) ist es besser while(!RefreshRates()); Semikolon am Ende.