Hatalar, hatalar, sorular - sayfa 670

 

Gann Izgarasını yeniden işlemek için bir plan var mı? Kullanmak kesinlikle imkansızdır: MT4'te olduğu gibi ekstremumlarla manuel olarak da düzgün bir şekilde gerebilir veya sabitleyemezsiniz - TF'den TF'ye geçerken, hücrelerin boyutu atlar, sabit bir bağlanma yoktur! Yoksa ben bir şey mi kaçırıyorum...

M1 M5

 

Görüntülenmez, çubuklar ve OHLC yalnızca Alpari'deki metaller için, diğer her şey yolunda. Teklifler geliyor, siparişler veriliyor. Terminali yeni bir klasöre yeniden düzenledi, yardımcı olmuyor. Nerede hata olabilir? W764

 
BoraBo :

Görüntülenmez, çubuklar ve OHLC yalnızca Alpari'deki metaller için, diğer her şey yolunda. Teklifler geliyor, siparişler veriliyor. Terminali yeni bir klasöre yeniden düzenledi, yardımcı olmuyor. Nerede hata olabilir? W764

Aynı şekilde. Sunucuda bir şey devre dışı bırakılmış gibi görünüyor. Alpari teknik destek.

 
void OnStart ()
  {
//---
symbol2csv( Symbol (), Period ());
  }
//+------------------------------------------------------------------+
int symbol2csv( string smb, ENUM_TIMEFRAMES tf)
  {
   ResetLastError ();
   int filehandle= FileOpen (smb+ "_" +tf2str(tf)+ ".csv" , FILE_WRITE | FILE_CSV , "," );
   if (filehandle!= INVALID_HANDLE )
     {
       MqlRates rates[];
       int i= 0 ,copyed= CopyRates (smb,tf,From,To,rates);
       ArraySetAsSeries (rates, false );
       FileWrite (filehandle, "\"Date\" \"Time\" \"Open\" \"High\" \"Low\" \"Close\" \"Volume\"" ); // writing header
       for (i= 0 ;i<copyed;i++)
        {
         FileWrite (filehandle, TimeToString (rates[i].time,TIME_DATE), TimeToString (rates[i].time,TIME_MINUTES), DoubleToString (rates[i].open, _Digits ), DoubleToString (rates[i].high, _Digits ), DoubleToString (rates[i].low, _Digits ), DoubleToString (rates[i].close, _Digits ),rates[i].real_volume);
        }
       FileClose (filehandle);
       Print (smb+ " exported " + IntegerToString (copyed));
       return copyed;
     }
   else Print ( "FileOpen failure. Error is " , GetLastError ());
   return - 1 ;
  }
Birim sütunu neden bir dosyada her zaman 0 içeriyor? Ve cildin yazıldığı nasıl anlaşılır?
 
Graff :
Birim sütunu neden bir dosyada her zaman 0 içeriyor? Ve cildin yazıldığı nasıl anlaşılır?

forex enstrümanları için real_volume???

belki başlamak için sadece bir onay işareti, tick_volume'u deneyin

 

Sadece anlayamadığım hata nedir?

İşte minimuma indirilmiş kod:

 //+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1

//---------- MQL5 --------------
int ecx = 0 ; //-- Кол-во тестируемых пар --
string g_s_SymbolsTrade[] = { "AUDCAD" , "AUDCHF" , "AUDJPY" , "AUDNZD" , "AUDUSD" , "CADCHF" , "CHFJPY" , "EURAUD" , "EURCAD" , "EURCHF" , "EURGBP" , "EURJPY" , "EURNZD" , "EURUSD" ,
"GBPCHF" , "GBPJPY" , "GBPUSD" , "NZDUSD" , "USDCAD" , "USDCHF" , "USDJPY" };

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
{
   //-- Сколько всего валютных пар --
   ecx = ArraySize (g_s_SymbolsTrade);
   //-- Установить таймер на каждую секунду --
   if ( EventSetTimer ( 1 ) == false ) return (- 1 ); //int 08
   
   return ( 0 ); //ret;
}
//----------------------------------------------------------------------------//
void OnDeinit ( const int reason)
{
   EventKillTimer (); //timer off
}
//+------------------------------------------------------------------+
//| 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[])
{
    
//--- return value of prev_calculated for next call
   return (rates_total); //ret;
}

//+------------------------------------------------------------------+
////////////////////////////////////////////////////////////////////////////////
//                           Expert Timer function                            //
////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
void OnTimer () //int 08
{
static bool b_Flag = false ;
string db_SymbolName;
MqlRates rates[];
int edx;

   if (b_Flag == true ) return ; //ret -- реентерабельность --
   b_Flag = true ; //cli
   //---------------------------------------------
   for ( int ebx = 0 ; ebx < ecx; ebx++){
      db_SymbolName = g_s_SymbolsTrade[ebx];
      edx= CopyRates (db_SymbolName, _Period , 0 , 1 ,rates);
       if (edx != 1 ){ //cmp edx,1 | jne
         b_Flag = false ; //sti
         return ; //jne ret;
      }   
   } //loop ecx       
   Print ( "Загрузка завершена." );
   //---------------------------------------------
   b_Flag = false ; //sti
}

Başlatıyorum, hemen oluyor veya grafik periyodunu değiştirdikten sonra, terminal aniden çılgınca yavaşlamaya başlıyor ve tüm günlük bununla tıkanıyor:


Sebebi nedir, benim cant mı yoksa CopyRates işlevindeki bir hata mı?

 
pusheax :

Sebebi nedir, benim canımı mı yoksa CopyRates işlevindeki bir hata mı?

İkisi birden.

Şu şekilde deneyin:

 void OnTimer () //int 08
{
static bool b_Flag = false ;
if (b_Flag == true ) return ; //ret -- реентерабельность --
string db_SymbolName;
MqlRates rates[ ecx ];    // поправка здесь.
int edx;


   b_Flag = true ; //cli
   //---------------------------------------------
   for ( int ebx = 0 ; ebx < ecx; ebx++){
      db_SymbolName = g_s_SymbolsTrade[ebx];
      edx= CopyRates (db_SymbolName, _Period , 0 , 1 ,rates);
       if (edx != 1 ){ //cmp edx,1 | jne
         b_Flag = false ; //sti
         return ; //jne ret;
      }   
   } //loop ecx       
   Print ( "Загрузка завершена." );
   //---------------------------------------------
   b_Flag = false ; //sti
}
 
MetaDriver :

İkisi birden.

Şu şekilde deneyin:


Hayır, ne yazık ki yardımcı olmadı.

Gerçekten şöyle yazdım: MqlRates oranları[100];

ve sonra şöyle: MqlRates oranları[ecx]; - Derlerken hata veriyor.

Ayrıca yükselme fikrini de beğendim:

if (b_Flag == true) return;//ret -- yeniden giriş --

ama ne yazık ki sonuç aynı.

Belki başka fikirler vardır?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных - Документация по MQL5
 
papaklass :

Grafik ayarlarındaki terminaldeyse, çubuk sayısı sınırsızdır. Bar sayısını azaltın.

Evet, kopyalanmış yalnızca bir çubuğu var gibi görünüyor.
 
papaklass :

Yani 25 enstrümanda. Bar sayısını azaltana kadar 12'de aynı saçmalığı yaşadım.

O zaman servis masası anlamına gelir. Terminal, 1 çubuğu okurken tüm geçmişi sembolle diskten çıkarmamalıdır.

Ayarlar sınırsız olsa bile. smart kagbe'ye göre önbelleğe almanız gerekiyor..

--

Tavsiye genellikle doğrudur. Bunu düşündüm - "dönemleri değiştirirken" diyor. Onlar. terminal her şeyi dakikalar içinde saklar, eksik dönemleri hesaplamaya başlar ve arabellekler için yetersiz bellekle karşılaşır.

Daha kısaca - ikisi de suçlu. Push - hafıza satın almadığını, ancak çok, çok sayıda döviz çifti istediğini ve sınırsız (veya sınırsıza yakın) istediğini belirtin.

Ve MQ - bir gösterge hatası olarak ele alınmaz ("Hata XXXX: dudağını topla, yoldaş." gibi), ancak yalnızca kendi hatanız olarak kabul edilir.