Hatalar, hatalar, sorular - sayfa 590

 
Swan :

Tüm çubuklar için gösterge bir kez hesaplanır - yani. büyük bir tarihe başlarken biraz yavaşlayabilir.

Gelecekte, birkaç değer yeniden hesaplanır - lyat olmalıdır :)

Programcıların aynı zamanda boş zamanlarında programlamadan zaman dilimlerini manuel olarak atlamayı seven insanlar olduğunu unutmayın. Ve her yeni TF, göstergenin tüm anatomisinin başka bir başlatma-başlatma işlemidir, tüm hesaplamalar yenisinde yapılacaktır. Bu nedenle, ArrayInitialize() , TF'den TF'ye sonraki her atlamada tetiklenecektir. Gösterge, yeniden başlatılması gereken birkaç arabellekle karmaşıksa, gecikmeler acımasızca birikir ve otomatik olarak tahsis edilen belleğin aşırı kullanımından bahsetmiyorum bile.

Ne kadar saf bir yoldaşım!.. Ne de olsa, OnInit() 'te başlatma gerçekleştirmenin ve bu aşamada bundan muzdarip olmanın, OnCalculate() 'e daha acil görevlere dalmanın yeterli olduğundan her zaman eminim. Ama hayır, bana borular. Bu arada, genel olarak, karmaşık göstergelerin az ya da çok başarılı bir şekilde yazılması, ArrayInitialize() öğesinin neden tam olarak OnCalculate() içinde yer alması, her bir onay işaretini kontrol etmesi ve birincil ve yalnızca ile çıkmaması gerektiği konusunda net bir anlayış vermedi. OnInit() içinde başlatma. Ampirik olarak, yalnızca bu seçeneğin reddedilmesinin hemen sorunları ortaya çıkardığı durumlar buldum, ancak daha sonraları. Bu arada, basit ve bariz insan mantığı (kod mantığı değil) açısından, OnCalculate( ) içindeki ArrayInitialize() öğesinin çok kışkırtıcı göründüğünü, hiçbir zaman böyle durumlarla karşılaşmadığım gerçeği göz önüne alındığında not ediyorum.

 if (prev_calculated< 7 ) // или < чего-то там...
birden fazla işe yarar - ilk başlangıçta. Yani yeni fraktallar ortaya çıkar, ancak durum sessizdir. Öyleyse OnCalculate() içinde ne yapıyor?!

İnancımda daha da safım

handle= iFractals ( _Symbol , _Period );

sözde , dizilerin bu çok temizlemelerini ve ekonomik algoritmanın etkisini , yine orada bulunan, ancak biraz farklı bir biçimde olan orijinal Fractals.mq5'ten otomatik olarak devralmalıdır. Ama - tekrar tekrar borular! Kendim iki kez düşünüp, tutacağını kullandığım indikatörden kopyala-yapıştır ile kendi kodumu şişirmek zorunda kaldım. Fractals.mq5 ile yardımdaki iFractals örneğini karşılaştırırken, ikinci kodun ilkinden daha büyük olduğunu (hatta maksimum azalma). bilmiyorum. Bana şapka çıkartın, ancak genel olarak, programcılar kodlarına bir şeyi tüm kitaplığa atıfta bulunan bir satıra eklemek için bir şeye güveniyorlar, bir sınıf mı yoksa hacimli başka bir şey var mı, ama burada ...

Şimdi daha önce bahsettiğim sorunun özünü ortaya koyacağım. Üst fraktallara basitleştirilmiş iFractals gösterge kodunu ekliyorum. Orijinal örnekte, arabellek tüm geçmiş için doldurulur. Durumu değiştirelim - hikayenin sadece bir kısmını kopyalayın. Kopyalanan değerlerin ilk hesaplamasındaki ödevi yorumlayalım ve değerimizi daha küçük bir değere ayarlayalım:

values_to_copy= 100 ; // то же, что amount
Şimdi zaman dilimlerine atlayalım ve ortaya çıkan fraktal eserler karşısında dehşete düşelim. Geçmişin fraktalların gerekli olmadığı kısmını temizlemek için Fractals.mq5'ten otomatik olarak devralınmayan temizleme dizileri kod bloğunu kopyalayıp yapıştırmaktan daha iyi bir şey düşünemedim:
   if (bars_calculated< 7 )
   {
       ArrayInitialize (FractalUpBuffer, EMPTY_VALUE );
       Print ( "the condition is true; ArraySize(FractalUpBuffer)=" , ArraySize (FractalUpBuffer));
   }
Artık her şey ( çok fazla olan!! ) mükemmel bir şekilde temizlenir ve aynı zamanda Print() yeniden başlatmanın ne zaman ve kaç kez çalışacağını gösterir, ayrıca arabelleğin boyutunu gösterir. Boyutun 100'den çok uzak olduğuna ikna olduk, ama çok daha fazlası. Masanın tozunu almam gerekirse, tüm daireyi değil masanın tozunu alıyorum. Ya da hile, ne pahasına olursa olsun beni aşırı bellek ve zaman harcamanın önemsiz olduğuna ikna etmektir, sorunu dolaylı olarak çözmenin bir yolunu bulabilir ve ellerime bağlı olmayan kaynakların bariz bir şekilde yutulmasına dikkat etmeyebilir miyim?


Kuğu :

Bir fi, bazı boyutların ayarlanması gerekecek .. Aynı sınırlarla düz yapmak varken neden diğer sınırlarla kavisli bir döngü yapsın?)

Döngünün boyutunu ayarlamak ve dizinin boyutuna göre dans etmemek Ortodoks'tur .. aksi takdirde gösterge koltuk değneklerine dayanacaktır.

Dürüst olmak gerekirse, yüklemek istemedim, ancak sempatizanların tüm kodu kazma yolunu izleyeceğini önceden biliyordum. Vasily Ivanovich geri döndüğünde bir kürek istediğinde - kırıldığı ortaya çıktı - atı gömdüler - Chapai yokken beyazlar köye saldırdı. Büyük olasılıkla başka birinin kodunun zillerini ve ıslıklarını araştırmak isteyen hiç kimsenin olmayacağını fark ederek, yalnızca, daha fazla yükleme yapmadan, sonunda ortaya çıkacak olan göstergenin sonucuna başvurabilirim (frenleri saymaz ve diğer eksiklikler): https://www.mql5.com /en/forum/1111/page577#comment_119227 . Şimdi düşün ve söyle bana, orada her şeyin basit olduğuna ve görünüşte bariz çözümler sunduğuna inanmaya değer mi?

Herhangi bir belirli parça hakkında herhangi bir şey sormadan önce kodu basitleştirip sınırlandırmam boşuna değil. Bu nedenle, kendinizi sadece bununla sınırlamanızı ve amatör olmadıkça tüm atın mezarını açmamanızı rica ediyorum ...

Genel olarak, dördüncü - özel - tampon, prensipte, ilk üçten daha uzundur (uzunluk olarak birbirine eşittir) ve SetIndexBuffer() nedeniyle, genel olarak tüm tarih boyunca gerilir! Döngünün sınırları dördüncü arabelleğe uzatılırsa ve aynı zamanda ilk üç dizi buna göre yeniden boyutlandırılırsa, en azından döngüdeki öğelerin sayısı artacaktır, bu da tamamen soldaki tarama için tahmini süreyi artıracaktır. tampon elemanlarının segmenti. Bu, algoritmanın bu versiyonuyla ortaya çıkacak problemlerle buzdağının sadece görünen kısmı. Artı, her şeye ek olarak, boyutları büyüdüğü için diğer arabelleklerin yeniden başlatma süresi artacaktır. Dördüncü özel dizi, başka bir yerde EMPTY_VALUE ile açıkça doldurulamaz, çünkü gösterge, ilk üç tampon ile dördüncü tampon arasında indeksler arasında herhangi bir yazışma olmadığı belirli bir algoritmaya göre diğer zaman çerçevelerinden fraktalların en şiddetli yeniden düzenlenmesine maruz kalır. ...

Kuğu :

//ve EMPTY_VALUE değerleri 0 ve 1 dizi elemanlarına, mm.. ve son üç çubukta atanır)

Nasıl yani? Neden her şey değil? İşte bunu anlamadım. Açıklamak? Genel olarak, bu sadece gerçek (etkili) değerlerin atanmasıyla ilgili değil, tüm tamponun kaçınılmaz olarak taranmasıyla ilgilidir. ArrayInitialize() , diğer birçok dizi işlevi gibi, son MQL programcıları için örtük olan bir döngüye dayanır.

Bellek taşması sorunu geçerliliğini koruyor ve geliştiricilere , arabellek yeniden başlatmanın miktarını ve hatta daha da iyisi sınırlarını belirleyen ArrayInitialize() işlevine ek bir parametre eklemeyi düşünmeleri için bir istek .

Not: OnInit( ) içindeki ArrayInitialize() öğesinin burada neden verimli olmadığını tahmin ediyor gibiyim. Tamponlar dinamiktir, boyut değiştirirler ve OnInit() içinde yalnızca bir kez ve geçerli uzunluk için değerlerle başlatılırlar, OnCalculate() içindeki gerçek tampon boyutlarının henüz farkında değildirler.

Dosyalar:
cleanup.mq5  2 kb
 
papaklass :

Görselleştiricideki gösterge çalışmıyor:

Çevrimiçi terminalde iyi çalışıyor:

Herhangi bir ayrıntı verir misiniz? Gösterge, görselleştirici tablosuna nasıl girdi?
 
papaklass :

EA koduna aşağıdaki satırları ekliyorum

Bu üç göstergeyi temiz bir tabloya asıyorum ve şablonu bir uzman adı altında kaydediyorum. Bir önceki mesajımda internette resim var.

Uzmanı görselleştiricide başlatıyorum.

1. Kayıtlı şablonu göster

2. Görselleştirmeyi şablon olmadan çalıştırmayı deneyin (yani, önce ilgili tpl dosyasını silin). En son 555 derlemesinde, otomatik olarak eklenen özel göstergeler doğru şekilde görüntülenmelidir.

 
papaklass :

Her şey çalışıyor. Teşekkür ederim.

Şablon silindi. OnInit() içindeki Expert Advisor'da şunu yazdım:

Bana şablonunu göster. Gösterge ayrıca şablonla birlikte normal şekilde görüntülenmelidir (yani sorun var ve çözülmelidir)
 
papaklass :

*.tpl dosyası gönderme

Şimdi şablonla tekrar denedim - çalışmıyor. Şablonu siliyorum - işe yarıyor.

Teşekkür ederim. Anlayacağız.
 

x100intraday :

Şimdi düşün ve söyle bana, orada her şeyin basit olduğuna ve görünüşte bariz çözümler sunduğuna inanmaya değer mi?

fse dahice - basit.

Gerisi işe yaramadı. Forumdaki soruyla ilgili anekdot bademciklerin nasıl çıkarılacağını hatırlatıyor :)

Ortodoks gösterge fraktallarının sınırlı bir örneği. belki yardımcı olur..

 //+------------------------------------------------------------------+
//|                                                     Fractals.mq5 |
//+------------------------------------------------------------------+
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
#property indicator_type1   DRAW_ARROW
#property indicator_type2   DRAW_ARROW
#property indicator_color1  clrGray
#property indicator_color2  clrGray
#property indicator_label1   "Fractal Up"
#property indicator_label2   "Fractal Down"
//--- input parameters
input int BarsCount= 100 ;
//---- indicator buffers
double ExtUpperBuffer[];
double ExtLowerBuffer[];
//--- 10 pixels upper from high price
int     ExtArrowShift=- 10 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit ()
  {
//---- indicator buffers mapping
   SetIndexBuffer ( 0 ,ExtUpperBuffer, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,ExtLowerBuffer, INDICATOR_DATA );
   IndicatorSetInteger ( INDICATOR_DIGITS , _Digits );
//---- sets first bar from what index will be drawn
   PlotIndexSetInteger ( 0 , PLOT_ARROW , 217 );
   PlotIndexSetInteger ( 1 , PLOT_ARROW , 218 );
//---- arrow shifts when drawing
   PlotIndexSetInteger ( 0 , PLOT_ARROW_SHIFT ,ExtArrowShift);
   PlotIndexSetInteger ( 1 , PLOT_ARROW_SHIFT ,-ExtArrowShift);
//---- sets drawing line empty value--
   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   PlotIndexSetDouble ( 1 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
//---- initialization done
  }
//+------------------------------------------------------------------+
//|  Fractals                                                        |
//+------------------------------------------------------------------+
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[])
  {
   int i,limit;
//---
   if (rates_total< 5 ) return ( 0 );
//---
   if (prev_calculated< 7 )
     {
      limit= 2 ;
       if (rates_total-2>BarsCount) limit=rates_total-BarsCount;
       PlotIndexSetInteger ( 0 , PLOT_DRAW_BEGIN ,limit); //отрисовываются и расчитываются только значения на последних BarsCount барах
       PlotIndexSetInteger ( 1 , PLOT_DRAW_BEGIN ,limit);

      for (i=rates_total- 2 ;i<rates_total;i++) //Последним двум барам присваивается EMPTY_VALUE. Исправил циферку в соответствии с iFractal(там фрактал может быть на 2ом баре)
         {
         ExtUpperBuffer[i]= EMPTY_VALUE ;
         ExtLowerBuffer[i]= EMPTY_VALUE ;
         }
     }
   else
      {
      limit=prev_calculated- 3 ; //Здесь от prev_calculated правильнее считать..
      
       //---Добавленным с появлением нового бара элементам массивов присваиваем значение EMPTY_VALUE//Возможно всё будет нормально и без этого.
       if (rates_total>prev_calculated)
         {
         for (i=prev_calculated;i<rates_total;i++)
            {
            ExtUpperBuffer[i]= EMPTY_VALUE ;
            ExtLowerBuffer[i]= EMPTY_VALUE ;
            }
         }
       //---
      }
//---
   for (i=limit;i<rates_total- 2 && ! IsStopped ();i++) //Исправил циферку
     {
       //---- Upper Fractal
       if (High[i]>High[i+ 1 ] && High[i]>High[i+ 2 ] && High[i]>=High[i- 1 ] && High[i]>=High[i- 2 ])
         ExtUpperBuffer[i]=High[i];
       else ExtUpperBuffer[i]= EMPTY_VALUE ;
       //---- Lower Fractal
       if (Low[i]<Low[i+ 1 ] && Low[i]<Low[i+ 2 ] && Low[i]<=Low[i- 1 ] && Low[i]<=Low[i- 2 ])
         ExtLowerBuffer[i]=Low[i];
       else ExtLowerBuffer[i]= EMPTY_VALUE ;
     }
//--- OnCalculate done. Return new prev_calculated.
   return (rates_total);
  }
//+------------------------------------------------------------------+
Fractals
Fractals
  • oylar: 8
  • 2010.01.26
  • MetaQuotes Software Corp.
  • www.mql5.com
Фракталы (Fractals) — это один из пяти индикаторов торговой системы Билла Вильямса, позволяющий обнаруживать дно или вершину.
 
Swan :

fse dahice - basit.

Gerisi işe yaramadı. Forumdaki soruyla ilgili anekdot bademciklerin nasıl çıkarılacağını hatırlatıyor :)

Ortodoks gösterge fraktallarının sınırlı bir örneği. belki yardımcı olur..

Aslında, göstergeyi tutamaçtan yazıyorum... ancak EMPTY_VALUE değerleriyle açık manuel doldurma lehine ArrayInitialize() yöntemini terk etme fikrini beğendim. Teşekkür ederim, bu konuda yeni bir karışıklık yaratmaya çalışacağım, umarım daha sonra çözülmek zorunda kalmaz. Her ne kadar burada incelikler ve rahatsızlıklar olacak olsa da, bunları şimdiden öngörüyorum... ama neyse.
 

Sonraki kod:

 struct Pos
{
   int x;
   int y;
};

class Test
{
public :
   Test( const Pos& other)
      : pos(other)
   {
       Print ( "other = {" , other.x, ", " , other.y, "}" );
       Print ( "pos = {" , pos.x, ", " , pos.y, "}" );
   }
   
public :
   Pos pos;
};

int OnInit ()
{
   Pos pos = { 123 , 456 };
   Test test(pos);
   
   return ( 0 );
}

Sorunlar:

2011.12.05 22:01:28 RectLabel (EURUSD,H1) konum = {12, 176314750}
2011.12.05 22:01:28 RectLabel (EURUSD,H1) diğer = {123, 456}

Yani, başlatma listesi çalışmadı, yapıda çöp var. Bu bir hata mı, değil mi?

 

İki aracının bulutla bağlantısı kesildi, ancak yine de her 30 saniyede bir bulut sunucularına bağlanıyorlar.

MO 0 Ağı 00:00:17 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0)
LK 0 Ağı 00:00:47 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
RG 0 Ağı 00:01:17 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0)
NS 0 Ağı 00:01:48 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
RO 0 Ağı 00:02:18 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0)
OK 0 Ağ 00:02:48 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0)
MG 0 Ağı 00:03:18 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
DR 0 Ağı 00:03:48 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
DN 0 Ağı 00:04:18 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
EJ 0 Ağı 00:04:48 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
GF 0 Ağı 00:05:18 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
RR 0 Ağı 00:05:48 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
NN 0 Ağ 00:06:18 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
KJ 0 Ağı 00:06:48 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
QF 0 Ağı 00:07:18 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
HQ 0 Ağı 00:07:48 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
PM 0 Ağ 00:08:18 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0)
QI 0 Ağı 00:08:48 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
KE 0 Ağı 00:09:18 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
NQ 0 Ağı 00:09:51 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
OM 0 Ağı 00:10:18 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
RI 0 Ağı 00:10:48 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
LE 0 Ağı 00:11:18 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
EP 0 Ağı 00:11:48 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
IL 0 Ağı 00:12:18 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0. aracılığıyla)
HH 0 Ağ 00:12:48 2.agents.mql5.com'a bağlı (bir proxy sunucusu 192.168.0)
FD 0 Ağı 00:13:18 2.agents.mql5.com'a bağlı (bir proxy sunucusu aracılığıyla

 
Konstantin83 :

İki aracının bulutla bağlantısı kesildi, ancak yine de her 30 saniyede bir bulut sunucularına bağlanıyorlar.

Gelelim servis masasına.

Nasıl kapatıldığını açıklar mısınız? Kaldırılan (durdurulan) hizmetler? Sorunlu aracıların günlüklerini ekleyin.

Günlüklerde bazı garip proxy ayarları . Aracı yapılandırmalarında proxy ayarlarını yaptınız mı? Lütfen temsilci yöneticinizin common.ini dosyasını uygulamaya ekleyin.