Hilfe! Warum der EA einen Handel nicht schließt - Seite 5

 
crossy:

O.K. Hier ist die geänderte Version, die ich den gleichen Fehler bekam.

Y.

Sie brauchen die Funktion überhaupt nicht ... ... lassen Sie sie weg.

 

Machen wir es noch einmal, Teil 2 :(

 ...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         // Do the selection and OrderClose() INSIDE HERE ..., please
         
         
         /*
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
         */
      }   
      //if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... ) // this selection goes up there
    
         //CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);

//-----------------------------------------------+
/*
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt=0; cntt<20000; cntt++ )
   {
      if ( Check )
      {
         Check_Ini();
         return;
      }
      Check = false;
      if ( TREN == "LONG" )
         PRC = MarketInfo(SYMB,MODE_BID);
      else
      if ( TREN == "SHORT" )
         PRC = MarketInfo(SYMB,MODE_ASK);
         
      Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow); // close it up there, and you have to rewrite the parameters
   }
   */
 

Tun Sie dies . . . ( wiederholt von hier: https://www.mql5.com/en/forum/139543 )

if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
   {
   Print("Trying to close Order: ", OrderTicket());                             // <---- tells you that the   if  returned true
   if ( ! OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Yellow)
      Print("OrderClose failed, error # ", GetLastError());                          // <------- reports the error if the OrderClose failed . . 
   } 

. . . und Sie brauchen die Funktion überhaupt nicht mehr.

 
onewithzachy:

Machen wir es noch einmal, Teil 2 :(


Ich bitte um Entschuldigung, da ich im Urlaub bin und am Sonntagabend wiederkomme.

Ich werde tun, was ihr vorgeschlagen habt, und ich hoffe, dass ich Erfolg haben werde.

Ich danke euch beiden.

Y.

 
crossy:


Ich bitte um Ihre Erlaubnis, da ich Urlaub habe, und am Sonntagabend wieder da sein werde.


OK, genießen Sie Ihren Urlaub :-)
 
crossy:


Ich bitte euch um Nachsicht, da ich Urlaub habe und am Sonntag Abend wieder da bin.

Ich werde tun, was Sie vorgeschlagen haben, und ich hoffe, dass ich Erfolg haben werde.

Ich danke Ihnen beiden.

Y.

Ich wünsche euch viel Spaß :D

Ich habe F1 Monaco diesen Sonntag zu sehen :D

 
onewithzachy:

Viel Spaß :D

Ich habe F1 Monaco diesen Sonntag zu sehen :D

Und morgen, FP3 und Qualifying ;-)
 
crossy:


Danke onewithzachy,

Erstens denke ich, dass Sie einen kleinen Fehler mit haben:

for(int cnt = OrdersTotal() -1 ; cnt >= 0; cnt--)

Sie müssen die grüne und fette Korrektur hinzufügen.

Aber ich verstehe nicht, wie die folgende Zeile uns helfen kann?

#include "..\libraries\stdlib.mq4"

Danke, Y.

Ich finde dies viel einfacher, und es funktioniert für mich:

//---------------------------------------------+

void CheckForClose()
{
int i, res, order_id;

//-------+
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
order_id= OrderTicket();


//---nachziehen und abschließen
if (OrderType() == OP_BUY)
{
if (Is_Close_Buy==true) //-- das Signal zum Schließen
{
RefreshRates();// Kurse aktualisieren
res= 0;
res= OrderClose(order_id,Lots,Bid,3,Gold);
while(IsTradeAllowed() == false) Sleep(100); //---warte ein wenig, um Antwort vom Server zu erhalten
wenn (res>0){
PlaySound("cash_register.wav");} //-Glücklicher Sound, hoffentlich wird Geld verdient !!!!
if (res<0)
{
PlaySound("creak.wav");
Print("OrderSend fehlgeschlagen mit Fehler #",GetLastError());
return(0);
}
return;
}
}//end close Buy Order check
//---
if (OrderType() == OP_SELL)
{
if (Is_Close_Sell==true) //---das Signal zum Schließen
{
RefreshRates();// Kurse aktualisieren
res= 0;
res= OrderClose(order_id,Lots,Ask,3,Gold);
while(IsTradeAllowed() == false) Sleep(100); //---warte ein wenig, um Antwort vom Server zu erhalten
wenn (res>0){
PlaySound("cash_register.wav");}
if(res<0)
{
PlaySound("creak.wav");
Print("OrderSend fehlgeschlagen mit Fehler #",GetLastError());
return(0);
}
return;
}
}//end close Sell Order check
}//--------+
zurückkehren;
}

//----------------------------------------------+

 
RaptorUK:
Und morgen, FP3 und Qualifying ;-)

@ RaptorUK, ich überlege, einen Sturzhelm zu tragen, damit ich wenigstens weiter vorausdenken kann, als ich es jetzt tue. Ist es nicht so, dass diese Fahrer weit voraus denken? :D


@ skaboy, ich bitte Sie höflichst, wenn es Ihnen nichts ausmacht, würden Sie bitte den SRC-Button benutzen, um Ihren Code zu posten. Das haben wir allein in diesem Thread schon zu oft verlangt.


@ crossy, es ist fast eine Woche seit deinem ersten Beitrag vergangen. Sicherlich kann ich verstehen, dass du jetzt bei 4000 Zeilen keinen klaren Kopf mehr hast, ich selbst habe meinen jetzt auch hier. Wenn du es immer noch nicht verstehst, - ehm - kannst du uns bitten, den Close-Code für dich zu schreiben. Allerdings müssen Sie den Code auch nur ein wenig schreiben - und uns zeigen :D, RaptorUK's Code gerade oben ist direkter als meiner, denken Sie darüber nach und dann können Sie mit Ihrem EA weitermachen.

Mit der Art und Weise, wie Sie Code hier schreiben - zu viele unnötige wiederholte Code - Sie sollten ein wenig Sorge mit Ihrem 4000 Zeilen Code haben, dass es Ihre EA verlangsamen kann und macht Ihre EA verpassen einen Tick. Es ist in Ordnung, ein paar Punkte zu verpassen, aber was passiert, wenn Sie wie 10 Pips weg verpassen? und wahrscheinlich Ihre 4000 Zeilen können noch auf nur 400 Zeilen reduziert werden. Wer weiß, Ihr EA, werden mehr leichter und schneller :D

 
skaboy:

Ich finde das viel einfacher, und es funktioniert bei mir:


Es funktioniert nicht, wenn Sie mehrere zu schließende Aufträge haben ... lesen Sie dies und lernen Sie: Schleifen und Schließen oder Löschen von Aufträgen