[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 81

 

extern bool BUY = true;
extern int Magic = 0;
extern double Lot = 0.1;
extern int takeprofit = 0;
extern int stoploss = 0;
extern int slippage = 3;
double SL,TP;
int init(){
return(0);
}
int start()
{
if (BUY)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;

BUY=false;
}

return(0);
}
void OPENORDER(string ord)
{
int error;
while (true)
{ error=true;
if (ord=="Buy") error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),Slippage,SL,TP,",Magic,0){BUY = false;}
}
return;
}

 
nemo811:

Bitte geben Sie mir ein Beispiel. Ich lerne gerade erst und bin noch nicht mit der Aufgabe konfrontiert, eine Flagge aufzustellen. )
Ändern Sie einfach die Variable auf false und das war's. Beim nächsten Tick wird der EA diesen Block nicht mehr betreten und er wird nichts anderes öffnen, bis er neu gestartet wird.
 
nemo811:

Bitte beraten Sie mich, wie man die einmalige Ausführung einer Bedingung in einem EA (z.B. das Öffnen einer Order) zulässt, anstatt sie bei jedem Tick zu wiederholen. In diesem Fall sollte der EA beim Schließen einer Position keine neue Position eröffnen. Ich habe es versucht, aber es funktioniert nicht wie vorgesehen.

Vielen Dank im Voraus.



Warum haben Sie die Variable, in der der Bestellschein gespeichert wird, als Fehler bezeichnet?

if (ord=="Buy") error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),Slippage,SL,TP,"",Magic,0){BUY = false;}

Lesen Sie über OrderSend(), ich denke, die Fragen werden verschwinden, ich würde es so schreiben:

void OPENORDER(string ord)
{
int ticket = -1;
 while (ticket<0)
 {ticket=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0);
  sleep(500);
}
return;
}
 
IgorM:



Vielleicht haben Sie vorhin gelesen, dass ich mein Problem geäußert habe. Sie scheinen eine Lösung gefunden zu haben, aber ich kann im Buch nicht finden, wie man mit String in mql arbeitet(

Wie entferne ich die Zahlen aus der Zeile für Zeile?

 
NameLess:


Vielleicht haben Sie vorhin gelesen, dass ich mein Problem geäußert habe. Sie scheinen eine Lösung gefunden zu haben, aber ich kann im Buch nicht finden, wie man mit String in mql arbeitet(

Wie entferne ich die Zahlen aus der Zeile für Zeile?


Erstellen Sie ein Skript, um mit MQL4-Stringfunktionen zu experimentieren - siehe hier https://docs.mql4.com/ru/strings
 

ZERO

nach welchen Regeln, zum Beispiel?

 
drknn:

Erstellen Sie ein Skript, das mit MQL4-Stringfunktionen experimentiert - siehe hier https://docs.mql4.com/ru/strings/StringSubstr

Ich danke Ihnen!
 
NameLess:


Vielleicht haben Sie gelesen, dass ich mein Problem etwas früher geäußert habe. Es scheint eine Lösung zu sein, aber ich kann in dem Buch keine Möglichkeit finden, mit Strings in mql zu arbeiten (

Wie entnehme ich eine Zahl aus einer Reihe von Zahlen?

um eine Zahl in eine Zeichenkette umzuwandeln https://docs.mql4.com/ru/convert/DoubleToStr

einen Teil der Zeichenkette https://docs.mql4.com/ru/strings/StringSubstr vom Anfang an abschneiden https://docs.mql4.com/ru/strings/StringLen

und konvertieren ihn zurück in den realen Typ https://docs.mql4.com/ru/convert/StrToDouble

das ist alles, was Sie mit Strings tun müssen, vielleicht reicht StrToDouble() für Sie aus.

Eine andere Möglichkeit: Multiplizieren Sie eine reelle Zahl als Potenz von x mit 10, und geben Sie das Ergebnis dem Typ int - wenn ich mich nicht irre, wird nicht gerundet, dann teilen Sie int durch 10 als Potenz von x.

 
IgorM:

Übersetzen einer Zahl in die Zeichenkette https://docs.mql4.com/ru/convert/DoubleToStr

einen Teil der Zeichenkette https://docs.mql4.com/ru/strings/StringSubstr vom Anfang von https://docs.mql4.com/ru/strings/StringLen abschneiden

und konvertieren alles zurück in einen echten Typ https://docs.mql4.com/ru/convert/StrToDouble

das ist alles, was Sie mit Strings tun müssen, vielleicht ist StrToDouble() genug für Sie.

Eine andere Möglichkeit: Multiplizieren Sie eine reelle Zahl mit 10 hoch x und geben Sie das Ergebnis dem Typ int - wenn ich mich nicht irre, wird nicht gerundet - und dividieren Sie int durch 10 hoch x


zumindest *abgeschnitten*, da die Zahl nur aus dem Indikator in eine Zeichenkette übernommen werden kann... danke für den Rat, ich werde experimentieren)
 

IgorM:

NameLess :

Vielen Dank für die Hilfe. Ich verstehe die Logik mit dem Setzen des Kennzeichens und die Funktion der Rückgabe der Anzahl der Aufträge. Aber ich interessiere mich auch für den Zeitpunkt, an dem der Auftrag abgeschlossen wird. Es sieht so aus, als ob die Flaggenbedingung versucht, erneut einen Auftrag zu platzieren, aber die Funktion, die die Auftragsnummer zurückgibt, sagt, dass es 1 Auftrag weniger gibt und initialisiert auch die Eröffnung einer Position. Korrigieren Sie mich, wenn ich etwas übersehen habe.
Grund der Beschwerde: