MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1534

 
Eugen8519 :

Siparişler böyle kapatılır

yukarda yazdığımı yap...

veya OnTick() kodunu gönderin

 
Eugen8519 :

Siparişler böyle kapatılır

Böyle bir yapı olmalı

 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if (UseTimeLimit)
     {
       YesStop= true ;
       MqlDateTime str1;
       TimeToStruct ( TimeCurrent () , str1);
       if (str1.hour > startHour && str1.hour < stopHour)
          YesStop= false ;
     }
   if (YesStop== false )
     {
       if (EMA0...)
        {
         .....
         OPENORDER( "Sell" );
        }
   
       if (EMA0...)
        {
         .....
         OPENORDER( "Buy" );
        }
     }
//---
   if (EMA0...)
     {
      .....
      CLOSEORDER( "Sell" );
     }

   if (EMA0...) 
     {
      .....
      CLOSEORDER( "Buy" );
     }
  }
//+------------------------------------------------------------------+
void CLOSEORDER( string ord)
  {
   .....
  }
//---
void OPENORDER( string ord)
  {
   .....
  }
 
Peki, tavsiyen için teşekkürler, akşam kontrol edeceğim, sonra abonelikten çıkacağım.
 
MakarFX :

Böyle bir yapı olmalı

yanılmıyorsam şöyle yazabilirsin

   if (UseTimeLimit)
     {
       YesStop= true ;
       MqlDateTime str1;
       TimeCurrent (str1);
       if (str1.hour > startHour && str1.hour < stopHour)
          YesStop= false ;
     }
 
Eugen8519 :
Peki, tavsiyen için teşekkürler, akşam kontrol edeceğim, sonra abonelikten çıkacağım.

baykuş başladığında ayarlarda UseTimeLimit ayarlanmışsa, o zaman

bu işlev OnTick () yerine OnInit()'te daha iyidir

 
Vitaly Muzichenko :

yanılmıyorsam şöyle yazabilirsin

genelde böyle yazarım

 if (TimeHour(time[i])>=Time_Start&&TimeHour(time[i])<TimeFinish)

veya daha da kolay

 if (Hour()>=Time_Start&&Hour()<TimeFinish)
 

Tünaydın! Gösterge çizgisinin nasıl doğru bir şekilde ortalamasını alacağımı söyler misiniz? Per_1 periyoduna sahip ana eğri, Per_2 ortalama periyoduna sahip Buffer_2 [] tamponlu basit bir ortalama bloğu ekleyene kadar normal olarak çizilir (Buffer_1[]).

int OnCalculate(standart seçenekler)

{

int i, j, limit;

if(rates_total <= Per_1)

dönüş(0);

//Son hesaplanan çubuk yeniden hesaplanacak

limit = oranlar_toplam - önceki_hesaplanan - Per_1;

if(önceki_hesaplanmış > 0)

sınır++;

//Gösterge arabelleklerinin hesaplanması ve doldurulması

for(i=0; i < limit; i++)

{

// Göstergenin ana hattının hesaplanması

Tampon_1[i] = Eğri Formülü

çift Toplam = 0;

for(j = i; j < Per_2 + i; j++)

{

// Ortalama alma çizgisinin hesaplanması

Toplam += Arabellek_1[j];

Buffer_2[i] = Toplam / Per_2;

}

}

dönüş(oranlar_toplam);

}

 
Oleksandr Nozemtsev :

Tünaydın!

Kodu Yapıştır

Sorunuzun cevabı bu gibi görünüyor.
 
Eugen8519 :
Sorun bu, sadece starthour->stophour emirlerini açar ve kapatır.
Ve açık siparişler stophour'dan sonra kapanmaz

Stophour'dan sonra ticaret yapamayacağınız için

Pozisyonların kapanmadan önce açılması, takip edilmesi ve diğer desteklerin mantığını uzun süredir yazıyorum. Büyük ölçüde doğrudur, başka bir şey açmadan önce zaten açık olanı kontrol etmeniz gerekir.

Doğru bir şekilde yazdınız, sadece blokları bazı yerlerde değiştirmeniz gerekiyor:

 MqlDateTime str;
void OnTick ()
 {
 // Close Positions
 TrailingStop();

 if (условие_закрытия)
  {
   ClosePos();
  }

 // Open Positions
 if (UseTimeLimit)
  {
     TimeCurrent (str);
     if (str.hour > startHour && str.hour < stopHour)
     {
      OpesPos(...);
      ...
     }
  }
// end
}
 

Güzel! Çalışıyor, teşekkürler!