[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 562

 

Können Sie mir sagen, was an diesem Code falsch sein könnte? Es handelt sich um einen Trailing-Stop, der jedoch beim Test den Fehler 1 erzeugt, wenn er geändert wird. Warum wird der Auftrag nicht geändert?

Als ich diesen Fehler korrigierte (bisher erfolglos), begann er beim Kompilieren des Hauptcodes des Expert Advisors in die Druckfunktion einen Fehler zurückzugeben, der besagt, dass er Anführungszeichen benötigt, aber alles dort ist korrekt, und um diesen Fehler zu korrigieren, muss ich ein neues Anführungszeichen entfernen und setzen...

bool Nachlaufstopp()
{
wenn ((OrderMagicNumber()==11111)==true)
{
Print("Kaufposition beibehalten");
while(OrderCloseTime()==0)
{
wenn ((Bid-OrderStopLoss())>(StopLevel*Point))
{
if (OrderModify(OrderTicket(),OrderOpenPrice(),ND(Bid-StopLevel*Point),0,0))
Print("Stop Loss der Order mit der Nummer ",OrderTicket()," und der magischen Zahl ",OrderMagicNumber()," erfolgreich auf ",OrderStopLoss()) geändert;
else Print("Das Stop-Loss-Niveau der Order mit der Nummer ",OrderTicket()," und der magischen Zahl ",OrderMagicNumber(),". Fehler ",GetLastError());
}
}
wenn (OrderCloseTime()>0)
{
Print("Der Auftrag mit der Nummer ",OrderTicket()," und der magischen Zahl ",OrderMagicNumber()," wurde zum Preis ",OrderClosePrice()," mit einem Gewinn/Verlust ",OrderProfit()) geschlossen;
return(true);
}
}
sonst
{
wenn ((OrderMagicNumber()==22222)==true)
{
Print((Position verkaufen);
while(OrderCloseTime()==0)
{
wenn ((OrderStopLoss()-Ask)>(StopLevel*Point))
{
if (OrderModify(OrderTicket(),OrderOpenPrice(),ND(Ask+StopLevel*Point),0,0))
Print("Stop Loss der Order mit der Nummer ",OrderTicket()," und der magischen Zahl ",OrderMagicNumber()," erfolgreich auf ",OrderStopLoss()) geändert;
else Print("Das Stop-Loss-Niveau der Order mit der Nummer ",OrderTicket()," und der magischen Zahl ",OrderMagicNumber(),". Fehler ",GetLastError());
}
}
wenn (OrderCloseTime()>0)
{
Print("Der Auftrag mit der Nummer ",OrderTicket()," und der magischen Zahl ",OrderMagicNumber()," wurde zum Preis ",OrderClosePrice()," mit einem Gewinn/Verlust ",OrderProfit()) geschlossen;
return(true);
}
}
sonst return(false);
}
}
 
Ich danke Ihnen!!!
 
Ekburg:

Können Sie mir sagen, was an diesem Code falsch sein könnte? Es handelt sich um einen Trailing-Stop, aber beim Testen gibt es den Fehler 1 bei der Änderung. Warum wird der Auftrag nicht geändert?

Als ich diesen Fehler korrigierte (bisher erfolglos), begann er beim Kompilieren des Hauptcodes des Expert Advisors in die Druckfunktion einen Fehler zurückzugeben, der besagt, dass er Anführungszeichen benötigt, aber alles dort ist korrekt, und um diesen Fehler zu korrigieren, muss ich ein neues Anführungszeichen entfernen und setzen...

bool Nachlaufstopp()
{
wenn ((OrderMagicNumber()==11111)==true)
{
Print("Kaufposition beibehalten");
while(OrderCloseTime()==0)
{
wenn ((Bid-OrderStopLoss())>(StopLevel*Point))
{
if (OrderModify(OrderTicket(),OrderOpenPrice(),ND(Bid-StopLevel*Point),0,0))
Print("Stop Loss der Order mit der Nummer ",OrderTicket()," und der magischen Zahl ",OrderMagicNumber()," erfolgreich auf ",OrderStopLoss()) geändert;
else Print("Das Stop-Loss-Niveau der Order mit der Nummer ",OrderTicket()," und der magischen Zahl ",OrderMagicNumber(),". Fehler ",GetLastError());
}
}
wenn (OrderCloseTime()>0)
{
Print("Der Auftrag mit der Nummer ",OrderTicket()," und der magischen Zahl ",OrderMagicNumber()," wurde zum Preis ",OrderClosePrice()," mit einem Gewinn/Verlust ",OrderProfit()) geschlossen;
return(true);
}
}
sonst
{
wenn ((OrderMagicNumber()==22222)==true)
{
Print((Position verkaufen);
while(OrderCloseTime()==0)
{
wenn ((OrderStopLoss()-Ask)>(StopLevel*Point))
{
if (OrderModify(OrderTicket(),OrderOpenPrice(),ND(Ask+StopLevel*Point),0,0))
Print("Stop Loss der Order mit der Nummer ",OrderTicket()," und der magischen Zahl ",OrderMagicNumber()," erfolgreich auf ",OrderStopLoss()) geändert;
else Print("Das Stop-Loss-Niveau der Order mit der Nummer ",OrderTicket()," und der magischen Zahl ",OrderMagicNumber(),". Fehler ",GetLastError());
}
}
wenn (OrderCloseTime()>0)
{
Print("Der Auftrag mit der Nummer ",OrderTicket()," und der magischen Zahl ",OrderMagicNumber()," wurde zum Preis ",OrderClosePrice()," mit einem Gewinn/Verlust ",OrderProfit()) geschlossen;
return(true);
}
}
sonst return(false);
}
}


Fehler 1 ist kein Fehler. Dies bedeutet, dass die Order bereits geändert wurde. Fügen Sie vor OrderModify() eine Prüfung der Änderungsparameter ein (wenn die Order stoploop nicht gleich stoploop , (ND(Bid-StopLevel*Point)oder ND(Ask+StopLevel*Point)) ist, dannOrderModify(), andernfalls return).
 
rigonich:

Fehler 1 ist kein Fehler, sondern bedeutet, dass die Order bereits modifiziert wurde. Fügen Sie vor OrderModify() eine Überprüfung der Modifikationsparameter ein (wenn der Stop Loss der Order nicht gleich dem Stop Loss ist, (ND(Bid-StopLevel*Point) oderND(Ask+StopLevel*Point)), dannOrderModify(), sonst Return).


Diese Prüfung ist oben: wenn ((Bid-OrderStopLoss())>(StopLevel*Point)), oder ich habe Sie falsch verstanden

Und ich testete es auf eine starke Bewegung, auch visuell, ist es deutlich sichtbar, dass der Stop-Loss der Bestellung und der Ausdruck nicht gleich sind

 
Usual_Trader:


Auf einen Blick, was ich sehe, in der Funktion der Schließung von Aufträgen, müssen Sie den Auftrag durch das TicketOrderSelect(Ticket, SELECT_BY_TICKET), die Anzahl der Lose angeben, nicht die Variable Lts, weil es jedes Mal neu berechnet wird, sondern verwenden OrderLots() Und eine andere Sache, halten Sie die Arbeit an der 0 bar, bzw., die Kriterien auf einer Bar kann verschwinden, Ihre Aufträge können nicht öffnen, wo Sie möchten. Ersetzen Sie in den Indikatorparametern den Balken 0 durch 1 und 1 durch 2



Vielen Dank für die Antwort), aber das Kriterium funktioniert nicht so, wie ich es gerne hätte (nicht alle Kreuzungen der Stochastik zeigen Aufträge ( ) und ich möchte Aufträge auf 0 bar zu öffnen, aber ich denke, ich brauche eine zusätzliche Bedingung: nach dem Öffnen eines Auftrags auf der aktuellen Bar muss ich nichts tun, bis die Bar schließt, aber ich habe keine Ahnung, wie das zu tun (kann mit Zeitreihen-Arrays???) Bitte beraten.
Dateien:
 
Ekburg:


Diese Prüfung ist oben: wenn ((Bid-OrderStopLoss())>(StopLevel*Point)), oder ich habe Sie falsch verstanden.

Ich habe es bei einer starken Bewegung überprüft, bei der Sie deutlich sehen können, dass der Stop-Loss des Auftrags und der Ausdruck nicht gleich sind


Das Problem ist folgendes: Da Sie OrderSelect() in dieser Funktion nicht haben, muss es irgendwo in der Schleife mit der Suche von Aufträgen verwendet werden. Wenn diese Schleife die Suche von null bis zum letzten Auftrag organisiert, dann ändert sich nach der Änderung des ersten Auftrags oder wenn bereits ein Auftrag gefunden wurde, beim nächsten Aufruf von OrderSelect() die Reihenfolge und die Funktion wählt möglicherweise einen Auftrag aus, der bereits geändert wurde. Daher sollten wir prüfen, ob der Wert der Order StopLoss gleich dem Wert ist, den wir an die OrderModify()-Funktion senden

if(ND(Bid-StopLevel*Point)==OrderStopLoss())return(true);
 

abeiks:

Seit einiger Zeit versuche ich , den Kaufabschlussblock so umzustellen, dass nur die letzten beiden Kaufpositionen geschlossen werden , aber es schlägt fehl. Können Sie mitteilen, wie man den Block wiederherstellt ?

//+------------------------------------------------------------------+
//|                                                         0000.mq4 |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
void Close_2buy()
   {
   bool     result;
   int      Count=2,Ticket=-1,error;
   datetime time=0;
   while(Count>0)
      {
      for (int f=OrdersTotal()-1; f>=0; f--) // 
         {
         OrderSelect(f, SELECT_BY_POS);
         if (OrderSymbol()==Symbol() &&(OrderMagicNumber()==magic ) 
         && (OrderType() == OP_BUY )) 
            {
            if(OrderOpenTime()>time)
               {
               time=OrderOpenTime();Ticket=OrderTicket();
            }
         }
      }
      if(OrderSelect(Ticket,SELECT_BY_TICKET)==True);
         {
         result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),0,CLR_NONE);
         if(result!=TRUE){error=GetLastError();Print("LastError = ", error);}
      }
      else{error=GetLastError();Print("LastError = ", error);} 
      Ticket=-1;time=0;Count--;
   }
   return;
} 
 
ametist444:

Hallo!

Können Sie mir sagen, welche Dateien heruntergeladen werden müssen und wo ich sie in mt4 installieren muss, um dieses Fenster zu erhalten?

Ich verstehe nicht, wie man das in derSimulation für verschiedene Zeitrahmen des zu testenden Instruments tun kann.

Ich möchte nur drei Tages-, Vier-Stunden- und Stunden-Charts sehen.

Ich möchte drei Tages-, Vier-Stunden- und Stunden-Charts sehen. Bitte helfen Sie mir, ich habe es die ganze Nacht nicht geschafft!



Die Fenster wie (visuell) öffnen sich beim Testen des EA im visuellen Modus.


 
peshihod:

Welche Art von StopLoss?

Ich habe mich wohl falsch ausgedrückt :(

Wir haben einen Algorithmus für die Eröffnung von Aufträgen.

Ich brauche es, um die nächste Bestellung in eine andere Richtung zu öffnen (wenn Bedingungen erscheinen), wenn die letzte Bestellung in irgendeiner Weise geschlossen wurde.

Alles funktioniert, aber wenn ich durch einen Stop-Loss geschlossen haben, zum Beispiel für den Verkauf, und die Bedingungen, um einen Verkauf in diese Richtung zu öffnen, die Öffnung weiter. Wir müssen die Bedingungen für den Kauf abwarten.

Das heißt, wir müssen den letzten geschlossenen Auftrag überprüfen, damit er nicht mit dem Eröffnungsauftrag zusammenfällt (Kauf-Verkauf-Kauf-Verkauf-Wechsel). Es ist nur ein Befehl oder ein Warten auf ein Signal in Betrieb.

Ich verstehe, dass wir wahrscheinlich OrdersHistoryTotal() verwenden sollten, aber wie würde es in einem funktionierenden EA aussehen?

Ich danke Ihnen.

 
delf:

Es gibt einen Algorithmus für die Eröffnung von Aufträgen.

Wir benötigen eine beliebige Variante des letzten Auftrags, um den nächsten Auftrag in einer anderen Richtung zu eröffnen (wenn die Bedingungen erfüllt sind).

Mit anderen Worten, es muss geprüft werden, ob der letzte geschlossene Auftrag nicht mit dem Eröffnungsauftrag übereinstimmt (Kauf-Verkauf-Kauf-Verkauf-Wechsel). Es gibt nur einen Auftrag oder ein Signal, das darauf wartet, geöffnet zu werden.

Findet dieser Wechsel in jedem Fall statt, und ist immer nur eine Reihenfolge in Kraft?

Dann ist es einfacher, die Kontrolle über die Anzahl der Aufträge in die Bedingung aufzunehmen:

if(OrdersTotal()==0)
{
	if(OldOrder==OrderBuy)
		{
		...
		}
	else
		{
		...
		}
}
Grund der Beschwerde: