Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 229

 
Aleksei Stepanenko:
спасибо, есть какое нить другое решение? После этого советник открывает и сразу же закрывает сделку.
 
Nargiz Ravanova:
спасибо, есть какое нить другое решение? После этого советник открывает и сразу же закрывает сделку.

вам нужно зафиксировать время при условии 

op>=Profit

и больше его не обновлять пока не закрыты позиции

затем от текущего времени отнимать время которое запомнили
когда пройдут заданные секунды, закрывать позиции

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

я так сделала


double op = CalculateProfit();
      int time_waiting=0;
      
      if (op >= Profit)
      time_waiting = TimeLocal() + 10;
      if (TimeLocal() < time_waiting)
      {
           CloseAll();

}


но при этом мне выдает ошибку


possible loss of data due to type conversion

 

это не ошибка, а предупреждение: возможна потеря данных при преобразовании из одного типа в другой:

datetime time_waiting;
 
Nargiz Ravanova:

 То есть я не хочу чтобы советник сразу закрыл как только увидел 2 бакса, а чуть больше.   

и что, всегда через 10 секунд прибыль больше?)

 
Сделал по примеру с МТ4 "СТРОКИ: ТАБЛИЦА СИМВОЛОВ ASCII И ЕЁ ИСПОЛЬЗОВАНИЕ"

//+------------------------------------------------------------------+
//| 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);
  }

Если не сложно помоги пожалуйста исправить..
 
s = StringSetChar(s, lenght, ushort(symbol + 32));
string  StringSetChar(
   string&   string_var,       // строка
   int       pos,              // позиция
   ushort    value             // код символа
   );

Принимая всю ответственность на себя с учётом того, что:

ushort

Беззнаковым типом short является тип ushort, который также имеет размер 2 байта. Минимальное значение равно 0, максимальное значение 65 535.

int

Целый тип int имеет размер 4 байта (32 бита). Минимальное значение -2 147 483 648, максимальное значение 2 147 483 647.

 
Iurii Tokman:

я сделала как вы сказали, просто почему то после закрытия советник открывает закрывает сделки пару раз, несмотря на то что после функции CloseAll() стоит у меня слип на час.

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 end");
      Sleep(60*60000);// 60.000 = 1 min
      
      }