Lütfen bu işlevde neyin yanlış olduğunu açıklayabilir misiniz? - sayfa 4

 
Alexey Viktorov :

Vladimir, ancak test cihazında sorun ortaya çıkmıyor... Böyle bir sorun nereden geliyor ??? Yoksa test cihazında yalnızca bir Uzman Danışman olduğu için mi?

Ayrıca SD'de, tek değişikliğin ikinci danışmanın onu başka bir çifte koyması olduğunu önerdim...

Test cihazında, tüm ticaret ortamı önceden hazırlanır. Her şey bir tabakta. Endişelenme. Gerçek hayatta farklıdır, standart olmayan davranışlarla (farklı bir zaman dilimi ve/veya farklı bir sembol üzerinde çalışarak), ticaret ortamının uygunluğuna kendi başınıza dikkat etmeniz gerekir.
 
Karputov Vladimir :
Bir terminalde (M15 döneminde Uzman Danışmanlar vardı) tek bir sembol üzerinde çalışmadı - Sorunun, başka birinin zaman çerçevesini kullanırken , tüm geçmişi "çekmeniz" gerektiğinden %99 eminim. zaman . CopyTime() ile yapmanın daha iyi olduğunu düşünüyorum.
Ve CopyRates () bu geçmişi çeker??? Sonuçta, yapıda zaman var ...
 
Karputov Vladimir :

Bu bir hata değil. Başka birinin zaman çerçevesi üzerinde çalışıyorsunuz. Bu durumda bir başkasının zaman dilimindeki verilerin güncel olduğundan emin olmanız gerekir.

Şahsen ben bir alternatif görmüyorum.

Gerçek değil, SERIES_LASTBAR_DATE'in nasıl çalıştığı bilinmiyor. Hiçbir şeyin güncellenmesi gerekmeyebilir, çünkü son çubuğun zamanı belirtilen sembolün TimeCurrent() kullanılarak hesaplanabilir. Geliştiricilere sorun.

Ancak, iki değişken true olarak atanırsa, bu değişkenlerin birlikte (&& işaretlenirken) de true vereceği hala tartışılmaz bir gerçektir.

 

Diğer araçların / TF'nin önbelleğinin kaybolmasıyla ilgili sorun gerçekten var.

Ayrıca, hataları kontrol etmek ve bir döngüde yüklemeyi beklemek her zaman yardımcı olmaz. Servis masasında konuştuk ama MQ'dan hiçbir gelişme olmadı, sadece bir ipucu:

Support Team   2016.02.29 11:45

Şüphe, geçmiş verilerin zaman aşımı ile boşaltılmasıdır.

2 çözüm var:

1. verilere her 3 dakikada bir defadan daha sık erişin

2. verilere çok basit bir gösterge ekleyin. örneğin hacim. Hesaplama yoktur, yalnızca bir arabellek işgal edilmiştir. Göstergenin varlığı, erişim sıklığından bağımsız olarak geçmiş önbelleği bellekte tutacaktır.

2. ipucu çalışmıyor, göstergeler her zaman çağrılıyor, ancak bir noktada önbellek düşüyor ve verileri almak imkansız hale geliyor.

Andrey Khatimlianskii 2016.03.18 13:41

Sorunu böyle bir koltuk değneği ile çözdüm - her 150 saniyede bir ilgili tüm enstrümanlar/TF'ler için aşağıdaki kodu çağırıyorum:

 bool CheckTimeSeries( string symbol, ENUM_TIMEFRAMES period )
{
   double array[];
    if ( CopyClose ( symbol, period, 1 , 1 , array ) <= 0 )
   {
                 int err = GetLastError ();
                 Print ( " * Can't refresh timeseries (" , symbol, ", " , period, ")! ERROR #" , err, "!!!" );
                 return ( false );
   }
   return ( true );
}

Yeterince hızlı çalışıyor, bu güncellemeden sonra 4806 hatası ortadan kalkmış görünüyor.

 

Sizden başka bir yanlış anlaşılma hakkında yorum yapmanızı rica ediyorum.

Bars

Karşılık gelen dönem sembolü için geçmişteki çubuk sayısını döndürür. İşlev için 2 seçenek vardır.


Sadece ikinci seçenek ilgi çekicidir.

Belirli bir aralıktaki çubuk sayısını isteyin
 int    Bars (
   string            symbol_name,     // имя символа
   ENUM_TIMEFRAMES   timeframe,       // период
   datetime          start_time,       // с какой даты
   datetime          stop_time         // по какую дату
   );

danışman metni

/*******************Expert initialization function*******************/
int OnInit ()
{
   return ( INIT_SUCCEEDED );
} /*******************************************************************/

/************************Expert tick function************************/
void OnTick ()
{
   datetime dtarr[], date = D'2016.06.22' ;
   ArraySetAsSeries (dtarr, true );
   CopyTime ( _Symbol , PERIOD_D1 , 0 , 5 , dtarr);
   Print (dtarr[ 0 ]);
   Print ( " " , Bars ( _Symbol , PERIOD_D1 , date, dtarr[ 0 ]));
   Print ( " " , Bars ( _Symbol , PERIOD_D1 , date+ 1 , dtarr[ 0 ]));
   
} /*******************************************************************/

/******************Expert deinitialization function******************/
void OnDeinit ( const int reason)
{
} /*******************************************************************/

00:00:00 saatinin, 00:00:01 saatiyle tamamen aynı gelecek günlere ait olduğunu anlıyorum.

Ama... önerilen baskılar bununla aynı fikirde değil.

 2016.06 . 24 22 : 18 : 56.450 TestTime (EURUSD,M15)     2
2016.06 . 24 22 : 18 : 56.450 TestTime (EURUSD,M15)     3
2016.06 . 24 22 : 18 : 56.450 TestTime (EURUSD,M15)   2016.06 . 24 00 : 00 : 00

2016.06.22 00:00:00 ile 2016.06.24 00:00:00 arasında günlük ÜÇ bar ve 2016.06.22 00:00:01 ve 2016.06.24 00:00:00 arasında sadece İKİ...

Yoksa bir şeyi yanlış mı anlıyorum???

Dosyalar:
TestTime.mq5  2 kb
 

Ve mevcut çubuğun zamanına bir saniye eklersek

   Print ( " " , Bars ( _Symbol , PERIOD_D1 , date, dtarr[ 0 ]+ 1 ));
   Print ( " " , Bars ( _Symbol , PERIOD_D1 , date+ 1 , dtarr[ 0 ]+ 1 ));

o zaman bu olur

 2016.06 . 24 22 : 26 : 48.602 TestTime (EURUSD,M15)     3
2016.06 . 24 22 : 26 : 48.602 TestTime (EURUSD,M15)     4
2016.06 . 24 22 : 26 : 48.602 TestTime (EURUSD,M15)   2016.06 . 24 00 : 00 : 00

2016.06.24 00:00:01 saati bir sonraki bara ait gibi görünüyor ya da ne???

 
Çubuk sayısının belirlendiği aralığa üst zaman sınırı dahil değildir.
 
Dmitry Fedoseev :
Çubuk sayısının belirlendiği aralığa üst zaman sınırı dahil değildir.

Dmitry, bu garip değil mi? Yeni bir çubuk ortaya çıktı, ancak henüz saymayacağız.

Dinle, bu davranışın nedeni bu değil mi SeriesInfoInteger(_Symbol, PERIOD_D1, SERIES_LASTBAR_DATE ); ? Yeni bir çubuk belirdi, bir onay işareti var, kod yürütülüyor, ancak zaman henüz dikkate alınmadı ???

 

Eh, kuzu uçup gitti ... Ve ondan tam bir görmezden geldi ...

Vladimir, en azından bu soruyu cevaplayabilir misin ???

Alexey Viktorov :
Ve CopyRates () bu geçmişi çeker??? Sonuçta, yapıda zaman var ...
 
Alexey Viktorov :

Eh, kuzu uçup gitti ... Ve ondan tam bir görmezden geldi ...

Vladimir, en azından bu soruyu cevaplayabilir misin ???

Servis masasında size tavsiye edilenleri daha iyi seslendirin - orada iletişime devam ettiniz mi?