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

 
PolarSeaman :

Üzgünüm, neden olmadığını anlamıyorum.

mümkün, ancak tam bir zamanlayıcı olmayacak

 if ( IsTesting ()) OnTimer ();
 
PolarSeaman :

Peki ya kene gelmezse? kene olmadan "başlamanız" gerekir

ilk tik senkronizasyon içindir ve başlangıç tik gelmezse piyasa kapanır orada yapacak bir şey yok

 

İyi akşamlar!

Bir kez daha yardım istemek zorundayım:

Belirli bir zaman aralığında bir emir açılmalıdır, son 30 dakika içerisinde bu sihirle bir emir açılmışsa açmaya gerek yoktur. şöyle yazıyorum:

 if ( TimeCurrent ()> StrToTime ( "00:01" ) && TimeCurrent ()< StrToTime ( "00:30" ))
{

//1я часть
for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
 {
   if (! OrderSelect (i, SELECT_BY_POS ))
     continue ;
   if ( OrderSymbol () != Symbol ())
     continue ;
   if ( OrderMagicNumber () != MagicNumber1)
     continue ;
   if ( TimeDayOfWeek ( OrderOpenTime ()) != TimeDayOfWeek ( TimeCurrent ()))
     continue ;   
  ++nCnt1;
  {
   if (nCnt1> 0 )
       return ;
  }
 }
//2ая часть
for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
 {
   if (! OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ))
     continue ;
   if ( OrderSymbol () != Symbol ())
     continue ;
   if ( OrderMagicNumber () != MagicNumber1)
     continue ;
   if ( TimeToStr ( TimeCurrent ()- OrderOpenTime (), TIME_MINUTES ) <= TimeToStr ( D'00:30' , TIME_MINUTES ))
     continue ;
  ++nCnt1;
  {
   if (nCnt1> 0 )
       return ;
  }
 }

//Открытие ордера
}

Eğer sadece ilk kısım kaldıysa sorun şu ki bu yarım saat içinde bir dur/al pozisyonu kapatılırsa bir diğeri açılır. Bu nedenle sipariş geçmişine girmek için 2. bölümü ekledim ve son 30 dakikada bu sihirle zaten bir sipariş varsa açmayın. Ancak ikinci kısımda bir sorun var - hala açılıyor.

Lütfen bana söyle!

 

burada saniyeler içinde saymalısın

 if ( TimeCurrent ()- OrderOpenTime () <= 30*60 )
 
Taras Slobodyanik :

burada saniyeler içinde saymalısın

Ne yazık ki yardımcı olmadı.

Bunu da denedim ama o da çalışmıyor:

   if ( TimeToStr ( TimeCurrent ()- OrderOpenTime (), TIME_SECONDS ) <= TimeToStr ( 30 * 60 , TIME_SECONDS ))
 
YanSay :

Ne yazık ki yardımcı olmadı.

Bunu da denedim ama o da çalışmıyor:

Neden tüm satırları karşılaştırıyorsun? Taras doğru söyledi - saniyeler içinde sayın. Seçeneği uymadı, çünkü hesap geçmişine girmediniz:

 //2ая часть
for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)

Bu bir çalışma düzeni döngüsüdür. Tarihe göre, döngü şöyle olacak:

 //2ая часть
for ( int i = OrdersHistoryTotal () - 1 ; i >= 0 ; i--)

Döngüde ayrıca, siparişin açılış saatini değil, kapanış saatini almanız gerekir.

 
Ihor Herasko :

Neden tüm satırları karşılaştırıyorsun? Taras haklı olarak dedi - saniyeler içinde sayın. Seçeneği uymadı, çünkü hesap geçmişine girmediniz:

Bu bir çalışma düzeni döngüsüdür. Tarihe göre, döngü şöyle olacak:

Döngüde ayrıca, siparişin açılış saatini değil, kapanış saatini almanız gerekir.


 if ( TimeCurrent ()> StrToTime ( "00:01" ) && TimeCurrent ()< StrToTime ( "00:30" ))
{

//1я часть
for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
 {
   if (! OrderSelect (i, SELECT_BY_POS ))
     continue ;
   if ( OrderSymbol () != Symbol ())
     continue ;
   if ( OrderMagicNumber () != MagicNumber1)
     continue ;
   if ( TimeDayOfWeek ( OrderOpenTime ()) != TimeDayOfWeek ( TimeCurrent ()))
     continue ;   
  ++nCnt1;
  {
   if (nCnt1> 0 )
       return ;
  }
 }
//2ая часть
for ( int i = OrdersHistoryTotal () - 1 ; i >= 0 ; i--)
 {
   if (! OrderSelect (i, SELECT_BY_POS ))
     continue ;
   if ( OrderSymbol () != Symbol ())
     continue ;
   if ( OrderMagicNumber () != MagicNumber1)
     continue ;
   if ( TimeCurrent () - OrderCloseTime () <= 30 * 60 )
     continue ;
  ++nCnt1;
  {
   if (nCnt1> 0 )
       return ;
  }
 }

//Открытие ордера
}

Doğru anlaşıldıysa satırlar hakkında, TimeToStr hakkında - bu metne çevrilmiş mi?

Düzeltildi, ancak yine de:

test cihazı

Tamamen aptalsam özür dilerim.

 
YanSay :

Doğru anlaşıldıysa satırlar hakkında, TimeToStr hakkında - bu metne çevrilmiş mi?

Düzeltildi, ancak yine de:

Tamamen aptalsam özür dilerim.

Durumunuzu yüksek sesle söyleyin ve sorunun ne olduğunu anlayın)

 if ( TimeCurrent () - OrderCloseTime () < = 30 * 60 )
 

Koşullu olarak, gösterge arabelleğinin önceki değerlerinden birine boş bir değer atanırsa, grafikten silinir mi?

veya arabellek boş olacaktır. Çizim grafikte kalacak mı?

 
YanSay :

Doğru anlaşıldıysa satırlar hakkında, TimeToStr hakkında - bu metne çevrilmiş mi?

Evet. Zamanı bir dizgeye dönüştürmek anlamsızdır çünkü zaman, saniyelerin sayısıdır. Bu sayı ile çalışmak dizelere göre çok daha kolay ve daha hızlıdır.

Düzeltildi, ancak yine de:

Tamamen aptalsam özür dilerim.

Birini düzelttiniz ve diğerini mahvettiniz))

Bunun yerine ikinci bölümde:

 if (! OrderSelect (i, SELECT_BY_POS ))
     continue ;

dönüş:

 if (! OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ))
     continue ;

Önceki denemede bu satır sizin için doğruydu.