Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 229

 
Aleksei Stepanenko:
Danke, gibt es eine andere Lösung? Der Berater eröffnet dann den Handel und schließt ihn sofort wieder ab.
 
Nargiz Ravanova:
Danke, gibt es eine andere Lösung? Danach eröffnet und schließt der EA die Position sofort.

Sie müssen die Zeit auf die Bedingung festlegen

op>=Profit

und aktualisieren Sie sie erst, wenn die Position geschlossen ist.

Ziehen Sie dann von der aktuellen Zeit die gespeicherte Zeit ab
. Wenn die angegebenen Sekunden abgelaufen sind, schließen Sie die Positionen.

 
input int Second=10;
ulong LastTime=0;

void OnTick()
   {
   if(op>=Profit) LastTime=GetMicrosecondCount();
   if(LastTime>0 && GetMicrosecondCount()-LastTime>(ulong)Second*1000000) {CloseAll(); LastTime=0;}
   }
 
input int Second = 10;
datetime LastTime = 0;

void OnTick()
  {
   if(op >= Profit && LastTime == 0)
      LastTime = TimeCurrent();
   if(LastTime > 0 && TimeCurrent() - LastTime >= Second)
     {
      CloseAll();
      LastTime = 0;
     }
  }
 

Ich habe das getan


double op = CalculateProfit();
int time_waiting=0;

if (op >= Profit)
time_waiting = TimeLocal() + 10;
if (TimeLocal() < time_waiting)
{
CloseAll();

}


aber ich erhalte eine Fehlermeldung


möglicher Datenverlust aufgrund von Typumwandlung

 

ist kein Fehler, sondern eine Warnung: Bei der Konvertierung von einem Typ in einen anderen können Daten verloren gehen:

datetime time_waiting;
 
Nargiz Ravanova:

Das heißt, ich möchte nicht, dass der EA geschlossen wird, sobald ich 2 Pfund sehe, sondern ein bisschen mehr.

Und was, immer nach 10 Sekunden ist der Gewinn größer?)

 
Folgen Sie dem MT4 Beispiel "STRINGS: ASCII CHARACTERS TABLE AND USE"

//+------------------------------------------------------------------+
//| StringLowerCase |
//+------------------------------------------------------------------+
string StringLowerCase(string str)
  {
   string s = str;
   int lenght = StringLen(str) - 1, symbol;
   while(lenght >= 0)
     {
      symbol = StringGetChar(s, lenght);
      if((symbol > 64 && symbol < 91) || (symbol > 191 && symbol < 224))
         s = StringSetChar(s, lenght, symbol + 32);// тут possible loss of data due to type conversion
      else
         if(symbol > -65 && symbol < -32)
            s = StringSetChar(s, lenght, symbol + 288);// тут possible loss of data due to type conversion
      lenght--;
     }
   return(s);
  }
//+------------------------------------------------------------------+
//| StringUpperCase |
//+------------------------------------------------------------------+
string StringUpperCase(string str)
  {
   string s = str;
   int lenght = StringLen(str) - 1, symbol;
   while(lenght >= 0)
     {
      symbol = StringGetChar(s, lenght);
      if((symbol > 96 && symbol < 123) || (symbol > 223 && symbol < 256))
         s = StringSetChar(s, lenght, symbol - 32);// тут possible loss of data due to type conversion
      else
         if(symbol > -33 && symbol < 0)
            s = StringSetChar(s, lenght, symbol + 224);// тут possible loss of data due to type conversion
      lenght--;
     }
   return(s);
  }

Wenn es Ihnen nichts ausmacht, helfen Sie mir bitte, es zu reparieren...
 
s = StringSetChar(s, lenght, ushort(symbol + 32));
string  StringSetChar(
   string&   string_var,       // строка
   int       pos,              // позиция
   ushort    value             // код символа
   );

Übernahme der vollen Verantwortung für die Tatsache, dass

ushort

Der Typ unsigned short ist der Typ ushort, der ebenfalls eine Größe von 2 Byte hat. Der Mindestwert ist 0, der Höchstwert 65.535.

int

Der Ganzzahltyp int hat eine Größe von 4 Byte (32 Bit). Der Mindestwert beträgt -2 147 483 648, der Höchstwert 2 147 483 647.

 
Iurii Tokman:

Ich habe getan, wie Sie gesagt haben, aber aus irgendeinem Grund nach dem Schließen der Expert Advisor schließt ein paar Trades, trotz der Tatsache, dass ich eine Stunde Schlupf nach der CloseAll() Funktion haben.

input int Second = 10;
datetime LastTime = 0;

void OnTick()

double op = CalculateProfit();


if (op >= Profit && LastTime == 0)
LastTime = TimeCurrent ();
if(LastTime > 0 && TimeCurrent () - LastTime >= Second)

{
CloseAll();
LastTime = 0;

SendNotification("Trade is over");
Sleep(60*60000);// 60.000 = 1 min

}