Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 229

 
Aleksei Stepanenko :
Teşekkürler, başka bir çözüm var mı? Bundan sonra, danışman anlaşmayı açar ve hemen kapatır.
 
Nargiz Ravanova :
Teşekkürler, başka bir çözüm var mı? Bundan sonra, danışman anlaşmayı açar ve hemen kapatır.

sağlanan zamanı düzeltmeniz gerekiyor

op>=Profit

ve pozisyonlar kapanana kadar tekrar güncellemeyin

sonra şimdiki zamandan hatırladığınız zamanı çıkarın
belirtilen saniye geçtiğinde, pozisyonları kapatın

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

öyle yaptım


doubleop = CalculateProfit();
int zaman_bekleme=0;

if (op >= Kâr)
time_waiting = TimeLocal() + 10;
if (TimeLocal() < time_waiting)
{
Hepsini kapat();

}


ama bende hata veriyor


tür dönüştürme nedeniyle olası veri kaybı

 

bu bir hata değil, bir uyarıdır: bir türden diğerine dönüştürülürken veriler kaybolabilir:

 datetime time_waiting;
 
Nargiz Ravanova :

Yani, danışmanın 2 dolar görür görmez hemen kapanmasını istemiyorum, biraz daha fazlasını.

ve ne, her zaman 10 saniye sonra kâr daha mı büyük?)

 
MT4 ile örneğe göre yapılmıştır "STRINGS: ASCII KARAKTER TABLOSU VE KULLANIMI"

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

Zor değilse, lütfen düzeltmeme yardım et ..
 
s = StringSetChar(s, lenght, ushort (symbol + 32 ));
 string   StringSetChar(
   string &   string_var,       // строка
   int        pos,               // позиция
   ushort      value              // код символа
   );

Tüm sorumluluğu üstlenerek, aşağıdakileri göz önünde bulundurarak:

kısa

İmzasız kısa tür ushort olup, boyutu da 2 bayttır. Minimum değer 0, maksimum değer 65535'tir.

int

Tamsayı türü int , 4 bayt (32 bit) bir boyuta sahiptir. Minimum değer -2 147 483 648, maksimum değer 2 147 483 647'dir.

 
Iurii Tokman :

Dediğiniz gibi yaptım, sadece bir nedenden dolayı, kapanıştan sonra danışman, CloseAll() işlevinden sonra bir saat uykum olmasına rağmen, anlaşmaları birkaç kez açıp kapatıyor.

 input int Second = 10 ;
datetime LastTime = 0 ;

void OnTick ()

doubleop = CalculateProfit();


if (op >= Kâr && LastTime == 0)
LastTime = TimeCurrent();
if(LastTime > 0 && TimeCurrent () - LastTime >= Saniye)

{
Hepsini kapat();
SonZaman = 0;

SendNotification ("Ticaret sona erdi");
Uyku(60*60000);// 60.000 = 1 dk

}