OrderClose funktioniert nicht - Seite 5

 
Danke GumRai
 

Hallo!


ich hänge EA an einige verschiedene Währungs-Charts an. Die EA wird viele Aufträge in einem einzigen Diagramm öffnen, wenn Bedingungen erfüllt. Welche Kodierung, um sicherzustellen, nur eine Bestellung pro Chart?

 
chuale:

Hallo!


Ich hänge EA an einige verschiedene Währungs-Charts an. Die EA wird viele Aufträge in einem einzigen Diagramm öffnen, wenn Bedingungen erfüllt. Welches Coding stellt sicher, dass nur eine Order pro Chart geöffnet wird?


Schleife durch offene Aufträge und prüfen Sie auf magische Zahl und Symbol.

Wenn bereits ein Auftrag offen ist, öffnen Sie keine weiteren mehr.

PS. Sie hätten wirklich einen neuen Thread eröffnen sollen, da Ihre Frage in keiner Weise mit dem Threadtitel zusammenhängt :)

 
chuale:

Hallo thrdel,

Bezieht sich Time[0] auf die Zeit von Takt 0? Gibt es Time[1], Time [2] usw.? Ich habe versucht, es zu googeln, aber nicht viele Informationen im Internet. Wenn ich diesen EA mit zwei Währungspaaren verbinde, bedeutet das, dass OrderSelect nur die Orders im Chart selbst oder alle Orders im Terminal auswählt?




Time[0] ist die Zeit, zu der der aktuelle Balken begonnen hat. Ja, Time[1] ist die Zeit, zu der der vorherige Balken begonnen hat, und so weiter.

Wenn Sie denselben EA auf mehreren Charts laufen lassen wollen, müssen Sie sicherstellen, dass die Variable "MagicMunber" für jeden EA unterschiedlich ist, auch wenn Sie dasselbe Symbol auf verschiedenen Charts haben.

Dann werden sich die EA's nicht gegenseitig in ihren Aufträgen behindern.

OrderSelect() holt sich den Wert nicht vom Chart, sondern vom Server.

Die Informationen über Ihr Konto und Ihre Orders werden auf dem Server gespeichert, und deshalb wird Ihre Stop- oder Tp-Order immer noch ausgeführt, wenn Sie Ihren Computer ausschalten.

 
chuale:

Hallo thrdel,


Warum bekomme ich diese Warnmeldung "implicit conversion from 'number' to 'string' postin forum.mq4 69 61" für die Codierung " if(ticket<0)Print("Error OP_BUY order failed, error: "+GetLastError());"?


Wenn Sie eine Double-Variable mit Comment() anzeigen oder mit Print() drucken wollen, müssen Sie sie mit der Funktion DoubleToString() in einen String umwandeln.

Für int-Variablen ist die Konvertierung offensichtlich, so dass, wenn Sie nicht IntToString () verwenden, um dies zu tun, wird es noch kompilieren und arbeiten, da es so offensichtlich ist.

 
chuale:

Hallo!


Ich hänge den EA an einige verschiedene Währungs-Charts an. Der EA wird viele Aufträge in einem einzigen Chart öffnen, wenn die Bedingungen erfüllt sind. Welcher Code sorgt dafür, dass nur eine Order pro Chart geöffnet wird?


Hallo Chuale,

Ich habe ein paar Änderungen an Ihrem EA vorgenommen, damit er funktioniert.

MagicNumber ist eine Variable, die Sie haben, um sicherzustellen, dass es auf jedem Chart unterschiedlich ist!

Wenn Sie möchten, dass ich Ihnen erkläre, warum und wie die Änderungen funktionieren, senden Sie mir eine E-Mail und ich helfe Ihnen gerne, wenn ich kann.

Sie können selbst einige Tests durchführen und sehen, wie es funktioniert, ich habe es am USDJPY getestet.

Die Variablen Max und Min ersetzen die Werte 1 und -1 in Ihrer Bedingung, so dass Sie optimieren können und sehen, ob andere Werte besser funktionieren.


if(bar2 <-1) //changed to 
if(bar2 < Min
if(bar2 > 1) //changed to 
if(bar2 > Max

Wissen Sie, wie man Parameter optimiert?

Wenn Sie Fragen haben, lassen Sie es mich wissen oder schreiben Sie mir.

Hier ist der Code:

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

extern double   TakeProfit=150;
extern double   Lots=0.1;
extern double   StopLoss=300;
extern int      Max = 6;
extern int      Min = -9;
extern int      MagicNumber = 12345;
extern int      Slip  = 3;
double     bar1;
double     bar2;
double     bar3;
double     bar3max,bar3min;
int        myTrades,ticket;
datetime   previousTime;
int        xMultiply;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {

//---
if(Digits==3) xMultiply=100;
if(Digits==5) xMultiply=10000;
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---

   return(0);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
 
   myTrades = CountTrades();
//
   bar1=(iClose(Symbol(),0,2)-iClose(Symbol(),0,3))*xMultiply;
   bar2=(iClose(Symbol(),0,1)-iClose(Symbol(),0,2))*xMultiply;
   bar3=(iClose(Symbol(),0,0)-iClose(Symbol(),0,1))*xMultiply;
   //
   if(myTrades>0)
     {
      if(bar3<Min) CloseThisSymbolAll("OP_BUY");
      if(bar3>Max) CloseThisSymbolAll("OP_SELL");
     }
  //
   if(Time[0]==previousTime) return(0);    
   previousTime=Time[0];          
   //
   if(myTrades<1)
     {
      if(bar2>1)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",MagicNumber,0,Green);
         if(ticket<0)Print("Error OP_BUY order failed. error : "+GetLastError()); 
         return(0);
        }
      if(bar2<-1)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",MagicNumber,0,Red);
         if(ticket<0)Print("Error OP_SELL order failed. error : "+GetLastError());
         return(0); 
        }
     }
   return(0);
  }
//========================================================================
int CountTrades()
{
int count=0;
int trade;
for(trade=OrdersTotal()-1;trade>=0;trade--)
   {
   OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
   if(OrderSymbol()!=Symbol() || OrderMagicNumber() != MagicNumber)
   continue;
   if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)
   if(OrderType()==OP_SELL || OrderType()==OP_BUY)
   count++;
   }
return(count);
}
//========================================================================
void CloseThisSymbolAll(string direction)
  {
  string dir = direction;
   int trade;
   for(trade=OrdersTotal();trade>=0;trade--)
     {
      OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!=Symbol()) continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
        {
         if(OrderType()==OP_BUY && dir == "OP_BUY")OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue);
         if(OrderType()==OP_SELL&& dir == "OP_SELL")OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
        }
     }
  }
//========================================================================
 

Hallo thrdel,


Vielen Dank. Sie sind sehr freundlich und hilfsbereit. Ich werde Ihre Codierung zuerst durchgehen. Nochmals vielen Dank.

 

Hallo Thrdel,

Das heißt, ich muss bei jedem Backtest verschiedene Werte für Max und Min ausprobieren, um den optimalen Wert zu ermitteln?

Danke