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

 
forexman77:

Ich habe es auf einem anderen DC ausprobiert und es scheint in Ordnung zu sein. Die Frage ist, warum der Anruf:

0,01 ausgibt, aber 131 auf dem Bot druckt?

Die Lose müssen normalisiert werden, wenn sie an die Funktion übergeben werden.

 
Artyom Trishkin:

Die Partien müssen normalisiert werden, wenn sie in die Funktion übertragen werden.


Eigentlich habe ich geschrieben, dass ich normalisiere. Die Anzahl der Lose beim automatischen Handel ist begrenzt.

Sie müssen hier nicht Captain Obvious sein.
 
forexman77:

Eigentlich habe ich geschrieben, dass ich normalisiere. Es gibt eine Art Begrenzung für die Anzahl der Lose im automatischen Handel.

Machen Sie hier nicht einen auf Captain Obvious.

Schauen Sie selbst, wenn Sie sich auf diese Weise mitteilen wollen.

 
rabanik:

Vielen Dank für die Antwort.

Hier ist die ganze Funktion, der Punkt ist, dass es eine Bestellung öffnet und dann fügt konstante Stop-Loss und Take-Profit-Werte durch Modifikation.

Die Order ist eröffnet, aber Stop Loss und Take Profit sind nicht gesetzt (die Berechnungsfunktion in rot, in derOrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES) einen Fehler liefert ((() )

//Open Order-Funktion, Variablen: Symbol, Ordertyp, Lot, Eröffnungskurs, TP- und SL-Berechnungsmethode (0 - im Preis, 1 - in Punkten, die aus dem Eröffnungskurs berechnet werden sollen), Stop Loss, Take Profit)

//Symbol/Paar, offener Auftragstyp - pending, offener Preis, Schalter = 1, SL B TP - Stop Loss und Take Profit Werte sind konstant!

bool SendOrder(string Symb,int Type, double OP,int Mode) {
Farbe CL;
double Pp = MarketInfo(Symb,MODE_POINT);
wenn (Typ==0) CL=Blau;
if (Typ==1) CL=Rot;
if (Typ==2 || Typ==4) CL=DarkTurquoise;
if (Typ==3 || Typ==5) CL=Orange;
//Überprüfung des Volumens
if(MarketInfo(Symb,MODE_LOTSTEP)==0.01) DG=2; sonst DG=1;
if (Lot<MarketInfo(Symb,MODE_MINLOT)) Lot=MarketInfo(Symb,MODE_MINLOT);
if (Lot>MarketInfo(Symb,MODE_MAXLOT)) Lot=MarketInfo(Symb,MODE_MAXLOT);
wenn (Lot*MarketInfo(Symb,MODE_MARGINREQUIRED)>AccountEquity()) {
PnC(StringConcatenate("Nicht genug Geld, um den Handel zu eröffnen",Type," Volumen: ",DoubleToStr(Lot,DG)),0);
Rückkehr;
}
// Prüfung ausstehender Aufträge
/*
double Slv = MarketInfo(Symb,MODE_STOPLEVEL)*Pp;
wenn (Typ>1) {
if (Type==2 && MarketInfo(Symb,MODE_ASK)-OP<Slv) OP=MarketInfo(Symb,MODE_ASK)-Slv;
if (Type==3 && OP-MarketInfo(Symb,MODE_BID)<Slv) OP=MarketInfo(Symb,MODE_BID)+Slv;
if (Type==4 && OP-MarketInfo(Symb,MODE_ASK)<Slv) OP=MarketInfo(Symb,MODE_ASK)+Slv;
if (Type==5 && MarketInfo(Symb,MODE_BID)-OP<Slv) OP=MarketInfo(Symb,MODE_BID)-Slv;
}
*/
RefreshRates();
int Min_Dist = MarketInfo(Symb,MODE_STOPLEVEL); //Stop Loss/Stake Profit Level in Pips begrenzen. Min. Abstand
double Tek_Ask = MarketInfo(Symb,MODE_ASK); //Letzter erhaltener Handelspreis. Sie wird in der vordefinierten Variable Ask für das aktuelle Symbol gespeichert
double Tek_Bid = MarketInfo(Symb,MODE_BID); //Der letzte erhaltene Gebotspreis. Sie wird in der vordefinierten Variable Bid für das aktuelle Symbol gespeichert
double Tek_Point = MarketInfo(Symb,MODE_POINT); //Punktgröße in der Kurswährung. Er wird in der vordefinierten Variable Point für das aktuelle Symbol gespeichert
int Tek_Digits = MarketInfo(Symb,MODE_DIGITS);//Die Anzahl der Nachkommastellen des Symbolpreises. Für das aktuelle Symbol wird es in der vordefinierten Variable Digits gespeichert

double Slv = NormalizeDouble(Min_Dist*Tek_Point,Tek_Digits);
wenn (Typ>1) {
if (Typ==2 && Tek_Ask - OP < Slv) OP = Tek_Ask - Slv;
if (Typ==3 && OP - Tek_Bid < Slv) OP = Tek_Bid + Slv;
if (Typ==4 && OP - Tek_Ask < Slv) OP = Tek_Ask + Slv;
if (Typ==5 && Tek_Bid - OP < Slv) OP = Tek_Bid - Slv;
}
// Anschläge prüfen
wenn (SL!=0 || TP!=0) {
if (Modus==0) {
wenn (MathAbs(OP-SL)<Slv && SL!=0) {
wenn (Typ==0 || Typ==2 || Typ==4) SL=OP-Slv; sonst SL=OP+Slv;
}
wenn (MathAbs(OP-TP)<Slv && TP!=0) {
wenn (Typ==0 || Typ==2 || Typ==4) TP=OP+Slv; sonst TP=OP-Slv;
}
}else{
wenn (SL*Pp<Slv && SL!=0) SL=Slv/Pp;
wenn (TP*Pp<Slv && TP!=0) TP=Slv/Pp;
}
}
//eröffnung
for(int k=0;k<=TryToTrade;k++) {
if (Type==0) OP=MarketInfo(Symb,MODE_ASK);
if (Typ==1) OP=MarketInfo(Symb,MODE_BID);
PnC(StringConcatenate("Es wurde versucht, einen Auftrag zu eröffnen, Typ:",Typ," Volumen:",Lot," Preis:",OP),0);
if (IsTradeAllowed()) {
int Ticket=OrderSend(Symb,Typ,Lot,NormalizeDouble(OP,MarketInfo(Symb,MODE_DIGITS)),3,0,0,NULL,Tek_Magic,0,CL);
}else{ PnC(StringConcatenate("Cannot open order ",k),0); Sleep(3000); continue; }
if (Ticket >= 0) { PnC(StringConcatenate("Bestellung geöffnet ",Ticket),0); break; }
LastError=Fun_Error(GetLastError());
if (LetzterFehler==0) {
RefreshRates(); Sleep(WaitTime);
if (k==TryToTrade) return(false); }
if (LastError==1) return(false);
if (LastError==2) { Work=false; return(false); }
}
// Stopps setzen
OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES);
if (SL==0 && TP==0) return;
if (Mode==1) {
if (SL!=0) {
if (Typ==0 || Typ==2 || Typ==4) SL=OrderOpenPrice()-SL*Pp;
if (Typ==1 || Typ==3 || Typ==5) SL=OrderOpenPrice()+SL*Pp;
}
if (TP!=0) {
if (Typ==0 || Typ==2 || Typ==4) TP=OrderOpenPrice()+TP*Pp;
if (Typ==1 || Typ==3 || Typ==5) TP=OrderOpenPrice()-TP*Pp;
}
}

for(k=0;k<=TryToTrade;k++) {
PnC(StringConcatenate("Versuch, Stops für die Bestellung zu setzen: ",Ticket," s/l: ",SL," t/p: ",TP),0);
if (IsTradeAllowed()) {
//TickeT=OrderModify(Ticket,NormalizeDouble(OrderOpenPrice(),MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(Symb,MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(TP,MarketInfo(Symb,MODE_DIGITS)),0,CLR_NONE);
TickeT=OrderModify(Ticket,NormalizeDouble(OrderOpenPrice(),MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(SL,MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(TP,MarketInfo(Symb,MODE_DIGITS)),0,CLR_NONE);
}else{ PnC(StringConcatenate("Cannot modify order ",k),0); Sleep(3000); continue; }
if (TickeT == true) { PnC(StringConcatenate("Bestellung geändert ",Ticket),0); break; }
LastError=Fun_Error(GetLastError());
if (LetzterFehler==0) {
RefreshRates(); Sleep(WaitTime);
if (k==TryToTrade) return(false); }
if (LastError==1) return(false);
if (LastError==2) { Work=false; return(false); }
}
return(true);

}

Nun der nächste Fehler in der Zeileif (Typ==0 || Typ==2 || Typ==4) SL=OrderOpenPrice()-SL*Pp;. Die Funktion OrderOpenPrice() gibt den gleichen Fehler zurück - Ausdruck konnte nicht ausgewertet werden. Was für eine Sauerei!!!
 
rabanik:
Hier ist nun der nächste Fehler in der Zeileif (Typ==0 || Typ==2 || Typ==4) SL=OrderOpenPrice()-SL*Pp;. Die Funktion OrderOpenPrice() gibt den gleichen Fehler zurück - Ausdruck konnte nicht ausgewertet werden. Was für eine Sauerei!!!

Es ist alles geregelt. Entschuldigung für die dumme Frage. Ich habe eine Hauptvariable SL vom Typ int.

Und ich versuche, SL wieder mit Typ double zu bekommen. Das System gibt jedoch 1 zurück.

Danke.

 

Kann jemand einen Vorschlag machen, wie man einen EA von einer bestimmten Stelle aus wieder an seinen Anfang zurückbringt, ohne weitere Operatoren auszuführen?

 

Hallo. Die Frage ist wie folgt, der EA eröffnet keinen Verkaufshandel. Kannst du dir das mal ansehen?

 if (Digits==3||Digits==5) {sl=SL*10*Point;}
         else if (Digits==4||Digits==2) {sl=SL*Point;}
            if (OrdersTotal()==0)
              {
                if (Close[1]>TD2)
                OrderSend (Symbol(),OP_BUY,Lot,Ask,10,Ask-sl,0,NULL,Magic,0,clrBlue);
                else if (Close[1]<TD1)
                OrderSend (Symbol(),OP_SELL,Lot,Bid,10,Bid+sl,0,NULL,Magic,0,clrRed);
              }
 
6737998:

Kann jemand einen Vorschlag machen, wie man einen EA von einer bestimmten Stelle zurück zu seinem Anfang arbeiten lässt, ohne weitere Operatoren auszuführen?

Оператор возврата return - Операторы - Основы языка - Справочник MQL4
Оператор возврата return - Операторы - Основы языка - Справочник MQL4
  • docs.mql4.com
Оператор возврата return - Операторы - Основы языка - Справочник MQL4
 
danil77783:

Hallo. Die Frage ist wie folgt, der EA öffnet keinen Verkaufshandel. Kannst du dir das mal ansehen?

Was ist TD1 und wo wird ihm ein Wert zugewiesen?
 

Freunde, wie kann man sich aus dieser Situation richtig befreien... Der Indikator zeichnet zwei horizontale Linien aus CSV (Rot - vom Tagesanfang bis zum Tagesende) Blau - Balken aus den vergangenen Tagen, auf verschiedenen Preisniveaus. Aber es gibt Tage, an denen diese Stufen den gleichen Wert/Preis haben. Was ist der richtige Weg aus dieser Situation, so dass, wenn die Linien übereinstimmen, die Ray (Blue) angezeigt wird, und die rote Linie ist nicht sichtbar auf dem Diagramm, aber physisch vorhanden ..., dh, es ist transparent.

Jetzt - Draw_Level("Red", red, DRAW_NONE, STYLE_SOLID,0); es hört auf, die Linie zu zeichnen, aber der Strahl ist auch nicht von unten sichtbar. Danke.

Grund der Beschwerde: