[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 60
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
hier ist die Parameterübergabe per Referenz, erstellen Sie ein Skript wie dieses:
Die Registerkarte Experte zeigt den folgenden Eintrag: 2012.04.08 11:19:35 test EURUSD,M5: func = 100, res = 10
und versuchen Sie, die Frage zu beantworten, warum wir res = 999 zugewiesen haben; und das Protokoll erhielt res = 10
Können Sie mir sagen, wie ich die Bibliotheken verbinden kann? Sie sind in den mqh-Dateien vorhanden, aber beim Kopieren geben sie
'strlib.mqh' - kann die Programmdatei nicht öffnen
hier ist die Parameterübergabe aus dem Link, machen Sie ein Skript wie dieses:
die Registerkarte Experte zeigt folgenden Eintrag: 2012.04.08 11:19:35 test EURUSD,M5: func = 100, res = 10
Und versuchen Sie, die Frage zu beantworten, warum wir res = 999 zugewiesen haben, aber im Protokoll res = 10 erhalten
Hier ist meine Erklärung:
Die Funktion Print ruft die Benutzerfunktion func auf. Der Parameter res=999 wird an die Funktion func übergeben. Wenn die Funktion func selbst ausgewertet wird, wird der Parameter a=10 verwendet. Der Wert a*10=100 wird an die Stelle zurückgegeben, an der die Funktion func aufgerufen wird. Da wir am Ende res=10 erhalten, schließe ich daraus, dass die Übergabe eines Parameters per Referenz Folgendes bedeutet: Sie können der aufgerufenen Funktion (in diesem Fall func) einen beliebigen Wert des entsprechenden Typs (in diesem Fall res=999) übergeben, aber die Funktion selbst wird bereits mit diesem Wert ausgewertet (d.h.(d.h. in unserem Fall mit a=10), die in der Funktion selbst initialisiert wird (was in einem bestimmten Fall auch mit dem Wert übereinstimmen kann, der an die aufgerufene Funktion übergeben wird, d.h. in diesem Fall an func). Und bei der Übergabe des in der Funktion berechneten Wertes (in diesem Fall an func) zurück an den Funktionsaufrufstring hat die Variable (in diesem Fall res) bereits einen anderen Wert als vorher, nämlich den Wert, den sie bei der Berechnung der Funktion func erhalten hat (d.h. in diesem Fall res=10). Wenn also ein Parameter per Verweis in eine Funktion übergeben wird, kann sich der Wert des Parameters innerhalb einer ausgewerteten Funktion ändern, und nachdem der berechnete Wert in der Zeichenkette des Funktionsaufrufs zurückgegeben wird, hat dieser Parameter einen GEÄNDERTEN (in einem bestimmten Fall den gleichen) Wert, den er bei der Berechnung der aufgerufenen Funktion erhalten hat.
Habe ich es richtig verstanden?
Das ist richtig.
Grosse danke schoen!!!
Bitte sagen Sie mir, ich möchte eine Änderung der Reihenfolge zu machen, so dass die EA den Wert der Stop-Loss zu der Zeit, die ich angeben, ändern, aber es beginnt zu betrügen.
Hier ist mein Code
extern int tp = 350; // Gewinnwert Takeprofit
extern int sl = 400; // Verlustwert Stoploss
int ticket;
int start()
{
//----
if (OrdersTotal()==0 && Hour( )==2 && Minute( )==0) // Order wird um 2:00 Terminalzeit eröffnet
ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,Ask+sl*Point,Ask-tp*Point,"",123,0,Red);
//----
if (OrdersTotal()==1 && Hour( )==3 && Minute( )==0) // hier setze ich eine Bedingung, dass die Bestellung mit dem ausgewählten Ticket um 3h00 Terminalzeit geändert werden muss. Zeit.
{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); // hier habe ich die Orderauswahl angegeben, Handel
OrderModify(ticket, OrderOpenPrice(), Ask+300*Point, OrderTakeProfit(),0,Blue); // modifiziere die Order mit dem ausgewählten Ticket, vom Preis der offenen Position, ändere den SL-Wert in Punkten, TP unverändert
}
//--
}
Während des Tests gibt es ein Problem: Der Expert Advisor beginnt, eine Menge nutzloser Änderungen in der Zeit von 3 Uhr 00 Minuten bis 3 59 Minuten vorzunehmen. EA täuscht herum und nimmt jede Sekunde Änderungen vor! Warum? Was ist mit dem Code falsch?
Bitte sagen Sie mir, ich möchte eine Änderung der Bestellung zu machen, so dass die EA den Wert der Stop-Loss zu der Zeit, die ich angeben, ändern, aber es beginnt herum zu täuschen.
Hier ist mein Code
extern int tp = 350; // Gewinnmitnahme-Wert
extern int sl = 400; // Stop-Loss-Wert
int-Ticket;
int start()
{
//----
if (OrdersTotal()==0 && Hour( )==2 && Minute( )==0) // Auftrag wird um 2:00 Uhr Terminalzeit eröffnet
ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,Ask+sl*Point,Ask-tp*Point,"",123,0,Red);
//----
if (OrdersTotal()==1 && Hour( )==3 && Minute( )==0) // hier habe ich eine Bedingung angegeben, dass die Bestellung mit dem ausgewählten Ticket um 15 Uhr entsprechend der Terminalzeit geändert werden muss.
{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); // hier habe ich die Orderauswahl angegeben, Handel
OrderModify(ticket, OrderOpenPrice(), Ask+300*Point, OrderTakeProfit(),0,Blue); // modifiziert die Order mit dem ausgewählten Ticket, ausgehend vom Preis der offenen Position, ändert den SL-Wert in Punkten, lässt den TP unverändert
}
//--
}
Beim Testen tritt ein Problem auf: Der Expert Advisor fängt an, innerhalb der Zeit von 3 Uhr 00 Minuten bis 3 Uhr 59 eine Menge nutzloser Änderungen vorzunehmen. Der Expert Advisor täuscht herum und nimmt jede Sekunde Änderungen vor! WARUM? Was stimmt nicht mit dem Code?
Warum auf Zeit..... auf Gewinn!!!
Wie schreibe ich die richtige Funktion, um einen offenen Auftrag in einem ECN-Konto zu ändern, in dem man nicht gleichzeitig Stop und Profit setzen kann, sondern dies durch Änderung tun muss.
Das Problem ist, dass etwas nicht stimmt, bitte helfen Sie mir, den Fehler zu finden.
extern int tp = 350; // Gewinnwert Takeprofit
extern int sl = 400; // Verlustwert Stoploss
int ticket;
int start()
{
//----
if (OrdersTotal()==0 && Close[1]<Open[1] && High[1]<Bid) )==0) // Order öffnet zu Bedingungen
ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,0,0t,",123,0,Red);
//----
if (OrdersTotal()==1 ) // hier habe ich eine Bedingung gesetzt, die einen Auftrag mit einem einzigen ausgewählten Auftrag ändert.
{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); // hier habe ich die Orderauswahl angegeben, Transaktionen
OrderModify(ticket, OrderOpenPrice(), Ask+sl*Point,Ask-tp*Point,0,Blue); // modifiziere die Order mit dem ausgewählten Ticket, ausgehend vom Preis der offenen Position, ändere den SL-Wert in Punkten, lasse TP unverändert
}
}
#include <strlib.mgh>
und ersetzen durch:
#include <stdlib.mgh>
Leute, bitte erklärt in einfacher Form, was eine Parameterübergabe per Referenz ist. Ich habe die Dokumentation gelesen, aber nur verstanden, dass es möglich ist und nach der Variablenidentifikation ein Modifikator & gesetzt werden muss. Es wäre toll, wenn die Erklärung von einem kleinen Programm mit Erklärungen begleitet würde... Was ist der Unterschied zwischen der üblichen Parameterübergabe und der Übergabe von Parametern per Referenz?