Hatalar, hatalar, sorular - sayfa 1175

 
A100 :

......................işlevler (arama, hesaplama vb.) genellikle uzunluk/boyut veya hata durumunda -1 döndürür , bu da hata işlemeyi büyük ölçüde kolaylaştırır.

değer aralığının yarısını feda edecek kadar değil.
 

Selamlar. Yeni başlayanlara, ters sinyal durumunda bir siparişler tablosu için ortak bir alım ayarlamak için hangi işlevlerin kullanılacağını söyleyin?

 
Dosya işlemlerine hakim olmak. MQL4/5'in csv veya txt dosyasıyla daha hızlı olup olmadığını bilen var mı?
 
paladin800 :
Dosya işlemlerine hakim olmak. MQL4/5'in csv veya txt dosyasıyla daha hızlı olup olmadığını bilen var mı?
çöp Kutusu
 
papaklass :
Dosyalarla çalışarak hangi görevleri çözmeye çalışıyorsunuz?
Dosyaya pozisyonların durumunu yazıp bu verileri aynı MT4 ile okumak gerekiyor. Bir karakterin pozisyonlarını diğer karakter(ler) ile ilişkilendirmemiz gerekiyor. Örneğin, EURUSD için pozisyon sayısında zaten bir limit varsa, GBPUSD için daha fazla açmayın. Dosya işlemleri olmadan yapabilirim, sadece dosya işlemleriyle nasıl çalışılacağını öğrenmek , böylece ufkumu genişletmek istiyorum.
 

Lütfen, sırayla başka bir bağlantılı kaynak göstergesi kullanan bir Uzman Danışmandan bağlantılı bir kaynak göstergesinin nasıl çağrılacağına dair bir kod örneği sağlayın. Örneğin A göstergesi var, ondan B çağrılıyor.Ayrıca A kullanan Expert Advisor C var.

Yardım bu konuda anlaşılmaz bir şekilde yazılmıştır. A göstergesindeki olağan yapı: #resource "\\Indicators\B.ex4" ve ardından iCustom(::Indicators\B.ex4) - A göstergesini kendi başına çalıştırırken iyi çalışır. Bununla birlikte, #resource "\\Indicators\A.ex4" EA'ya A eklenirse , iç içe gösterge için bir kaynak yüklenemiyor hatası oluşur ve bu, herhangi bir nedenle Kitaplıklar dizininin belirtildiği, kesinlikle çarpık sentezlenmiş bir yolu gösterir, ve B göstergesi kendi içinde aranır ( MQL4\Libraries\::Indicators\B.ex4::Indicators\B.ex4 ).

 
meat :

ArraySize gelince, geçen gün benzer bir sorunu MQL4'te gündeme getirdim: https://www.mql5.com/ru/forum/152471 . Anladığım kadarıyla MQL5'te her şey bu planla aynı olmalı.

Ve bu 969 yapısı ne zaman ortaya çıktı? Belki de bir şekilde itirazımı dikkate aldılar :) Bu sorunla ilgili olarak servis masası, bunun nedeninin optimize edicinin yanlış çalışmasından kaynaklandığını ve yeni yapılarda türü uint olarak değiştireceklerini söyledi. Daha doğrusu, aslında hala uint, sadece belgelenmemiş :) Ve bu arada, ArrayResize da uint olarak değiştirilecek. Onlara hemen değiştirmelerini tavsiye ettim ulong , aksi takdirde yakın gelecekte büyük hacimleri depolarken 32 bitlik bir değerin olmaması nedeniyle bu soruna geri dönmek zorunda kalacaklar.

Hata durumunda -1 değerine gelince, bununla ilgili herhangi bir sorun olmamalıdır, çünkü: (int)-1 = (uint)-1 = 0xFFFFFFFF = UINT_MAX, yani. bit gösterimi aynıdır. Doğru, karşılaştırma işlemi zaten farklı bir sonuç verecektir. Onlar. kod şöyle olsaydı:

yanlış olacaktır.

Talebiniz için tekrar teşekkürler, ArraySize ve ArrayRange fonksiyonlarının dönüş tipini değiştirmeyeceğiz, int tipini bırakacağız, code optimizer'da düzeltmeler yaptık, artık sizin tanımladığınız herhangi bir hata olmayacak.

Bir MQL dizisindeki toplam eleman sayısı INT_MAX'ı aşamaz ve bu değişmeyecektir.
Bir MQL programı daha büyük diziler gerektiriyorsa, ayrı bir sınıf (örneğin, CBigArray) oluşturmanız gerekecektir.
 

mql5'te iCustom'da ustalaşmaya çalışıyorum. mql4'te ustaydı :)

Görev, MACD'ye benzer bir şey çizmektir, ancak hızlı hareket eden bir ortalama yerine, Örnekler klasöründe bulunan VIDYA göstergesi kullanılmalıdır.

Standart MACD kodunu aldım ve hızlı hareket eden ortalama yerine VIDYA için parametreleri ekledim. Sorun, her şeyin derlenmesi ama hiçbir şeyin çizilmemesidir .

Standart MACD kodunu değiştirdiğim aşağıdaki kodda 2 yeri vurguladım. Diğer her şey aynı. Lütfen başka neyi kaçırdığımı söyle. Kodun altında bir yerde olduğunu varsayıyorum ...

 //+------------------------------------------------------------------+
//|                                                         MACD.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright    "2009, MetaQuotes Software Corp."
#property link          "http://www.mql5.com"
#property description "Moving Average Convergence/Divergence"
#include <MovingAverages.mqh>
//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots    2
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_type2   DRAW_LINE
#property indicator_color1  Silver
#property indicator_color2  Red
#property indicator_width1   2
#property indicator_width2   1
#property indicator_label1   "MACD"
#property indicator_label2   "Signal"
//--- input parameters
 Первый вставленный кусок:
input int                  Per= 7 ;               // Per
input int                 Per1= 21 ;             // Per1
input int                 Shift= 0             // Shift
 Конец

input int                 InpSlowEMA= 84 ;               // Slow EMA period
input int                 InpSignalSMA= 9 ;               // Signal SMA period
input ENUM_APPLIED_PRICE InpAppliedPrice= PRICE_CLOSE ; // Applied price
//--- indicator buffers
double                    ExtMacdBuffer[];
double                    ExtSignalBuffer[];
double                    ExtFastMaBuffer[];
double                    ExtSlowMaBuffer[];
//--- MA handles
int                       ExtFastMaHandle;
int                       ExtSlowMaHandle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,ExtMacdBuffer, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,ExtSignalBuffer, INDICATOR_DATA );
   SetIndexBuffer ( 2 ,ExtFastMaBuffer, INDICATOR_CALCULATIONS );
   SetIndexBuffer ( 3 ,ExtSlowMaBuffer, INDICATOR_CALCULATIONS );
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger ( 1 , PLOT_DRAW_BEGIN ,InpSignalSMA- 1 );
//--- name for Dindicator subwindow label
   IndicatorSetString ( INDICATOR_SHORTNAME , "MACD(" + string (InpSlowEMA)+ "," + string (InpSignalSMA)+ ")" );
//--- get MA handles
 Второй вставленный кусок
   ExtFastMaHandle= iCustom ( NULL , 0 , "Examples\\VIDYA" ,
                     Per,
                     Per1,
                     Shift
                     );
 Конец
   ExtSlowMaHandle= iMA ( NULL , 0 ,InpSlowEMA, 0 , MODE_SMA ,InpAppliedPrice);
//--- initialization done
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
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 &TickVolume[],
                 const long &Volume[],
                 const int &Spread[])
  {
//--- check for data
   if (rates_total<InpSignalSMA)
       return ( 0 );
//--- not all data may be calculated
   int calculated= BarsCalculated (ExtFastMaHandle);
   if (calculated<rates_total)
     {
       Print ( "Not all data of ExtFastMaHandle is calculated (" ,calculated, "bars ). Error" , GetLastError ());
       return ( 0 );
     }
   calculated= BarsCalculated (ExtSlowMaHandle);
   if (calculated<rates_total)
     {
       Print ( "Not all data of ExtSlowMaHandle is calculated (" ,calculated, "bars ). Error" , GetLastError ());
       return ( 0 );
     }
//--- we can copy not all data
   int to_copy;
   if (prev_calculated>rates_total || prev_calculated< 0 ) to_copy=rates_total;
   else
     {
      to_copy=rates_total-prev_calculated;
       if (prev_calculated> 0 ) to_copy++;
     }
//--- get Fast EMA buffer
   if ( IsStopped ()) return ( 0 ); //Checking for stop flag
   if ( CopyBuffer (ExtFastMaHandle, 0 , 0 ,to_copy,ExtFastMaBuffer)<= 0 )
     {
       Print ( "Getting fast EMA is failed! Error" , GetLastError ());
       return ( 0 );
     }
//--- get SlowSMA buffer
   if ( IsStopped ()) return ( 0 ); //Checking for stop flag
   if ( CopyBuffer (ExtSlowMaHandle, 0 , 0 ,to_copy,ExtSlowMaBuffer)<= 0 )
     {
       Print ( "Getting slow SMA is failed! Error" , GetLastError ());
       return ( 0 );
     }
//---
   int limit;
   if (prev_calculated== 0 )
      limit= 0 ;
   else limit=prev_calculated- 1 ;
//--- calculate MACD
   for ( int i=limit;i<rates_total && ! IsStopped ();i++)
      ExtMacdBuffer[i]=ExtFastMaBuffer[i]-ExtSlowMaBuffer[i];
//--- calculate Signal
   SimpleMAOnBuffer(rates_total,prev_calculated, 0 ,InpSignalSMA,ExtMacdBuffer,ExtSignalBuffer);
//--- OnCalculate done. Return new prev_calculated.
   return (rates_total);
  }
//+------------------------------------------------------------------+
 
Nilog :

mql5'te iCustom'da ustalaşmaya çalışıyorum. mql4'te ustaydı :)


Günlüğe ne yazıyor? Hata denetimi yoktur (örneğin, bir tanıtıcı alırken). Yeni göstergedeki arabellek numarası eskisiyle eşleşiyor mu?
 

Bilmiyorum belki çoktan olmuştur ama soru şu, yeni bir bar , tampon için PLOT_EMPTY_VALUE değerleri 0.0 olarak ayarlanmış ama aslında bazen tamamen farklı değerler olabiliyor

Neden: