Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 307
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
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.
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.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.
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);
}
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?
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?
Hallo. Die Frage ist wie folgt, der EA öffnet keinen Verkaufshandel. Kannst du dir das mal ansehen?
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.