[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

 
7777877: Parameterübergabe aus der Parameterübergabe durch Referenz?

hier ist die Parameterübergabe per Referenz, erstellen Sie ein Skript wie dieses:

int start(){
   int res = 999;
   Print("func = ",func(res)," , res = ",res);
return(0);
}
//__________________________
int func(int &a){
   a = 10;
   return(a*10);
}

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

 
IgorM:

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?

 
7777877: Wenn ein Parameter per Referenz an eine Funktion übergeben wird, kann sich der Wert des Parameters innerhalb der ausgewerteten Funktion ändern
ja, das tut es
 
IgorM:
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?

 
oleg_felix:

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
}
}

 
oDin48:
  • Leute, wie kann ich Bibliotheken verbinden? Wenn ich versuche, den EA zu kompilieren, gibt er Folgendes aus

  • 'strlib.mqh' - kann die Programmdatei nicht öffnen

A die Linie finden:
#include <strlib.mgh>

und ersetzen durch:

#include <stdlib.mgh>
 
7777877:

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?

Der allgemeine Sinn der Übergabe von Parametern per Verweis besteht darin, nicht die Variable selbst, sondern ihre Adresse in den Parameter zu übertragen. Im umgekehrten Fall wird eine Kopie der Variablen an den Parameter übergeben.
Grund der Beschwerde: