[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 595

 
Wanderer1000:
Ich habe den MetaTrader 4 installiert und ein Demokonto eröffnet. Versucht, Aufträge zu öffnen/abzuschließen. Wie kann ich nun das Terminal selbst dazu bringen, eine Verkaufsorder auszulösen, wenn der Kurs steigt, und eine Kauforder, wenn er fällt, indem ich Informationen wie "Sie brauchen eine Differenz von 2 Kerzen, um die alte Order zu schließen und eine neue zu eröffnen" verwende?
Einen EA schreiben, vielleicht)
 
nadya:

Guten Abend. Frage: Wenn ich einen Teil eines Trades schließe, eröffnet der EA quasi einen neuen Trade mit einem neuen Ticket. Bleibt die Magie der neuen Ordnung dieselbe?


Ja
 

KANN JEMAND ERKLÄREN, WARUM ALLE GESCHÄFTE NUR AUF KAUFEN STEHEN? Ich habe keine Trades auf SELL, der Flag-Indikator vor if() auf SELL ist aus irgendeinem Grund immer 1, WHY???? ist long&short in den Einstellungen.

ICH MÖCHTE AUCH FRAGEN, WARUM ICH MEINE EA VERPASST EINIGE POSITIONEN, DIE ICH ÖFFNEN KÖNNTE? ICH KANN NICHT REINGEHEN!

Hier ist der Code(die Deklaration der Variablen ist gekürzt):
double upfr,dnfr=0.0;//Ebenen der letzten Fraktale
int flag=0;

int start() //Öffnen bei der Fraktalpause und Schließen nach s Kerzen
{
if(iFractals(Symbol(),PERIOD_H1,MODE_UPPER,4)!=0)
{
upfr=iFractals(Symbol(),PERIOD_H1,MODE_UPPER,4);
}
if(iFractals(Symbol(),PERIOD_H1,MODE_UPPER,4)==0)
{
upfr=0;
}
if(iFractals(Symbol(),PERIOD_H1,MODE_LOWER,4)!=0)
{
dnfr=iFractals(Symbol(),PERIOD_H1,MODE_LOWER,4);
}
if(iFractals(Symbol(),PERIOD_H1,MODE_LOWER,4)==0)
{
dnfr=0;
}
//OPEN ORDERS BY PROBIT
H=iHigh(Symbol(),PERIOD_H1,1);
L=iLow(Symbol(),PERIOD_H1,1);
tOpen=iTime(Symbol(),PERIOD_H1,1);
if(H>upfr && flag==0) //wenn das Fraktal oben ist und das Fraktal-Level überschritten wird
{
tClose=tOpen+s*stime*60;
OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,NULL,NULL);
flag=1;
}
if(L<dnfr)
Print(L," -L dnfr- ",dnfr," flag- ",flag);
if(L<dnfr && flag==0)//wenn das Fraktal unten ist und der Fraktalpegel unten ist
{
tClose=tOpen+s*stime*60;
OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,NULL,NULL);
flag=1;
}
// AUFTRÄGE NACH ZEITENDE SCHLIESSEN
if(Time[1]>=tClose && flag==1)// wenn die angegebene Zeit abgelaufen ist
{
Print("FUNKTION SCHLIESSEN");
OrClose();
flag=0;
upfr=0;
dnfr=0;
}
return(0);
}

Dateien:
 

Bin über das hier gestolpert...

Wenn ein EA gelöscht wird, muss er auch ausstehende Aufträge löschen.

Es gibt zwei Varianten

1. Es löscht einfach alles...

int deinit()
{
int i;
//----
for(i=OrdersTotal()-1; i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if (OrderType() == OP_BUYSTOP)
{
OrderDelete(OrderTicket());
}
if (OrderType() == OP_SELLSTOP)
{
OrderDelete(OrderTicket());
}
}
}


//----
return(0);
}

2. Selektiv...

int deinit()
{

OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES);
OrderDelete(ticket1);
OrderSelect(ticket2,SELECT_BY_TICKET,MODE_TRADES);
OrderDelete(ticket2);

return(0);
}

Der Haken an der Sache ist, dass es in der Demo in beiden Fällen gut funktioniert... Aber im wirklichen Leben... nur eine ausstehende Partie wird aus irgendeinem Grund entfernt... Frage - wer weiß warum?

 
DOCTORS:

Bin über das hier gestolpert...

Wenn ein EA gelöscht wird, muss er auch ausstehende Aufträge löschen.

Es gibt zwei Varianten

1. Es löscht einfach alles...

int deinit()
{
int i;
//----
for(i=OrdersTotal()-1; i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if (OrderType() == OP_BUYSTOP)
{
OrderDelete(OrderTicket());
}
if (OrderType() == OP_SELLSTOP)
{
OrderDelete(OrderTicket());
}
}
}


//----
return(0);
}

2. Selektiv...

int deinit()
{

OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES);
OrderDelete(ticket1);
OrderSelect(ticket2,SELECT_BY_TICKET,MODE_TRADES);
OrderDelete(ticket2);

return(0);
}

Der Haken an der Sache ist, dass es in der Demo in beiden Fällen gut funktioniert... Aber im wirklichen Leben... nur eine ausstehende Partie wird aus irgendeinem Grund gelöscht... Die Frage ist: Wer weiß warum?

IMHO "hat nicht genug Zeit":

Die Laufzeit einer speziellen Funktion deinit() ist auf 2,5 Sekunden begrenzt. Wenn der Code einer Spezialfunktion deinit() länger als die angegebene Zeit ausgeführt wird, beendet das Client-Terminal zwangsweise die Spezialfunktion deinit() und das Programm als Ganzes.

 
ilunga:

IMHO "nicht rechtzeitig":

Die Spezialfunktion deinit() hat eine Ausführungszeit von 2,5 Sekunden. Wenn der Code in der speziellen deinit()-Funktion länger als diese Zeit läuft, wird das Client-Terminal die spezielle deinit()-Funktion und das Programm als Ganzes zwangsweise beenden.

:(

Das heißt, es gibt keine Hoffnung? Grob gesagt, beginnen wir mit der Verwendung des Skripts, um die ausstehenden Aufträge zu schließen... Und dann schließen wir die Eule... Schöner automatischer Handel...

Noch eine Frage - die Assistentin hat die Anhänger eingestellt https://forum.mql4.com/ru/42300/page588

Wenn ich den Zeitrahmen ändere, werden die Aufträge aus irgendeinem Grund gelöscht...

 
DOCTORS:

:(

Es gibt also keine Hoffnung? Grob gesagt, beginnen wir mit einem Skript, um die Anhänger zu schließen...und dann schließen wir die Eule... Schöner automatischer Handel...

Noch eine Frage - die Assistentin hat die Anhänger eingestellt https://forum.mql4.com/ru/42300/page588

Wenn Sie den Zeitrahmen ändern, werden die Aufträge aus irgendeinem Grund gelöscht...

Entweder das Skript oder eine andere Möglichkeit, dem EA zu befehlen, seinen Betrieb zu beenden (z. B. über eine globale Variable)

Zeitrahmenwechsel = Neustart des Expert Advisors

 
ilunga:

entweder ein Skript oder eine andere Möglichkeit, dem EA den Befehl zur Beendigung zu geben (z. B. über eine globale Variable)

Zeitrahmenwechsel = Neustart des Expert Advisors

Die Variable funktioniert - herzlichen Dank!
Hmm... führt kein Weg an der Änderung des Zeitrahmens vorbei?
 
Forum-Mitglieder, bitte helfen Sie bei Auftragsänderungen
 
Frage: Im visuellen Testmodus werden die Indikatorlinien nur am Ende des Tests gezeichnet, ist das bei allen der Fall oder mache ich etwas falsch?
Grund der Beschwerde: