Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 402

 
STARIJ:
Darunter steht dies:

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

////+------------------DELETE BUYLIM-----------------------------------+
   if((SchBuyLimLots(Symbol())-SchBuyLots(Symbol()))!=0)                  //  лот байлимит НЕ лот бая
     {     
      for(int i=0;i<OrdersTotal();i++)
        {
         datetime T_op=0,T_lim=0,buys=0;
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) break;
         if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=SMB_) continue;
         if(OrderType()==OP_BUY)
         if(OrderCloseTime()>buys) buys+=OrderCloseTime();
         buys= OrderCloseTime();
         T_op=buys;                                                       //  время закрытия бая
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=SMB_) continue;
           {
            if(OrderType()==OP_BUYLIMIT)
              {
               T_lim=OrderOpenTime();                                     //  время закрытия селл
               ticket=OrderTicket();
               if(T_lim<=T_op)                                            //  разность
               res=OrderDelete( ticket,clrMagenta);
               if(res<1)
               {
                  Print(GetLastError());
               }
              }
           }
        }
     }
 
ZZuretc:

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()

 
Alexey Viktorov: Ich habe mir das Wunder selbst nicht angesehen.

Ich danke Ihnen.

 
Können Sie mir sagen, wie ich die Höchst- und Mindestwerte der aktuellen ATR ermitteln kann?
Dateien:
q6a0hh.PNG  12 kb
 

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

')' - nicht alle Kontrollpfade liefern einen Wert Stohastic-Signals-33.mq4 210 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 --



Dateien:
 
RomanRott: Können Sie mir sagen, wie ich die Höchst- und Mindestwerte des aktuellen ATP ermitteln kann?
   double max=-10000, min=+10000, ATR;
   for(int n=0; n<WindowFirstVisibleBar();n++)
   {
      ATR=iATR(NULL, 0, 14, n);
      if(max<ATR)max=ATR;
      if(min>ATR)min=ATR;
   }
   Alert("min = ", DoubleToStr(min,4), "    max = ", DoubleToString(max,4));
Für andere Indikatoren gilt ähnliches
 
Skander: Hallo zusammen, ich habe einen einfachen Experten auf Basis von Stochstic erstellt (oben Peak sells, unten Buy), und der Compiler gibt einen Fehler an einer flachen 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 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

//--------------------------------------------------------------- 8 --
  bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip)    // Ф-ия закрытия ордера
  {
   double Close_Price=0;                       // Цена закрытия ордера 
   while(true)
     {
        ....................................
            continue;                           // Повторная попытка
         return(false);                                // Выход из функции
     }
     return false;   // Компилятор хочет return в конце функции
  }

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 Code 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.

 
STARIJ:

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.

Grund der Beschwerde: