Questions des débutants MQL4 MT4 MetaTrader 4 - page 229

 
Aleksei Stepanenko:
Merci, y a-t-il une autre solution ? Le conseiller ouvre alors et ferme immédiatement la transaction.
 
Nargiz Ravanova:
Merci, y a-t-il une autre solution ? Ensuite, l'EA ouvre et ferme immédiatement la position.

vous devez fixer l'heure sur la condition

op>=Profit

et ne pas le rafraîchir jusqu'à ce que la position soit fermée

soustrayez ensuite de l'heure actuelle l'heure que vous avez mémorisée
, lorsque les secondes données sont écoulées, fermez les positions.

 
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;
     }
  }
 

Je l'ai fait.


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

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

}


mais cela me donne une erreur


perte éventuelle de données due à la conversion de type

 

n'est pas une erreur, mais un avertissement : des données peuvent être perdues lors de la conversion d'un type à un autre :

datetime time_waiting;
 
Nargiz Ravanova:

C'est-à-dire que je ne veux pas que l'EA se ferme dès que je vois 2 livres, mais un peu plus.

Et quoi, toujours après 10 secondes le bénéfice est plus grand ?).

 
Suivi de l'exemple MT4 "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);
  }

Si cela ne vous dérange pas, aidez-moi à le réparer...
 
s = StringSetChar(s, lenght, ushort(symbol + 32));
string  StringSetChar(
   string&   string_var,       // строка
   int       pos,              // позиция
   ushort    value             // код символа
   );

Accepter l'entière responsabilité du fait que

ushort

Le type courtnon signé est le type ushort, qui a également une taille de 2 octets. La valeur minimale est 0, la valeur maximale est 65 535.

int

Le type entier int a une taille de 4 octets (32 bits). La valeur minimale est de -2 147 483 648, la valeur maximale est de 2 147 483 647.

 
Iurii Tokman:

J'ai fait comme vous l'avez dit, mais pour une raison quelconque, après la fermeture, le conseiller expert ferme quelques transactions, malgré le fait que j'ai un délai d'une heure après la fonction CloseAll().

input int Second = 10;
datetime LastTime = 0;

void OnTick()

double op = CalculateProfit() ;


si (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

}

Raison: