Hatalar, hatalar, sorular - sayfa 1030

 
Al_key :

Ayrıca kompost kitaplığını kullanarak bir bar vardiyam var. Metatrader'da yerleşik araçlar yok mu?

Ne yazık ki hayır. Aslında, iBarShift() büyük olasılıkla MT4'te kompost kitaplığındakiyle aynı şekilde çalışır. Ancak yerleşik olsaydı daha iyi olurdu - daha hızlı çalışırdı (çünkü C ++ 'da).
 
MetaDriver :

Davanız küçük bir kayma ile tedavi ediliyor.

Ben daha kötüyüm. (Bu arada, Slip'siz davanız işe yaramadan önce, birkaç hafta önce durdu)

Aynı şema, diğer (mevcut olmayan) çizelgelerde korkunç kaymalar olmadan çalışmayı durdurdu:

Buradan kod: https://www.mql5.com/en/code/224

yüklü baykuşlar, bkz.

Şu anda standardı atıyorum. Grafikte AMA, tyk yeniden hesaplama (0'dan 2350'ye Uyku ile) - M1'e düşüyorum ve geri gelmiyorum. Birkaç saniye sonra. AMA çizilir, hepsi bu.

Genel olarak kayma yardımcı olmuyor, bayraklarla deniyorum (iki bayrağı hatırlıyor musunuz, mevcut tf ve m1? Mevcut olanda zaten (bayrak) varsa ve şimdi m1'de (bayrak 2), sonra .. .)

ama bir şeyden şüpheliyim ... Pazartesi keneleri daha erken gelecek, şimdiki TF'ye dönüyorum :)

upd Evet, çizelgede yüz tane nesnem var ve ayrıca AMA, yani çok ağır.

 
MetaDriver :

"Yapmalısın Fedya, yapmalısın."

(c) Şürik

--

Böyle bir hata, örneğin dinamik bir arabellek için bellek ayrılmamışsa oluşur (bu durumda ActualBuffer altında). Yukarıdaki kod parçacığından net değil.

Burada.

Ve dinamik bir arabellek için bellek nasıl tahsis edilir?

Muhtemelen, öğrenir öğrenmez soru ortadan kalkacak.

İşte kodun tamamı

 #include <TimeSeries.mqh>

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots    3
//--- plot Actual
#property indicator_label1   "Actual"
#property indicator_type1   DRAW_LINE
#property indicator_color1   clrLime
#property indicator_style1   STYLE_SOLID
#property indicator_width1   1
//--- plot Consensus
#property indicator_label2   "Consensus"
#property indicator_type2   DRAW_LINE
#property indicator_color2   clrPeachPuff
#property indicator_style2   STYLE_SOLID
#property indicator_width2   1
//--- plot Previous
#property indicator_label3   "Previous"
#property indicator_type3   DRAW_LINE
#property indicator_color3   clrLightCyan
#property indicator_style3   STYLE_SOLID
#property indicator_width3   1
//--- indicator buffers
double          ActualBuffer[];
double          ConsensusBuffer[];
double          PreviousBuffer[];
//--- indicator vars
string sDatetime;
string sActual;
string sConsensus;
string sPrevious;
int file_handle;
int barshift;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,ActualBuffer, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,ConsensusBuffer, INDICATOR_DATA );
   SetIndexBuffer ( 2 ,PreviousBuffer, INDICATOR_DATA );
   file_handle = FileOpen ( "CSV - макроэкономика и госкорпстат/Existing Home Sales Change.csv" , FILE_READ | FILE_CSV | FILE_ANSI , ',' );
   while (! FileIsEnding (file_handle))
        {
         sDatetime  = FileReadString (file_handle);
         sActual    = FileReadString (file_handle);
         sConsensus = FileReadString (file_handle);
         sPrevious  = FileReadString (file_handle);
         
         barshift = iBarShift( Symbol (), Period (), datetime (formatdatetime(sDatetime)), false );
         if ( StringToDouble (formatstring(sActual)) > 0 && StringToDouble (formatstring(sActual)) < 10000 ) ActualBuffer[barshift] = StringToDouble (formatstring(sActual));
         Print (formatdatetime(sDatetime));
         Print ( "iBarShift = " , barshift, " Datetime = " , formatstring(sDatetime), " sActual = " , sActual, " sConsensus = " , sConsensus, " sPrevious = " , sPrevious);
        }
    
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| 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);
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction ( const MqlTradeTransaction & trans,
                         const MqlTradeRequest & request,
                         const MqlTradeResult & result)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+
//--- Функции форматирования
string formatstring( string strparam)
   {
       string result = StringSubstr (strparam, 1 , StringLen (strparam) - 2 );
       return (result);
   }
string formatdatetime( string strparam)
   {
       string result = StringSubstr (strparam, 1 , 4 ) + "." + StringSubstr (strparam, 5 , 2 ) + "." + StringSubstr (strparam, 7 , 11 );
      
       return (result);
   }
 
Al_key :

Burada.

Ve dinamik bir arabellek için bellek nasıl tahsis edilir?

Muhtemelen, öğrenir öğrenmez soru ortadan kalkacak.

İşte kodun tamamı

not

Orada Array Resize hakkında okudum ... işte bir kopyala-yapıştır

"Bağlamadan sonra, bağlanacak dizinin indekslenmesi timeseries'de olduğu gibi önceden ayarlanmış olsa bile, tampon[] dinamik dizisi sıradan dizilerde olduğu gibi indekslenecektir. Göstergenin öğelerine erişim sırasını değiştirmeniz gerekirse diziyi SetIndexBuffer işleviyle bağladıktan sonra ArraySetAsSeries() işlevini kullanmanız gerekir () Aynı zamanda, SetIndexBuffer tarafından gösterge tamponları olarak atanan dinamik dizilerin boyutunu değiştirmenin imkansız olduğu unutulmamalıdır. () işlevi. Gösterge arabellekleri için, tüm yeniden boyutlandırma işlemleri, terminalin yürütme alt sistemi tarafından gerçekleştirilir."

Bir sersemliğim var.

 
Silent :
Yapılandırılan varsayılan profili kaydedin Dosya - Profiller - Varsayılan
Bir varsayılan gibi, hepsi aynı veriler yüklenmez. Birkaç saat sonra ilk kez her şey gitti.
 
Al_key :

Burada.

Ve dinamik bir arabellek için bellek nasıl tahsis edilir?

Muhtemelen, öğrenir öğrenmez soru ortadan kalkacak.

İşte kodun tamamı

INDICATOR_DATA çizilecek veridir . Bu arabellek (boyut) terminal tarafından izlenir (anladığım kadarıyla Rate_total ile).

Ara hesaplamalar için arabellekler ekleyin (INDICATOR_HESAPLAMALAR). Onlar için ve boyutunu ayarlayın.

Not: #include <TimeSeries.mqh> dosyası nedense açılamıyor, derlenmiyor.

Pazartesiye kadar beklemek zorundasın, burada bir şeyler doğru değil.

 
Silent :

INDICATOR_DATA çizilecek veridir . Bu arabellek (boyut) terminal tarafından izlenir (anladığım kadarıyla Rate_total ile).

Ara hesaplamalar için arabellekler ekleyin (INDICATOR_HESAPLAMALAR). Onlar için ve boyutunu ayarlayın.

Not: #include <TimeSeries.mqh> dosyası nedense açılamıyor, derlenmiyor.

Pazartesiye kadar beklemek zorundasın, burada bir şeyler doğru değil.

Değiştirmeye çalıştım yine aynı hata. En azından değerleri sıradan bir diziye girmeye çalışacağım, belki bu işe yarar.
 
Al_key :
Değiştirmeye çalıştım yine aynı hata. En azından değerleri sıradan bir diziye girmeye çalışacağım, belki bu işe yarar.

İşte işe yarayan basit bir tane. INDICATOR_DATA'da INDICATOR_CALCULATIONS'tan yazıyoruz

 #property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots    1
//--- plot Label1
#property indicator_label1   "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1   clrOrangeRed
#property indicator_style1   STYLE_SOLID
#property indicator_width1   1
//--- input parameters
input string    s= "EURUSD" ;
input ENUM_TIMEFRAMES       tf;           // D1
input int       countBars= 100 ;           // count
//--- put parameters
int    copied,i;
//--- indicator buffers
double          Label1Buffer[];
//--- buffers
double          p_Symbol[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
   SetIndexBuffer ( 0 ,Label1Buffer, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,p_Symbol, INDICATOR_CALCULATIONS );
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[])
  {
//---
   if (prev_calculated== 0 )
     {
       ArrayInitialize (Label1Buffer, EMPTY_VALUE );
       ArrayInitialize (p_Symbol, EMPTY_VALUE );
       ArraySetAsSeries (Label1Buffer, true );
       ArraySetAsSeries (p_Symbol, true );
       ArraySetAsSeries (price, true );
     };
   ArrayCopy (p_Symbol,price, 0 , 0 ,countBars);
   if ( _LastError != 0 ) { Print ( _LastError ); return (prev_calculated);};
   if ( _LastError == 0 )
     {
       for (i=countBars;i> 0 ;i--)
        {
         Label1Buffer[i]=p_Symbol[i];
         Print ( "limitBars i = " + IntegerToString (i));
        };
     };
//--- return value of prev_calculated for next call
   return (rates_total);
  }
 
Silent :

INDICATOR_DATA çizilecek veridir . Bu arabellek (boyut) terminal tarafından izlenir (anladığım kadarıyla Rate_total ile).

Ara hesaplamalar için arabellekler ekleyin (INDICATOR_HESAPLAMALAR). Onlar için ve boyutunu ayarlayın.

Not: #include <TimeSeries.mqh> dosyası nedense açılamıyor, derlenmiyor.

Pazartesiye kadar beklemek zorundasın, burada bir şeyler doğru değil.

Buradan alın : https://www.mql5.com/ru/code/1008

Az önce bir şey buldum, bu yüzden henüz koda dokunmadım. Ve işe yarayana kadar - buradaki halk beni alışverişe götürüyor.

Sorunlu kod OnInit()'ten OnCalculate()'e taşınırsa her şeyin işe yarayacağını düşünüyorum. Beşin özelliği uzun zamandır bilinmektedir - OnInit'teki hiçbir kod normalde çalışmaz. SetIndexBuffer() aracılığıyla kaydedilen otomatik tahsisli arabelleklerin gerçek tahsisinin, arka planda gerçekleşmesi gerektiğinden (otomatik, değil mi?)

TimeSeries - Библиотека функций для работы с таймсериями
TimeSeries - Библиотека функций для работы с таймсериями
  • oylar: 12
  • 2012.08.24
  • Andrey Khatimlianskii
  • www.mql5.com
Библиотека функций для работы с таймсериями: iBars, iTime, iOpen, iHigh, iLow, iClose, iVolume, iHighest, iLowest, iBarshift. Для всех функций доступен краткий вариант вызова (с символом и периодом текущего графика).
 

Buluttan görev alırken 8 aracıdan yalnızca 3'ünün aynı anda çalışabildiğini fark ettim.
Testinizi paralel olarak çalıştırırsanız, aracıların geri kalanı da dahil edilir.

Böyle mi olmalı?