Hatalar, hatalar, sorular - sayfa 1802

 
Alexey Kozitsyn :
Bunu her kene için yapmayı önerir misiniz?
Her OnBookEvent() yangınında senkronize olmaya devam ediyorum :(
 
prostotrader :
Her OnBookEvent() yangınında senkronize olmaya devam ediyorum :(
Burada bir soru yok, soru şu ki, buna ek olarak, her seferinde CopyRates () işlevinin çağrılması da öneriliyor .... bu, bana öyle geliyor ki, bir tür kalay ...
 
Alexey Kozitsyn :
Burada bir soru yok, soru şu ki, buna ek olarak, her seferinde CopyRates () işlevinin çağrılması da öneriliyor .... bu, bana öyle geliyor ki, bir tür kalay ...

:)

void OnBookEvent ( const string &symbol)
{
   if (symbol == Symbol ())
  {
    GetBars( Symbol (), time_frame);
  }  
}

SD'de bana böyle öğrettiler

 
prostotrader :

:)

void OnBookEvent ( const string &symbol)
{
   if (symbol == Symbol ())
  {
    GetBars( Symbol (), time_frame);
  }  
}

Bir şey söylemek veya göstermek istiyorsanız - gösterin, lütfen, bu normaldir ... burada ne tür bir işleve sahip olduğunuzu ve ne yaptığını tahmin etmek bir av değildir.

Katma:

Öğretilen? Bir uygulama sağladınız mı?

 
Alexey Kozitsyn :

Bir şey söylemek veya göstermek istiyorsanız - gösterin, lütfen, bu normaldir ... burada ne tür bir işleve sahip olduğunuzu ve ne yaptığını tahmin etmek bir av değildir.

Katma:

Öğretilen? Bir uygulama sağladınız mı?

tamam ne var?

İki dakika içinde verilerin boşaltıldığını ve senkronizasyonu sürdürmek için dediler.

Barları aramanız tavsiye edilir

//+------------------------------------------------------------------+
//| Custom indicator Get bars function                               |
//+------------------------------------------------------------------+
int GetBars( string symbol, ENUM_TIMEFRAMES period)
{
   if (! IsStopped ())
  {
     if ( SymbolIsSynchronized (symbol))
    {
       if ( bool ( SeriesInfoInteger (symbol, period, SERIES_SYNCHRONIZED )))
      {
         int a_bars = Bars (symbol, period);  
         if (a_bars > 0 )
        {
           return (a_bars);
        }
         else
        {
           return (GetLocalData(symbol, period));
        }  
      }
       else
      {
         return (GetLocalData(symbol, period));
      }    
    }  
     else
    {
       return (LoadServerData(symbol, period));
    }  
  }  
   return ( 0 );
}
Tam uygulamayı arayacağım
 

Burada

//+------------------------------------------------------------------+
// Custom indicator Check timer function                             |
//+------------------------------------------------------------------+
bool CheckTimer( const ulong start_value, const ulong per_value)
{
   ulong end_value = GetMicrosecondCount ();
   if (end_value < start_value)
  {
     if ((start_value - end_value) >= per_value) return ( true );
  }
   else
  {
     if ((end_value - start_value) >= per_value) return ( true );
  }
   return ( false );
}
//+------------------------------------------------------------------+
//| Custom indicator Get local data function                         |
//+------------------------------------------------------------------+
int GetLocalData( const string a_symbol, ENUM_TIMEFRAMES a_period)
{
   long first_date;
   int fail_cnt = 0 ;
   while ((fail_cnt < 3 ) && ! IsStopped ())
  {
    first_date = long ( SeriesInfoInteger (a_symbol, PERIOD_M1 , SERIES_TERMINAL_FIRSTDATE ));
     if (first_date > 0 )
    {
       int f_cnt = 0 ;
       datetime times[ 1 ];
       long a_bars = 0 ;
       while ((f_cnt < 5 ) && ! IsStopped ())
      {
         if ( bool ( SeriesInfoInteger (a_symbol, PERIOD_M1 , SERIES_BARS_COUNT , a_bars)))
        {
           if ( a_bars > 0 )
          {
             if ( bool ( SeriesInfoInteger (a_symbol, a_period, SERIES_BARS_COUNT , a_bars)))
               if (a_bars > 0 ) return ( int (a_bars));
          }
        }
         else
        {
//--- force timeseries build
           CopyTime (a_symbol, a_period, 0 , 1 , times);
           ulong start_tick = GetMicrosecondCount ();
           while (!CheckTimer(start_tick, 5000 ))
          {
            f_cnt--;
            f_cnt++;
          }  
        }
        f_cnt++;
      }
    }
     else
    {
       ulong start_tick = GetMicrosecondCount ();
       while (!CheckTimer(start_tick, 5000 ))
      {
        fail_cnt--;
        fail_cnt++;
      }
    }
//---  
    fail_cnt++;
  }
   return ( 0 );
}
//+------------------------------------------------------------------+
//| Custom indicator Get server data function                        |
//+------------------------------------------------------------------+
int LoadServerData( const string a_symbol, ENUM_TIMEFRAMES period)
{
   int fail_cnt = 0 ;
   while ((fail_cnt < 5 ) && ! IsStopped ())
  {  
     long first_date = long ( SeriesInfoInteger (a_symbol, PERIOD_M1 , SERIES_SERVER_FIRSTDATE ));
     if (first_date > 0 )
    {
       if ( SymbolIsSynchronized (a_symbol))
      {
         return (GetLocalData(a_symbol, period));
      }  
    }
     else
    {
       ulong start_tick = GetMicrosecondCount ();
       while (!CheckTimer(start_tick, 20000 ))
      {
        fail_cnt--;
        fail_cnt++;
      }
    }    
    fail_cnt++;
  }
   return ( 0 );  
}
//+------------------------------------------------------------------+
//| Custom indicator Get bars function                               |
//+------------------------------------------------------------------+
int GetBars( string symbol, ENUM_TIMEFRAMES period)
{
   if (! IsStopped ())
  {
     if ( SymbolIsSynchronized (symbol))
    {
       if ( bool ( SeriesInfoInteger (symbol, period, SERIES_SYNCHRONIZED )))
      {
         int a_bars = Bars (symbol, period);  
         if (a_bars > 0 )
        {
           return (a_bars);
        }
         else
        {
           return (GetLocalData(symbol, period));
        }  
      }
       else
      {
         return (GetLocalData(symbol, period));
      }    
    }  
     else
    {
       return (LoadServerData(symbol, period));
    }  
  }  
   return ( 0 );
}


GetBars'ı arayarak senkronizasyonu sürdürüyoruz veya veri almaya çalışıyoruz

 
prostotrader :

tamam ne var?

İki dakika içinde verilerin boşaltıldığını ve senkronizasyonu sürdürmek için dediler.

Barları aramanız tavsiye edilir

//+------------------------------------------------------------------+
//| Custom indicator Get bars function                               |
//+------------------------------------------------------------------+
int GetBars( string symbol, ENUM_TIMEFRAMES period)
{
   if (! IsStopped ())
  {
     if ( SymbolIsSynchronized (symbol))
    {
       if ( bool ( SeriesInfoInteger (symbol, period, SERIES_SYNCHRONIZED )))
      {
         int a_bars = Bars (symbol, period);  
         if (a_bars > 0 )
        {
           return (a_bars);
        }
         else
        {
           return (GetLocalData(symbol, period));
        }  
      }
       else
      {
         return (GetLocalData(symbol, period));
      }    
    }  
     else
    {
       return (LoadServerData(symbol, period));
    }  
  }  
   return ( 0 );
}

Bu analog değil mi?

if ( SymbolIsSynchronized (symbol))
if ( bool ( SeriesInfoInteger (symbol, period, SERIES_SYNCHRONIZED )))

Evet, senkronizasyon olmazsa Bars() 0 döndürür gibi geldi bana... Bir test yapmam gerekecek...

 
Alexey Kozitsyn :
Bunu her kene için yapmayı önerir misiniz?
Ne için? Tek bir işlem yeterlidir.

Sembol, Piyasa İzleme'de seçildiği ve sembolün geçmişi Uzman Danışman tarafından tutulduğu sürece, senkronize durumda tutulur. Bir uzman tarafından tutmak, örneğin bir çubuğu kopyalayarak bu geçmişe en az 2 dakikada bir erişmek anlamına gelir. Geçmiş senkronize edilirse, bir çubuğu kopyalamak için zaman harcanmaz - sadece birkaç işlemci döngüsü. Veya, az önce dedikleri gibi , çubuk sayısını isteyin, ayrıca birkaç döngü
 
Slawa :
Ne için? Tek bir işlem yeterlidir.

Sembol, Piyasa İzleme'de seçildiği ve sembolün geçmişi Uzman Danışman tarafından tutulduğu sürece, senkronize durumda tutulur. Bir uzman tarafından tutmak, örneğin bir çubuğu kopyalayarak bu geçmişe en az 2 dakikada bir erişmek anlamına gelir. Geçmiş senkronize edilirse, bir çubuğu kopyalamak için zaman harcanmaz - sadece birkaç işlemci döngüsü.

Göstergeler 2 dakikalık bir aralık içeriyor mu?

Evet ve senkronizasyon gerçeği kontrol edilerek senkronizasyon da yapılacak mı?

 
Alexey Kozitsyn :

Göstergeler 2 dakikalık bir aralık içeriyor mu?

Evet ve senkronizasyon gerçeği kontrol edilerek senkronizasyon da yapılacak mı?

Aynısı göstergeler için de geçerlidir. 1 dakikalık bir zamanlayıcı oluşturun ve ilgilendiğiniz tüm zaman serileri için çubuk sayısını sorun.

Senkronizasyon, bir senkronizasyon doğruluk kontrolü tarafından yapılmaz.