OrderClose funktioniert nicht

 

Hallo,

Ich habe die folgende Codierung für meine EA, bitte helfen Sie mir, warum die OrderClose ist nicht triggerred? Brauche ich OrderSelect() zu verwenden? Was ist der Zweck von OrderSelect()? Vielen Dank!

//+------------------------------------------------------------------+
//|                                                       chuale.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.abc.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.abc.com"
#property version   "1.00"
#property strict

extern double   TakeProfit=500;
extern double   Lots=0.1;
extern double   StopLoss=280;

double     bar1;
double     bar2;
double     bar3;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  
//---
   
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
  int ticket;
  int total=OrdersTotal();
  int    counted_bars=IndicatorCounted();
   if(counted_bars>0) counted_bars--;
   {
      bar1=(iClose(Symbol(),PERIOD_M1,2)-iClose(Symbol(),PERIOD_M1,3))*100;
      bar2=(iClose(Symbol(),PERIOD_M1,1)-iClose(Symbol(),PERIOD_M1,2))*100;
      bar3=(iClose(Symbol(),PERIOD_M1,0)-iClose(Symbol(),PERIOD_M1,1))*100;
      if (bar1+bar2>1)
      {
      if(total<1)
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",12345,0,Green);
      if (bar3<-1) OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
      }
      if (bar1+bar2<-1)
      {
      if(total<1)
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",12345,0,Red);
      if (bar3>1)  OrderClose(OrderTicket(), OrderLots(),Ask,3,Red);
      }
   }
   
   return(0);
//---
   return(0);
  }
//+------------------------------------------------------------------+


 
Sie müssen nicht OrderSelect 4 OrderClose verwenden, aber Sie haben 2 für OrderTicket(), OrderLots()
 
qjol:
Sie müssen nicht OrderSelect 4 OrderClose verwenden, aber Sie haben 2 für OrderTicket(), OrderLots()


Lieber qjol,

Ich verstehe nicht ganz, was Sie meinen, könnten Sie bitte erklären. Ich danke Ihnen


 

in Ihrem Code

if (bar3>1)  OrderClose(OrderTicket(), OrderLots(),Ask,3,Red);

Sie verwenden OrderTicket() & OrderLots() & 4 dieser Funktionen müssen Sie OrderSelect() verwenden

Wie Sie in der Dokumentation sehen können:

Hinweis

Der Parameter pool wird ignoriert, wenn die Bestellung über die Ticketnummer ausgewählt wird. Die Ticketnummer ist ein eindeutiger Identifikator der Bestellung.

Um herauszufinden, aus welcher Liste die Bestellung ausgewählt wurde, muss die Abschlusszeit der Bestellung analysiert werden. Ist der Zeitpunkt des Orderschlusses gleich 0, ist die Order offen oder schwebend und wird aus der Liste der offenen Positionen des Terminals genommen.

Man kann eine offene Position von einem schwebenden Auftrag durch den Auftragstyp unterscheiden. Wenn die Orderschlusszeit ungleich 0 ist, handelt es sich um eine geschlossene Order oder eine gelöschte schwebende Order, die aus der Terminal-Historie ausgewählt wurde. Sie unterscheiden sich auch durch ihre Ordertypen voneinander.

Die Funktion OrderSelect() kopiert Orderdaten in die Programmumgebung und alle weiteren Aufrufe von OrderClosePrice(), OrderCloseTime(), OrderComment(), OrderCommission(), OrderExpiration(), OrderLots(), OrderMagicNumber(), OrderOpenPrice(), OrderOpenTime(), OrderPrint(), OrderProfit(), OrderStopLoss(), OrderSwap(), OrderSymbol(), OrderTakeProfit(), OrderTicket(), OrderType() Funktionen geben die zuvor kopierten Daten zurück. Das bedeutet, dass sich in einigen Fällen die Orderdetails (Eröffnungskurs, SL/TP Levels oder Verfallsdatum) ändern können und die Daten nicht mehr aktuell sind. Es wird dringend empfohlen, den OrderSelect()-Befehl aufzurufen, bevor Sie die Auftragsdaten anfordern.

 

Wenn ich also die aktuelle Ticketnummer und Lots verwende, muss ich OrderSelect nicht verwenden, richtig? Ich eröffne jeweils nur einen Auftrag. Kann ich wissen, wie ich die Ticketnummer des offenen Auftrags erhalte?

Nochmals vielen Dank

 
chuale:

Wenn ich also die tatsächliche Ticketnummer und Lots verwende, muss ich OrderSelect nicht verwenden, richtig? Ich eröffne jeweils nur einen Auftrag. Kann ich wissen, wie ich die Ticketnummer des offenen Auftrags erhalte?

Nochmals vielen Dank

Die OrderSend()-Funktion gibt bei Erfolg die Ticketnummer zurück. Ich schlage vor, dass Sie das Buch auf dieser Website von Anfang bis Ende lesen, um besser zu verstehen, wie man MQL verwendet, und auch die Referenzdokumentation für jede Funktion, die Sie verwenden, zu Rate ziehen, um besser zu verstehen, welche Parameter zu verwenden sind und was die Rückgabewerte sind.

 

Sehr geehrte Damen und Herren,

ich habe OrderSelect() eingefügt, aber OrderClose funktioniert immer noch nicht, bitte helfen Sie mir, vielen Dank.


//+------------------------------------------------------------------+
//|                                                       chuale.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.abc.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.abc.com"
#property version   "1.00"
#property strict

extern double   TakeProfit=500;
extern double   Lots=0.1;
extern double   StopLoss=300;

double     bar1;
double     bar2;
double     bar3;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  
//---
   
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
  int ticket;
  int total=OrdersTotal();
  int    counted_bars=IndicatorCounted();
   if(counted_bars>0) counted_bars--;
   {
      bar1=(iClose(Symbol(),PERIOD_M1,2)-iClose(Symbol(),PERIOD_M1,3))*100;
      bar2=(iClose(Symbol(),PERIOD_M1,1)-iClose(Symbol(),PERIOD_M1,2))*100;
      bar3=(iClose(Symbol(),PERIOD_M1,0)-iClose(Symbol(),PERIOD_M1,1))*100;
      if (bar2>1)
      {
      if(total<1)
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",12345,0,Green);
      OrderSelect(1,SELECT_BY_POS);
      if (bar3 <-1) OrderClose(OrderTicket(),Lots,Bid,3,Green);
      }
      if (bar2<-1)
      {
      if(total<1)
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",12345,0,Red);
      if ( bar3>1)  OrderClose(OrderTicket(), Lots,Ask,3,Red);
      }
   }
   
   return(0);
//---
   return(0);
  }
//+------------------------------------------------------------------+
 
Wer hat Ihnen gesagt, dass die Nummer der Bestellung 1 ist?
 
Ich erlaube nur einen offenen Auftrag zur gleichen Zeit.
 

Hallo zusammen,


Jetzt füge ich Ticket und Lots in die OrderClose ein, ohne OrderTicket() und OrderLots() zu verwenden, aber es schließt die Bestellung nicht auch. Bitte helfen Sie.

//+------------------------------------------------------------------+
//|                                                       chuale.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.abc.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.abc.com"
#property version   "1.00"
#property strict

extern double   TakeProfit=500;
extern double   Lots=0.1;
extern double   StopLoss=300;

double     bar1;
double     bar2;
double     bar3;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  
//---
   
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
  int ticket;
  int total=OrdersTotal();
  int    counted_bars=IndicatorCounted();
   if(counted_bars>0) counted_bars--;
   {
      bar1=(iClose(Symbol(),PERIOD_M1,2)-iClose(Symbol(),PERIOD_M1,3))*100;
      bar2=(iClose(Symbol(),PERIOD_M1,1)-iClose(Symbol(),PERIOD_M1,2))*100;
      bar3=(iClose(Symbol(),PERIOD_M1,0)-iClose(Symbol(),PERIOD_M1,1))*100;
      if (bar2>1)
      {
      if(total<1)
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",12345,0,Green);
      
      if (bar3 <-1) OrderClose(ticket,Lots,Bid,3,Green);
      }
      if (bar2<-1)
      {
      if(total<1)
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",12345,0,Red);
      if ( bar3>1)  OrderClose(ticket, Lots,Ask,3,Red);
      }
   }
   
   return(0);
//---
   return(0);
  }
//+------------------------------------------------------------------+


 
chuale:

Hallo zusammen,


Jetzt füge ich Ticket und Lots in die OrderClose ein, ohne OrderTicket() und OrderLots() zu verwenden, aber es schließt die Bestellung nicht. Bitte helfen Sie.



ticket ist eine lokale Variable, also wird es beim nächsten Tick nicht den gleichen Wert haben.

Außerhalb der Funktionen platzieren , um sie zu Globalscope zu machen

double     bar1;
double     bar2;
double     bar3;
int ticket;