Hatalar, hatalar, sorular - sayfa 742

 
TheXpert :
O zaman fabrika yap. Sorun çözülecek.

Evet, şu anda her şey çok basit bir şekilde çalışıyor. Nesne oldukça katı bir şekilde yapılandırılmıştır. Üyelerinin her birinin sanal Load yöntemini çağırır ve onlar da aynısını yapar. Dosyadaki her veri bloğunun (nesnenin) başında bir tür tanımlayıcı yazılır (yükleme sırasında kontrol için). Sobsno ve hepsi. Bir nevi fabrika gibi.

Bir dosyada önceden bilinmeyen bir tür varsa, fabrika yapmak mantıklıdır. Daha sonra hem fabrika hem de tip kayıt tablosu gerekli olacaktır. Görev böyle kalkmazken, ataç ve yapışkan bantla başardım. :)

 

Fan Gunn.

İkinci bağlantı noktası gelecekteyse açı değişir.

Ayrıca, bu nesnenin kopyalama ile ilgili bazı sorunları var (Ctrl tuşunu basılı tutarak). Çoğu zaman kopyalamaz, ancak orijinali sürükler, üçüncü veya beşinci denemeden kopyalamak mümkündür.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов - Документация по MQL5
 
MetaDriver :

Tamam harika.

Teşekkürler, ancak (genel geliştirme için) yapıcının başlangıcında (ataların başlatılmasından sonra) sanal yöntemler tablosunu başlatmanın neden imkansız olduğunu sorabilirsiniz.

zaten söyledim. Yapıcılar bir hiyerarşi içinde çalışır. Ata inşa edilirken, torunları hakkında hiçbir bilgi yoktur.
 
stringo :
zaten söyledim. Yapıcılar bir hiyerarşi içinde çalışır. Ata inşa edilirken, torunları hakkında hiçbir bilgi yoktur.

Okumuştum. Ve mükemmel anladım. Ve okuduğunu anlamaya dayalı bir soru sordu. Resimlerle daha net olmaya çalışacağım.

 class MySecond: MyFirst
{
   void   MySecond(MyArg arg): 
    MyFirst(arg)
   { // Можно код инициализации VMT добавлять здесь. Тогда не будет проблем с виртуальными вызовами.
     ...............
     MyVirtualFunc();
      ...........
     return;
   } // Сейчас код инициализации VMT добавляется здесь.

};

Her şeyi anlıyorum, bu şekilde yapmak daha zor, her türlü incelik var. Sonunda tüm örtük başlatmaları reçete etmek çok daha kolay ve daha çok yönlü (sizin için). Hatta önceden "bunu kimsenin yapmadığına" ve "örneğin C++'da bu kabul edilmediğine" vb.

Ancak, bizim (kullanıcılar) için MySecond () yapıcısını MyFirst değil, MySecond sınıfının bölgesi olarak düşünmek çok daha kolay, daha evrensel, daha makul ve mantıklı. Neyin daha kolay olduğunu düşünün: yapıcılarda sanal işlevleri çalışır hale getirmek veya birkaç yerde belgelere yapıcı kodunda önemli ve ciddi kısıtlamalar yansıtmak ve buna rağmen, düzenli olarak "sanal sorunlar hakkında" önemli ve ciddi acemi mesajları almak. servis masası ve forumda yapıcılar. Bu da ciddi bir faktör - yakında çok sayıda yeni gelen bekleniyor..

 
struct SDaylyRange { double min, max, open, close;};
void OnStart ()
  {
//---
   SDaylyRange tmp, tmp2;
   tmp = 2 + 3 ? tmp : tmp2;
   if ( 2 + 3 ) tmp = tmp; else tmp = tmp2;
  }

Yapıları olan Tenar operatörü, Kod Oluşturma Hatasına yol açar (eğer ile değiştirilirse, her şey çalışırsa da)

 

4401 hatası alıyorum düzenli olarak

ERR_HISTORY_NOT_FOUND

Aşağıdaki gösterge kodu

 datetime prevTime[ 22 ];
MqlRates _Rates[];

bool IsNewBar( ENUM_TIMEFRAMES period) {
   datetime currentTime[ 1 ];
   CopyTime ( Symbol (), period, 0 , 1 , currentTime);
   int _;
   switch (period) {
       case PERIOD_M1   : _= 1 ;
         break ;
       case PERIOD_M2   : _= 2 ;
         break ;
       case PERIOD_M3   : _= 3 ;
         break ;
       case PERIOD_M4   : _= 4 ;
         break ;
       case PERIOD_M5   : _= 5 ;
         break ;
       case PERIOD_M6   : _= 6 ;
         break ;
       case PERIOD_M10 : _= 7 ;
         break ;
       case PERIOD_M12 : _= 8 ;
         break ;
       case PERIOD_M15 : _= 9 ;
         break ;
       case PERIOD_M20 : _= 10 ;
         break ;
       case PERIOD_M30 : _= 11 ;
         break ;
       case PERIOD_H1   : _= 12 ;
         break ;
       case PERIOD_H2   : _= 13 ;
         break ;
       case PERIOD_H3   : _= 14 ;
         break ;
       case PERIOD_H4   : _= 15 ;
         break ;
       case PERIOD_H6   : _= 16 ;
         break ;
       case PERIOD_H8   : _= 17 ;
         break ;
       case PERIOD_H12 : _= 18 ;
         break ;
       case PERIOD_D1   : _= 19 ;
         break ;
       case PERIOD_W1   : _= 20 ;
         break ;
       case PERIOD_MN1 : _= 21 ;
         break ;  
       default          : _= 0 ;    
   } 
   if (currentTime[ 0 ]== prevTime[_]) return ( false );
   else {
      prevTime[_] = currentTime[ 0 ];
       return ( true );
   }
}

int OnInit ()
  {
   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 (IsNewBar( _Period )) {
    int err = CopyRates ( Symbol (), PERIOD_D1 , 0 , 2 , _Rates);
    Print ( "Count:" , err);
    if (err < 1 ) {
       Print ( "ERROR:" , GetLastError ());
       Print ( "__Symbol:" , Symbol ());
       return (rates_total);
   }

}
return (rates_total); 
}

başlangıçta hemen bir hata verecektir (D1'e atılmazsa). Veya daha doğrusu, terminali başlattıktan ve grafiği açtıktan sonra - göstergeyi koyun, bir hata alacağız. Terminal kapalı değilse, başlangıçta böyle bir hata oluşmaz.

Ama bir süre sonra (birkaç saat - 2 saat bana yeterdi) uzun süredir açık olan bir grafikte de hata aldığımızı göreceğiz. (m30'da piyasaya sürüldü)

 

Merhaba geliştirici arkadaşlar!

En azından bir uyarı verilmesi için MQL5 derleyicisinde değişiklik yapmak mümkün müdür,

koddaki bu tür sövelerde.

if(Flag_Exitl=true) {break;}


Karşılaştırma koşulu burada doğru yazılmamış (== olmalıdır) ve bu nedenle break her zaman yürütülecektir.

Kod yazarken daha az tümsek doldurmak için bu durum derleyicide (mümkünse) nasıl belirlenir?

(İşe yaramayacağını düşündüm, ödev ve karşılaştırmayı ayırıyor gibi görünüyor, o zaman soru kaldırılır).

 
Fia :

Merhaba geliştirici arkadaşlar!

En azından bir uyarı verilmesi için MQL5 derleyicisinde değişiklik yapmak mümkün müdür,

koddaki bu tür sövelerde.

if(Flag_Exitl=true) {break;}


Karşılaştırma koşulu burada doğru yazılmamış (== olmalıdır) ve bu nedenle break her zaman yürütülecektir.

Kod yazarken daha az tümsek doldurmak için bu durum derleyicide (mümkünse) nasıl belirlenir?

(İşe yaramayacağını düşündüm, ödev ve karşılaştırmayı ayırıyor gibi görünüyor, o zaman soru kaldırılır).

Koşul yanlış yazılmış olabilir, ancak MQL5 yapılarında buna izin verilir.

Kodladığınızı çeviriyorum, Flag_Exitl değişkenini true olarak ayarlayın, ardından Flag_Exitl'in doğru olup olmadığını kontrol edin ve sonra kırın.

Eylemlerin sırası tamamen aynıdır.

 

Ekranda gösterilmesi gerekmeyen tamponlarla nasıl çalışılacağını tam olarak anlamıyorum.

Bazı nedenlerden dolayı, aşağıdaki kod

1) hiçbir şey çizmez

2) her iki arabellek de Label1 olarak adlandırılır.

içlerindeki veriler gerekli "yalan" olsa da

 #property indicator_separate_window
#property indicator_buffers 6
#property indicator_plots   2

//--- plot Label1
#property indicator_label1   "Label1"
#property indicator_color1  clrRed, clrWhite
#property indicator_type1   DRAW_COLOR_LINE

//--- plot Label2
#property indicator_label2   "Label2"
#property indicator_color2  clrRed, clrGreen
#property indicator_type2   DRAW_COLOR_LINE

//--- indicator buffers
double          L1_1[];
double          L2_1[];
double          Colors_1[];

//--- indicator buffers
double          L1_2[];
double          L2_2[];
double          Colors_2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
{
   SetIndexBuffer ( 0 ,L1_1, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,L1_2, INDICATOR_DATA );
   SetIndexBuffer ( 2 , Colors_1, INDICATOR_COLOR_INDEX );
   SetIndexBuffer ( 3 , Colors_2, INDICATOR_COLOR_INDEX );
   SetIndexBuffer ( 4 , L2_1, INDICATOR_CALCULATIONS );
   SetIndexBuffer ( 5 , L2_2, INDICATOR_CALCULATIONS );
   return ( 0 );
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total, const int prev_calculated, const int begin, const double &price[])
{
   for ( int i = 0 ; i < rates_total; i++)
   {
      L1_1[i] = i;
      L1_2[i] = i + 1 ;
   }
   return (rates_total);
}
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования - Документация по MQL5
 

Merhaba. Yanlış yere yazıyor olabilirim ama umarım beni o zaman doğru yöne yönlendirirsiniz. MT5 için Web API'si hakkında bir soruyla nereye gitmeliyim? )

Her ihtimale karşı durumu açıklamaya çalışacağım. Bir MT yöneticisi ve php ile bir WEB API var... Rusça bir hesap oluşturulur, veriler gönderilir ve hatta MT yöneticisinde görüntülenir, ancak bir sorun kaydedilmiştir - MT yöneticisindeki veriler unicode olarak görüntülenir ("04440430043c0438043b0438044f" - kullanıcı adı böyle görünür). Veri gönderirken, hiçbir şey kodlanmaz veya kodu çözülmez, her şey normal olarak MT istemcisinden oluşturulur ... En azından hangi yöne bakmalı? (