FORTS Lütfen yardım edin - sayfa 7

 
Kodu gizlemeye devam mı edeceğiz?
 
barabashkakvn :
Kodu gizlemeye devam mı edeceğiz?

Mesajları hiç okuyor musun?

Mikalas 2015.03.26 18:56 TR

Çukçi diye bağırdılar ama sorun çözülmedi!

 //+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property version    "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots    1
//
bool is_failed = false ;
datetime start_time;
datetime end_time;
int mix_bars, rts_bars, si_bars;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
    start_time = StringToTime ( "2015.03.17" );
    end_time = TimeCurrent ();
//--- indicator buffers mapping
  mix_bars = GetBars( "MIX-6.15" , PERIOD_CURRENT , start_time, end_time ); 
   if ( mix_bars < 1 )
  {
    is_failed = true ;
     Print ( "Init failed. MIX-6.15 " );
  }
  rts_bars = GetBars( "RTS-6.15" , PERIOD_CURRENT , start_time, end_time ); 
   if ( rts_bars < 1 )
  {
    is_failed = true ;
     Print ( "Init failed. RTS-6.15 " );
  }
  si_bars = GetBars( "Si-6.15" , PERIOD_CURRENT , start_time, end_time ); 
   if ( si_bars < 1 )
  {
    is_failed = true ;
     Print ( "Init failed. Si-6.15 " );
  }
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator Get bars function                               |
//+------------------------------------------------------------------+
int GetBars( string symbol, ENUM_TIMEFRAMES period, const datetime start_date, const datetime end_date )
{
   if ( ! SymbolInfoInteger ( symbol, SYMBOL_SELECT ) )
  {
     ResetLastError ();
//---    
     if ( GetLastError () != ERR_MARKET_UNKNOWN_SYMBOL )
    {
       SymbolSelect ( symbol, true );
    }
     else
    {
       Print ( "GetBars: Неизвестный символ - " , symbol );
       return ( 0 );
    }    
  }
//---  
   if ( MQL5InfoInteger ( MQL5_PROGRAM_TYPE ) == PROGRAM_INDICATOR && Period () == period && Symbol () == symbol )
  {
     Print ( "GetBars: Не пройдена проверка типа программы!" );
     return ( 0 );
  }  
//---
   if ( SymbolIsSynchronized ( symbol ) )
  {
     return ( Bars ( symbol, period, start_date, end_date ) );
  }
   else
  {
     long first_date = 0 ;
     datetime times[ 1 ];
//---    
     if ( SeriesInfoInteger ( symbol, PERIOD_M1 , SERIES_TERMINAL_FIRSTDATE , first_date ) )
    {
       if ( first_date > 0 )
      {
//--- force timeseries build
         CopyTime ( symbol, period, datetime ( first_date ) + PeriodSeconds ( period ), 1 , times );
//--- check date
         if ( SeriesInfoInteger ( symbol, period, SERIES_FIRSTDATE , first_date ) )
//---        
         if ( first_date > 0 && first_date <= long ( start_date ) )
        {
           return ( Bars ( symbol, period, start_date, end_date ) );
        } 
      }
    }
     Print ( "Необходима загрузка истории с сервера!" );
  }       
//---  
   return ( 0 );
}  
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//---
   if ( is_failed )
   {
     Print ( "Sorry! Get Bars failed." );
   }
   else Print ( "Bingo! We done." );
//--- return value of prev_calculated for next call
   return (rates_total);
  }

İndirme geçmişini henüz yazmadım, AMA veriler terminalde ve ilk seferinde ondan ALMIYORLAR!

 2015.03 . 26 20 : 49 : 01.641 Test (MIX- 6.15 ,M1)      Необходима загрузка истории с сервера!
2015.03 . 26 20 : 49 : 01.641 Test (MIX- 6.15 ,M1)      Init failed. RTS- 6.15 
2015.03 . 26 20 : 49 : 01.641 Test (MIX- 6.15 ,M1)      Необходима загрузка истории с сервера!
2015.03 . 26 20 : 49 : 01.641 Test (MIX- 6.15 ,M1)      Init failed. Si- 6.15 
2015.03 . 26 20 : 49 : 01.641 Test (MIX- 6.15 ,M1)      Sorry! Get Bars failed. 

cebinizde | düzenleme | silmek

 

Birisi lütfen açıklayabilir mi:

Veri varken neden SERIES_TERMINAL_FIRSTDATE kimliğine sahip işlev

terminalde FALSE döndürür?

 SeriesInfoInteger ( symbol, PERIOD_M1 , SERIES_TERMINAL_FIRSTDATE , first_date )
 
Mikalas :

Birisi lütfen açıklayabilir mi:

Veri varken neden SERIES_TERMINAL_FIRSTDATE kimliğine sahip işlev

terminalde FALSE döndürür?

5 saniye şimdi linkleri atıyorum...
 
MigVRN :
5 saniye şimdi linkleri atıyorum...

Yardımdan Veri erişimi organizasyonu --> Geçmişi indirmek için bir komut dosyası örneği:

Если мы успешно прошли все проверки, то сделаем последнюю попытку обойтись без обращения к торговому серверу. Сначала узнаем начальную дату, для которой доступны минутные данные в формате HCC.
Запросим это значение функцией SeriesInfoInteger () с модификатором SERIES_TERMINAL_FIRSTDATE и опять сравним со значением параметра start_date.

   if ( SeriesInfoInteger (symbol, PERIOD_M1 , SERIES_TERMINAL_FIRSTDATE ,first_date))
     {
       //--- there is loaded data to build timeseries
       if (first_date> 0 )
        {
         //--- force timeseries build
         CopyTime (symbol,period,first_date+ PeriodSeconds (period), 1 ,times);
         //--- check date
         if ( SeriesInfoInteger (symbol,period, SERIES_FIRSTDATE ,first_date))
             if (first_date> 0 && first_date<=start_date) return ( 2 );
        }
     }
 
 
MigVRN :

Her şey tam olarak belgelerde yazıldığı gibi olur. :)

Doğrulama için bir gösterge ve bir uzman + videodaki sonucu çizdim.

1) İlk olarak, OnTick içinde 20 saniye çalışan bir işlevi olan bir Uzman Danışmanı çizelgeye atıyorum.

Sonuç - sohbet çalışmaya ve her şeyi olması gerektiği gibi görüntülemeye devam eder. Cam da olması gerektiği gibi çalışıyor.

2) Ardından, OnCalculate içinde 20 saniye boyunca çalışan bir işlevi olan bir göstergeyi çizelgeye atıyoruz.

Sonuç - sohbet kilitleniyor. Ayrıca farklı bir periyodun ayarlandığı aynı sembole sahip komşu sohbet de donuyor. Cam olması gerektiği gibi çalışmaya devam ediyor. İşlev çalıştıktan sonra her şey normale döner.

3) Bu videoda yok - ama bir sohbete (60 saniye koyun) ve başka bir uzmana bir gösterge koyarsanız - uzman, diğer sohbetteki gösterge kapanana kadar çalışmaya başlamaz!!!

Videoyu ayrı olarak ekledim - tarayıcımda yavaşlıyor.

Siktir git, çoklu kullanım nereye gitti?!

Gösterge çalışana kadar keneler EA'ya ulaşmaz!

 
Serj_Che :

Kahretsin, çoklu iş parçacığı nereye gitti?!

Gösterge çalışana kadar keneler EA'ya ulaşmaz!

Siparişler sipariş defterine ulaşır, sadece sonuncusu grafikte gösterilmez.
 
Serj_Che :

Kahretsin, çoklu iş parçacığı nereye gitti?!

Gösterge çalışana kadar keneler EA'ya ulaşmaz!

hep böyle oldu

Mikalas :
Siparişler sipariş defterine ulaşır, sadece sonuncusu grafikte gösterilmez.

O kene uzmanı çalışmıyor. Evet ve sohbetteki diğer her şey. Gerçek, zamanlayıcı ve kullanıcı olaylarını kontrol etmedi.

Mikalas :

Yardımdan Veri erişimi organizasyonu --> Geçmişi indirmek için bir komut dosyası örneği:

Ayrıca referanstan

... HCC formatındaki hizmet dosyaları, talep edilen zaman dilimleri için HC formatında fiyat verilerinin çizilmesi için bir veri kaynağı görevi görür. HC formatındaki veriler, hızlı erişim için maksimum düzeyde hazırlanmış zaman serileridir. Yalnızca bir çizelgenin veya bir mql5 programının talebi üzerine , "Grafiklerdeki maksimum çubuklar" parametresinin değerini aşmayan bir miktarda oluşturulurlar ve hc uzantılı dosyalarda daha sonra kullanılmak üzere kaydedilirler.

Kaynaklardan tasarruf etmek için, zaman çerçevesi verileri yalnızca gerektiğinde RAM'e yüklenir ve saklanır ; uzun süre veri erişimi yoksa, RAM'den kaldırılır ve bir dosyaya kaydedilir. Her zaman dilimi için, diğer zaman dilimleri için hazır verilerin bulunup bulunmadığına bakılmaksızın veriler hazırlanır . Veri oluşturma ve kullanılabilirlik kuralları tüm zaman dilimleri için aynıdır. Onlar. HCC formatında veri depolama biriminin bir dakika çubuğu olmasına rağmen, HCC formatında verilerin varlığı, HC formatında aynı ciltte M1 zaman dilimi verilerinin kullanılabilirliği ve kullanılabilirliği anlamına gelmez.

 
Mikalas :

Birisi lütfen açıklayabilir mi:

Veri varken neden SERIES_TERMINAL_FIRSTDATE kimliğine sahip işlev

terminalde FALSE döndürür?

Çünkü İLK kez bu diziye özel olarak atıfta bulunan kişidir.
 
Mikalas :

Yardımdan Veri erişimi organizasyonu --> Geçmişi indirmek için bir komut dosyası örneği:

İyi. Doğru yoldasın. Terminalin nasıl çalıştığını kontrol etmek ve nasıl hayal ettiğinizi değil, basit bir doğrulama algoritması.

  • Terminalde bir "MIX-6.15 M1" tablosu açın. Grafikte ilk gönderiden gösterge var.
  • "Veri dizinini aç" terminalinden.
  • Bu yol boyunca "MIX-6.15" sembolüyle geçmişi arıyoruz ...\Terminal\D0*******CF37AD**55**0E51F**75\bases\Open-Demo\history
  • Terminali boşaltıyoruz.
  • "MIX-6.15" klasörünü silin .
  • Terminali yüklüyoruz. Bir hata görüyoruz. Grafiği biraz alay ediyoruz - zaman dilimini birkaç kez değiştiriyoruz. Örneğin M1 ve M5 birkaç kez. Hata kaybolur. Bu, başka bir zaman diliminin (kodda istenenden farklı) verilerinin hazırlandığı anlamına gelir. Bu şekilde zaman dilimlerini manuel olarak değiştirmek istemiyorsak, verileri kendimiz hazırlamaya özen göstermemiz gerekiyor.
  • Terminali yeniden başlatıyoruz - hata yok.
  • Net değilse, deneyi tekrarlayın.
Neden: