Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 402
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
Mausklick-Ereignis auf grafisches Objekt
CHARTEVENT_OBJECT_CLICK
X-Koordinate
Y-Koordinate
Name des grafischen Objekts, in dem das Ereignis aufgetreten ist
Ach, ich glaube, ich habe alles verstanden.)
Vielen Dank für die Hilfe!
Ich weiß nicht, wie ich das Ergebnis "r" mit einem Puffer verknüpfen kann, um es in einem Diagramm anzuzeigen, bitte um Rat.
Ich kann die Beispiele in den Lehrbüchern nicht verstehen, ich habe die Leute gefragt
Sie schreiben - "Schreiben Sie den Wert von "r" in den Puffer, und er wird im Diagramm erscheinen" und "Normalerweise schreibt man in den Puffer durch eine for-Schleife. "
aber das sagt mir gar nichts!
Ein Ergebnis ist nur der Buchstabe "r" und das war's, ich kann ihn nirgends finden.
Und noch eine Sache
wie man zum Beispiel das Ergebnis "r" glättet.
Vielen Dank für Ihre Aufmerksamkeit!Worin besteht der Fehler? Wenn die Funktion im Tester ausgeführt wird, löscht sie den ausstehenden Auftrag und manchmal nicht. Und warum? Das Funktionsprinzip ist das folgende: Wenn der Kaufauftrag durch TP geschlossen wird, wird das BuyLimit aufgehoben. Bitte beraten
Worin besteht der Fehler? Wenn die Funktion im Tester ausgeführt wird, löscht sie den ausstehenden Auftrag und manchmal nicht. Und warum? Das Funktionsprinzip ist das folgende: Wenn der Kaufauftrag durch TP geschlossen wird, wird das BuyLimit aufgehoben. Bitte beraten Sie mich.
OrdersTotal() != OrdersHistoryTotal()
Ich danke Ihnen.
Hallo zusammen.
Ich habe einen einfachen Expert Advisor auf der Basis von Stochstick erstellt (verkauft bei Top-Peak, kauft bei Bottom-Peak), und der Compiler gibt einen Fehler auf der Stelle.
Kann mir jemand sagen, woran das liegt und was dieser Fehler bedeutet? Zuerst dachte ich, ich hätte vergessen, irgendwo eine Klammer zu setzen.
Aber nein, ich habe es mehrmals überprüft und es scheint alles in Ordnung zu sein mit den Klammern. Ich werde Ihnen für Ihre Hilfe sehr dankbar sein.
Hier sind die Fehler, die der Compiler erzeugt: ')' - nicht alle Kontrollpfade liefern einen Wert Stohastic-Signals-33.mq4 177 3
Hier ist der Expert Advisor selbst und eine mq4-Datei angehängt:
Bitte geben Sie an, wie Sie den Expert Advisor an diese Datei anhängen können (im Editor mit farbigen Buchstaben)
//+------------------------------------------------------------------+
//| Stohastische-Signale-33.mq4
//| Copyright 2017, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#Eigenschaft Version "1.00"
#Eigenschaft streng
//+------------------------------------------------------------------+
bool New_Bar=false; // Kennzeichen für einen neuen Balken.
extern double H_line=80; // Obere (überkaufte) Stochastiklinie
extern double L_line=20; // Untere (überverkaufte) Linie der Stochastik
extern inttern Schlupf=2; // Schlupf
extern int SL; // SL des zu setzenden Auftrags
extern int TP; // TP des zu setzenden Auftrags
extern double Lts; //Losgröße des zu setzenden Auftrags
bool B_Flag=false; // Signalflagge für BUY
S_Flag=false, // Kennzeichen für ein SELL-Signal
ORD_Buy=false, // Offene Kaufposition kennzeichnen
ORD_Sell=false; // Offene Verkaufsposition kennzeichnen
bool Work=true; // Flagge, die den Experten arbeiten lässt. true-kein kritischer Fehler, false-existent.
string Symb; // Name des Finanzinstruments
int Crit_Error=11111111; // Anzahl der kritischen Fehler
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion |
//+------------------------------------------------------------------+
void OnTick()
{
int
Total, // Anzahl der Aufträge im Fenster
Tip=-1, // Auftragsart ausgewählt (B=0,S=1)
Ticket; // Bestellnummer
doppelt
M_1, M_2, M_3, // MAIN-Wert bei 1, 2 und 3 Takten
Lot; // Anzahl der Lose im ausgewählten Auftrag
bool Ans_Close; // Flagge für erfolgreiche Auftragsschließung (1-geschlossen, 0-nicht geschlossen)
bool Ans_Open; // Kennzeichen, ob der Auftrag erfolgreich geöffnet wurde (1-geschlossen, 0-nicht geöffnet)
//--------------------------------------------------------------- 1 --
// Prüfen Sie auf einen kritischen Fehler
if(Arbeit==false) // Kritischer Fehler
{
Alert("Kritischer Fehler: Expert Advisor funktioniert nicht;)
return; // Beenden von start()
}
//--------------------------------------------------------------- 2 --
// Neuer Balken
Fun_New_Bar(); // Aufruf der Funktion
if (Neuer_Balken==false) // Wenn der Balken nicht neu ist
return; // ...dann exit
//------------------------------------------------------------- 3 --
// Zählen der Aufträge
Symb=Symbol(); // Name des Finanzinstruments.
Total=0; // Anzahl der Aufträge
for(int i=1; i<=OrdersTotal(); i++) // Auftragsschleife
{
if(OrderSelect(i-1,SELECT_BY_POS)==true) // Wenn die folgenden
{ // Auftragsanalyse:
if (OrderSymbol()!=Symb)continue; // Nicht unser Finanzinstrument
Ticket=OrderTicket(); // Bestellnummer ausgewählt.
Tip =OrderType(); // Typ der ausgewählten Bestellung.
Lot=OrderLots(); // Anzahl der Lose
}
sonst
{
Alert("OrderSelect() gab einen Fehler zurück - ",GetLastError()); // Wenn die Bestellung nicht ausgewählt werden konnte, dann .
return; // Beenden
}
}
//------------------------------------------------------------- 4 --
// Handelskriterien Situationsanalyse
M_1=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,1);// 1 bar
M_2=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,2);// 2 bar
M_3=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,3);// 3 bar
//------------------------------------------------------------- 5 --
if(M_2>=H_line) // wenn Stohastic die überkaufte Linie überschritten hat
{
if(M_3 <= M_2 && M_2 > M_1) // Stohastic hat die überkaufte Linie überschritten {...
{
if(S_Flag==true) // Wenn (Verkaufsposition eröffnet, dann ...
return; // Beenden von start()
// Wenn die Position Verkaufen nicht geöffnet ist, dann ...
S_Flag=true; // wir setzen ein Flag, das anzeigt, dass das Signal zum Verkaufen erschienen ist
B_Flag=false; // prüfen, ob das Signal zum KAUFEN nicht erschienen ist
if(ORD_Buy==true) // Wenn ein Kaufauftrag eröffnet wurde,...
{
if(Tip!=0) // Prüfung: Auftragstyp entspricht nicht dem offenen Auftrag...
{
Work=false; //Der Expert Advisor wird nicht funktionieren
Alert("The order TYPE does not correspond to the open order FLAG. Exit start."); // Wenn die Übereinstimmung nicht existiert, hört der Expert Advisor auf zu arbeiten
return; // Beenden von Start
}
Ans_Close=Close_Order(Ticket,Lot,Slippage,Tip); // Schließt den offenen Kaufauftrag
if(Ans_Close==false) // Wenn das Schließen fehlgeschlagen ist, dann...
{
Alert("Die Bestellung konnte nicht geschlossen werden. Der Expert Advisor funktioniert nicht mehr.\n Kritische Fehlernummer ", Crit_Error);
return; // Beenden
}
}
Ans_Open=Open_Order(Symb,Lts,SL,TP,1); // OPEN POINTS
if(Ans_Open==false) // wenn Verkauf nicht geöffnet werden konnte
{
Alert("Die Bestellung konnte nicht geöffnet werden. Der Expert Advisor funktioniert nicht mehr.\n Kritische Fehlernummer ", Crit_Error);
return; // Beenden von Start
} // Wenn Verkauf erfolgreich geöffnet wurde
ORD_Sell=true; // wir setzen ein Flag, dass eine SHORT-Position eröffnet wurde
ORD_Buy=false; // Markiert die LONG-Position als weg
}
return; // Beenden des Starts
}
//------------------------------------------------------------------------ 6 --
if(M_2<=L_line) // Wenn die Stohastik die überverkaufte Linie überschritten hat
{
if(M_3 >= M_2 && M_2 < M_1) // Untere Spitze erscheint (BUY CALL)
{
if(B_Flag==true) // Wenn Kaufposition offen ist
return; // Beenden von start()
// Wenn keine Kaufposition eröffnet wird, dann...
B_Flag=true; // Flagge positiv für eröffnete Kaufposition
S_Flag=false; // Prüfen, dass kein SELL-Signal vorhanden ist
if(ORD_Sell==true) // Wenn eine offene Verkaufsorder vorliegt,...
{
if(Tip!=1) // Prüfung: Auftragstyp entspricht nicht dem offenen Auftrag...
{
Work=false; //Der Expert Advisor wird nicht funktionieren
Alert("The order TYPE does not correspond to the open order FLAG. Exit start."); // Wenn die Übereinstimmung nicht existiert, hört der Expert Advisor auf zu arbeiten
return; // Beenden von Start
}
Ans_Close=Close_Order(Ticket,Lot,Slippage,Tip); // Schließt die offene Verkaufsorder
if(Ans_Close==false) // Wenn das Schließen fehlgeschlagen ist
{
Alert("Die Bestellung konnte nicht geschlossen werden. Der Expert Advisor funktioniert nicht mehr.\n Kritische Fehlernummer ", Crit_Error);
return; // Beenden
}
}
Ans_Open=Open_Order(Symb,Lts,SL,TP,0); // OPEN LONG POSITION
if(Ans_Open==false) // wenn das Öffnen fehlgeschlagen ist Kaufen
{
Alert("Die Bestellung konnte nicht geöffnet werden. Der Expert Advisor funktioniert nicht mehr.\n Kritische Fehlernummer ", Crit_Error);
return; // Beenden von Start
} // Wenn Kaufauftrag erfolgreich eröffnet wurde
ORD_Sell=false; // prüfen, dass keine Short-Position besteht
ORD_Buy=true; // Offene LONG-Position kennzeichnen
}
return; // Beenden des Starts
}
}
//+------------------------------------------------------------------ 7 --
void Fun_New_Bar() // Die Erkennung fie .
{ // ... neuer Balken.
static datetime New_Time=0; // Zeit des aktuellen Taktes
New_Bar=false; // Kein neuer Balken
if(Neue_Zeit!=Zeit[0]) // Vergleichen Sie die Zeit
{
Neue_Zeit=Zeit[0]; // Jetzt ist die Zeit
New_Bar=true; // Neuer Balken wird erfasst
}
}
//--------------------------------------------------------------- 8 --
bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // Auftrag schließen fie
{
double Close_Price=0; // Schlusskurs des Auftrags
while(true)
{
RefreshRates(); // Daten aktualisieren
if(F_Tip==0) // Wenn der Auftrag Kaufen lautet, ...
Close_Price=Bid; // Schlusskurs Bid
Close_Price=Ask; // Wenn die Order Sell ist, schließt der Preis Ask
bool Ans_Close=OrderClose(F_Ticket,F_Lot,Close_Price,F_Slippage); // Kauf oder Verkauf schließen
if (Ans_Close==true) // Es hat funktioniert :)
return(true); // Beenden der Schließfunktion
Crit_Error=GetLastError(); // Fehlernummer festlegen
if (Fun_Error(Crit_Error)==1) // Fehlerbehandlung
continue; // Retry; // Versuchen Sie es erneut.
return(false); // Beenden der Funktion
}
}
//--------------------------------------------------------------- 9 --
//Bestellung offen
bool Open_Order(string F_Symb,double F_Lts,int F_SL,int F_TP,int F_Tip)
{
double Open_Price; //offener Preis
string Tip_Deal; // Handelsrichtung(Kauf oder Verkauf)
double f_sl; // Stop-Loss-Auftrag
double f_tp; // Gewinnmitnahme
int Ticket; // Ticket des offenen Auftrags
while(true) // Auftrag zum Schließen der Schleife.
{
RefreshRates(); // Daten aktualisieren
if(F_Tip==1) // SELL öffnen...
{
Offener_Preis=Gebot;
Tip_Deal="OP_SELL";
f_sl=NormalizeDouble(Bid+F_SL*Point,Digits);
f_tp=NormalizeDouble(Bid-F_TP*Point,Digits);
}
//-------------------------------- Wenn Sie BUY öffnen wollen, dann...
Offener_Preis=Ask;
Tip_Deal="OP_BUY";
f_sl=NormalizeDouble(Bid+F_SL*Point,Digits);
f_tp=NormalizeDouble(Bid-F_TP*Point,Digits);
Ticket=OrderSend(F_Symb,Tip_Deal,F_Lts,Open_Price,2,f_sl,f_tp);//open ORDER
if (Ticket > 0) // es hat funktioniert :)
return(true); //Beenden der Funktion
Crit_Error=GetLastError(); // Fehlernummer übertragen
if (Fun_Error(Crit_Error)==1) // Fehlerbehandlung
continue; // Retry; // Nochmals versuchen.
return(false); // Beenden der Funktion
}
}
//--------------------------------------------------------------- 10 --
int Fun_Error(int Error) //Funktionsfehlerbehandlung
{
switch(Fehler)
{ // Unüberwindbare Fehler.
Fall 4: Alert("Der Handelsserver ist beschäftigt, versuchen Sie es erneut...");
Sleep(3000); // Einfache Lösung.
return(1); // Beenden Sie die Funktion.
case 135:Alert("Preis geändert, versuchen Sie es erneut...");
RefreshRates(); // Daten aktualisieren.
return(1); // Beenden Sie die Funktion.
case 136:Alert("Kein Preis. Warten auf einen neuen Tick...");
while(RefreshRates()==false) // Bis zu einem neuen Tick
Sleep(1); // Verzögerung in der Schleife
return(1); // Beenden der Funktion
case 137:Alert("Broker ist beschäftigt, versuchen Sie es erneut...");
Sleep(3000); // Einfache Lösung.
return(1); // Beenden Sie die Funktion.
case 146:Alert("Das Handelssubsystem ist beschäftigt. Versuchen Sie es erneut...");
Sleep(500); // Einfache Entscheidung
return(1); // Beenden der Funktion
// Kritische Fehler
Fall 2: Alert("Allgemeiner Fehler;)
return(0); // Beenden Sie die Funktion.
case 5: Alert("Ältere Version des Terminals.");
Work=false; // Nicht mehr funktionieren
return(0); // Beenden der Funktion
Fall 64: Alert("Konto gesperrt.");
Work=false; // Nicht mehr funktionieren
return(0); // Beenden der Funktion
case 133:Alert("Handel verboten.");
return(0); // Beenden der Funktion
case 134:Alert("Nicht genug Geld, um die Transaktion auszuführen.");
return(0); // Beenden der Funktion
default: Alert("Es ist ein Fehler aufgetreten ",Error); // Andere Optionen
return(0); // Beenden der Funktion
}
}
//-------------------------------------------------------------- 11 --
Kann mir jemand sagen, woran das liegt und was dieser Fehler bedeutet? Zuerst dachte ich, ich hätte vergessen, irgendwo eine Klammer zu setzen.
Aber nein, ich habe es ein paar Mal überprüft und alles scheint in Ordnung zu sein. Ich werde Ihnen für Ihre Hilfe sehr dankbar sein.
Hier sind die Fehler, die der Compiler erzeugt: ')' - nicht alle Kontrollpfade liefern einen Wert Stohastic-Signals-33.mq4 177 3
')' - nicht alle Kontrollpfade liefern einen Wert Stohastic-Signals-33.mq4 210 3
//--------------------------------------------------------------- 8 --
bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // Auftrag schließen fie
{
double Close_Price=0; // Schlusskurs des Auftrags
while(true)
{
RefreshRates();// Daten aktualisieren
if(F_Tip==0)// If(Kaufauftrag, ...
Close_Price=Bid; // Schlusskurs Bid
Close_Price=Ask;// Wenn Verkaufsauftrag, Schlusskurs Ask
bool Ans_Close=OrderClose(F_Ticket,F_Lot,Close_Price,F_Slippage); // Kauf oder Verkauf schließen
if (Ans_Close==true)// Es hat funktioniert:)
return(true);// Beenden der Schließfunktion
Crit_Error=GetLastError();// Fehlernummer übertragen
if (Fun_Error(Crit_Error)==1) // Fehlerbehandlung
weiter;// erneut versuchen
return(false);// Beenden Sie die Funktion
}
}
Drücken Sie in MetaEditor auf die Schaltfläche "Compile" und lesen Sie die Fehlermeldung - es gibt eine Zeilennummer und eine Positionsnummer
Fügen Sie den Programmcode mit der SRC-Schaltflächeein - lokale Leser mögen es so besser!!! und Ihr langes Geschwafel ist BRRRRR
Die Schaltfläche dient zum Einfügen von Quellcode in den Nachrichtentext. Wenn Sie darauf klicken, erscheint ein leeres Fenster, in das Sie den Code einfügen und dann auf die Schaltfläche Einfügen klicken müssen.
Drücken Sie in MetaEditor auf die Schaltfläche "Compile" und lesen Sie die Fehlermeldung - es gibt eine Zeilennummer und eine Positionsnummer
Fügen Sie den Programmcode mit der SRC-Schaltflächeein - lokale Leser mögen es so besser!!! und Ihr langes Geschwafel ist BRRRRR
Die Schaltfläche dient zum Einfügen von Quellcode in den Nachrichtentext. Wenn Sie darauf klicken, erscheint ein leeres Fenster, in das Sie den Code einfügen und dann auf die Schaltfläche Einfügen klicken müssen.
Ich danke Ihnen.