Jump to content
Tom Next - Daytrading Community

OrderSend verhindern wenn bereits eine Order des jeweiligen Handelsinstrumentes geöffnet ist


Recommended Posts

Posted


Mein ERSTER EA macht mir so manchen Kopfschmerz.

Einer davon ist
dass der EA zu späteren Zeiten (gem. Strategie ja richtig) immer neue Order öffnet,
obwohl die erste Order noch nicht via SL/TP abgearbeitet ist.

Wie kann man also abfragen, ob eine Order im jeweiligen Handelsinstrument (z.B. USDGBP)bereits offen ist???

Wenn eine geöffnet ist, dann möchte ich die OrderSend Befehlt überspringen,

Danke für die Hilfe

Posted

Mit

 

int max_Orders = 10;

if(OrdersTotal()<max_Orders)
{
Sell_Ticket=OrderSend....
}
 

 


verhindere ich erfolgreich die Überschreitung maximal offener Order (hier z.B. nicht mehr als 10 offene Order)
ich suche jetzt einen ähnlichen Befehl, mit dem ich die maximal offenen Order des jeweiligen Handelsinstrumentes abfragen kann.

also z.B.: if(Orders_Symbol()<1)

Posted

Zum Abfragen, ob schon eine Order offen ist musst Du die offene Tradeliste durchgehen.

 

      for (int k = OrdersTotal()-1; k >= 0; k--) {
       if (OrderSelect(k, SELECT_BY_POS, MODE_TRADES)==true) {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) {

               if (OrderType() == OP_BUY || OrderType() == OP_SELL) -> Trade ist offen;

         }
       } 
      } 
Posted (edited)

Danke, ziemlich komplex.

Verstehe ich richtig, dass ich

1.) die Variable MagicNumber, deren Parameter in meinem OrderSend-Befehl mit NULL gefüllt ist
in den OrderSend-Befehl austauschen muss? - also statt NULL dann MagicNumber ?

2.) Muss ich am Kopf des EA die Zeile

extern int MagicNumber = 2017; // (2017 ist natürlich beliebig, richtig?)

einfügen?

Das mit der MagicNumber hab ich nicht auf meinem Schirm!!!

Edited by UweBln
Posted

extern int MagicNumber = 2017;

int SELL_Ticket;



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

//| Expert tick function |

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

void OnTick()

{

// Doppelte Order prüfen und verhindern

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

{

if (OrderSelect(k, SELECT_BY_POS, MODE_TRADES)==true)

{

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)

{

if (OrderType() == OP_BUY || OrderType() == OP_SELL)

{

// PlayAlert_BO_123(" -> Trade ist bereits offen "); // PlayAlert + Message

Alert(" -> Trade ist offen ");


SELL_Ticket=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,(Bid+0.003),(Bid-0.003),NULL,MagicNumber,0,clrRed);


}

}

}

}

}

//+------------------------------------------------------------------+
Posted

Die MagicNumber dient dazu dem EA seine Trades zuordnen zu können damit er nicht irgendwelche manuellen Trades o.ä. modifiziert. Die muss natürlich auch bei der Tradeeröffnung mitgegeben werden.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...