RefreshRates() işlevi neyi günceller? - sayfa 6

 
Mikhail Nazarenko :

MT4 karanlık bir kutu ve orada neler olduğunu yalnızca gerçek koşullarda test ederek değerlendiriyorum. Başlangıçta uykuyu hiç kullanmadım, ancak bazı saatlik çubuklarda saçmalık olunca uyku ekledim ve sorun ortadan kalktı. MT4 zaman serileri hangi sırayla ve nasıl güncellenir ? "En saf gerçek kodun tanıkları" beni azarlasın, asıl mesele, paylaştığım sorunlarımı çözmüş olmam.

Ben kendim bununla karşılaştım, test cihazında her şey açık, gerçek piyasada - saçmalık.

Danışmanı pazartesiden beri yönetiyorum ve şaşırdım.

Birkaç açılış doğrudur, bundan sonra satmak yerine tekrar satın alın ve bunun tersi de geçerlidir.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

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

Vitaly Muzichenko , 2021.02.15 21:48

Algoritmayı hızlıca kontrol etmek için MT4'ü açtım.

Test cihazında düzgün çalışması çok garip ve gerçeğe ayarladıktan sonra işlemleri tersine çeviriyor. Kod basittir, sadece 2 gösterge tamponu



Gösterge kodu en basitidir

   double poi= Point ();
   for ( int i = limit- 2 ; i> 0 ; i--) {
       if (open[i+ 0 ] > close[i+ 0 ] && MathAbs (open[i+ 0 ] - high[i+ 0 ]) < 0.1 * poi)
         Dn[i] = high[i+ 0 ] + 30 * poi;
       if (open[i+ 0 ] < close[i + 0 ] && MathAbs (open[i+ 0 ] - low[i+ 0 ]) < 0.1 * poi)
         Up[i] = low[i+ 0 ] - 30 * poi;
   }
 
Vitaly Muzichenko :

Ben kendim bununla karşılaştım, test cihazında her şey açık, gerçek piyasada - saçmalık.

Danışmanı pazartesiden beri yönetiyorum ve şaşırdım.

Birkaç açılış doğrudur, bundan sonra satmak yerine tekrar satın alın ve bunun tersi de geçerlidir.


Gösterge kodu en basitidir

Bu konuyu açmadan önce karşılaştığım saçmalığın aynısı. Gerçek hayatta nedense terminal güncel olmayan veriler veriyor, yukarıda isRefresh() fonksiyonunu yazdım. Onunla dene. Her şey benim için iyi çalıştı.

Bu senin için kayma değil mi?

 
Vitaly Muzichenko :

Gösterge kodu en basitidir

gösterge ticaret açıyor mu?

oklar aynı - sorun EA kodunda

 
Mikhail Nazarenko :

Öğrenmeye başladım, bu yüzden yardım edin, kodla, testler, bir forumdaki bir konunun bağlantısı veya belgelerle onaylayın. Geri kalan her şey beyin mastürbasyonudur.

Lütfen belirsiz olanı açıklayın. Okuduktan sonra, ana sorun çözülmüş gibi görünüyordu ve 4'ün ne kadar eski olduğunu tartışmaya devam ediyor)

Böyle bir zaman aralığı yüklemesini ekledikten sonra hiçbir problem yaşamadım

 bool HistoryCheck(int TF)
  {
   int err= 0 ;   
   int i= 0 ;
   datetime d1= 0 ,d2= 0 ;
   while (i< 10 )
    { 
     if ((d1= iTime ( NULL ,TF, 0 ))== 0 || (d2= iTime ( NULL ,TF,InpPeriod* 2 ))== 0 )          
         PrintFormat ( "itime=0, %s, %s" , TimeToString (d1), TimeToString (d2)) ; 
   err= GetLastError ();    
   if (err== 4066 )    
    {
    	PrintFormat ( "Error=4066" ) ; 
    	Sleep( 500 );     	
    }
   else break;	
      SleepA( 100 );
      i++;                 
    } // while
   if(i==10)
	 { Comment("Update failed. Go to the next attempt."); return(false); }
   PrintFormat ( "HistoryCheck %d , %s, %s" ,i, TimeToString (d1), TimeToString (d2)) ;
   Comment ( "" ); 
   return ( true );
  }

Zaman aralığına nadiren ve düzensiz bir şekilde erişmeniz gerekiyorsa, bu indirme kontrolden önce tekrar yapılmalıdır (ancak tablonun açık olması zorunlu değildir), aksi takdirde böyle bir kontrol yardımcı olacaktır.

   if (( iTime ( NULL ,TF, 0 )+ PeriodSeconds (TF))< TimeCurrent ()
   || ( iTime ( NULL ,TF, 1 )+ PeriodSeconds (TF)* 2 )< TimeCurrent ())
   HistoryCheck(TF)
Документация по MQL5: Операции с графиками / ChartOpen
Документация по MQL5: Операции с графиками / ChartOpen
  • www.mql5.com
ChartOpen - Операции с графиками - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mikhail Nazarenko :

Bu konuyu açmadan önce karşılaştığım saçmalığın aynısı. Gerçek hayatta nedense terminal güncel olmayan veriler veriyor, yukarıda isRefresh() fonksiyonunu yazdım. Onunla dene. Her şey benim için iyi çalıştı.

Bu senin için kayma değil mi?

Hayır, açılış yeni bir 0 çubuğunda, sinyal kapalı bir çubukta aranıyor, yani 1.

Bazen EA'nın iCustom() aracılığıyla beklenenden farklı bir şey aldığı bir durum ortaya çıkar. Yine, bazen, ama sık sık değil.

İşte taze bir tane daha. Bir satın alma işlemini doğru şekilde açtım - bir sinyalde, göstergeden gelen bir sonraki sinyal de bir satın almadır (ok altında), ancak bir nedenden dolayı EA, satın alma işlemini kapatırken ve bir satış açarken iCustom() aracılığıyla satış yapmak için bir sinyal aldı. , ancak ikinci bir satın alma olmalıdır.

Zaman dizilerinde görülecek bir şey doğru değil, ben anlayana kadar 4 gün önce keşfedildi ve muhtemelen çözemeyeceğim, hesaplamayı danışmana aktaracağım. Test cihazında herhangi bir sorun görmedim.

Şu anda

--- Ve az önce bulundu


 

Ve bir şey daha var, ama satmak yerine satın al açık. Dediğim gibi, bu sık olmaz, ama olur.

Gösterge kodu basittir - hile yoktur


 
Aleksey Mavrin :

Lütfen belirsiz olanı açıklayın. Okuduktan sonra, ana sorun çözülmüş gibi görünüyordu ve 4'ün ne kadar eski olduğunu tartışmaya devam ediyor)

Böyle bir zaman dilimi yüklemesini ekledikten sonra hiçbir problem yaşamadım

Zaman aralığına nadiren ve düzensiz bir şekilde erişmeniz gerekiyorsa, bu indirme kontrolden önce tekrar yapılmalıdır (ancak tablonun açık olması zorunlu değildir), aksi takdirde böyle bir kontrol yardımcı olacaktır.

Her şey yolunda

bu yardımdan:

Göstergelerin ve zaman serilerinin verilerine erişim, istenen verilerin hazır olmasına bakılmaksızın gerçekleştirilir (eşzamansız erişim olarak adlandırılır). Bu, özel göstergeleri hesaplamak için kritik öneme sahiptir, bu nedenle istenen veriler eksikse Copy...() türünün işlevleri hemen bir hata döndürür. Ancak, Uzman Danışmanlardan ve komut dosyalarından erişildiğinde, eksik zaman dizilerini indirmek veya gösterge değerlerini hesaplamak için gereken süreyi sağlamak için tasarlanmış kısa bir duraklama ile veri almak için birkaç girişimde bulunulur.


Başka bir çizelgeden bilgi isteniyorsa (enstrümanın adı ve/veya zaman diliminin değeri mevcut olanlardan farklıysa), müşteri terminalinde ilgili çizelge açılmamış olabilir ve gerekli verilerin talep edilmesi gerekir. sunucudan. Bu durumda, ERR_HISTORY_WILL_UPDATED hatası (4066 - istenen geçmiş veriler güncelleme durumundadır) _Last_error değişkenine yerleştirilecektir ve istek bir süre sonra yeniden denenmelidir (ArrayCopySeries() örneğine bakın).

 
Vitaly Muzichenko :

Ve bir şey daha var, ama satmak yerine satın al açık. Dediğim gibi, bu sık olmaz, ama olur.

Gösterge kodu basittir - hile yoktur


En güvenilir yöntem bir günlük yazmaktır . Her işlemde anahtar değişkenlerin değerlerini dosyaya yazın. Deneyimden: kesin bir koşul değil <0 yerine <=0 korkunç bir eğrilik getirdi.

 
Vitaly Muzichenko :

Ben kendim bununla karşılaştım, test cihazında her şey açık, gerçek piyasada - saçmalık.

Danışmanı pazartesiden beri yönetiyorum ve şaşırdım.

Birkaç açılış doğrudur, bundan sonra satmak yerine tekrar satın alın ve bunun tersi de geçerlidir.


Gösterge kodu en basitidir

   double poi= Point ();
   for ( int i = limit- 2 ; i> 0 ; i--) {
       if (open[i+ 0 ] > close[i+ 0 ] && MathAbs (open[i+ 0 ] - high[i+ 0 ]) < 0.1 * poi)
         Dn[i] = high[i+ 0 ] + 30 * poi;
       if (open[i+ 0 ] < close[i + 0 ] && MathAbs (open[i+ 0 ] - low[i+ 0 ]) < 0.1 * poi)
         Up[i] = low[i+ 0 ] - 30 * poi;
   }


Neden [i + 0] 'a 0 ekleyelim?

 
Aleksey Mavrin :

Lütfen belirsiz olanı açıklayın. Okuduktan sonra, ana sorun çözülmüş gibi görünüyordu ve 4'ün ne kadar eski olduğunu tartışmaya devam ediyor)

Böyle bir zaman dilimi yüklemesini ekledikten sonra hiçbir problem yaşamadım

Zaman aralığına nadiren ve düzensiz bir şekilde erişmeniz gerekiyorsa, bu indirme kontrolden önce tekrar yapılmalıdır (ancak tablonun açık olması zorunlu değildir), aksi takdirde böyle bir kontrol yardımcı olacaktır.

Teşekkürler, mesele bu. Terminal, iTime aracılığıyla güncellenmemiş bir zaman serisine eriştikten sonra gerçekten 4066 hatası veriyor mu? Null yerine güncellenmemiş bilgiler veren iClose ile karşılaştım.