Çaydanlıktan gelen sorular - sayfa 65

 
x100intraday :

İşlevimi çağırırken, diziyi referans olarak mı, bir işaretçi aracılığıyla mı yoksa başka bir şey mi iletiyorsunuz?

Parametrelerin değere ve referansa göre iletilmesiyle ilgili El Kitabı bölümünü okuyun:

MQL5 Referansı / Dil Temelleri / Fonksiyonlar / Geçiş Parametreleri

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
Yedelkin :

Parametrelerin değere ve referansa göre iletilmesiyle ilgili El Kitabı bölümünü okuyun:

MQL5 Referansı / Dil Temelleri / Fonksiyonlar / Geçiş Parametreleri

Genelde oradan geldim ve bir önceki mesajda belirtilen derleme hataları bölümü okuduktan hemen sonraydı.

Şimdi daha dikkatli bir şekilde yeniden okudum - her şey const ve nereye yapıştırılacağı ile ilgili.

Teşekkürler, anladım.

 
x100intraday :

OnCalculate'de indekse göre yüksek gibi dizi öğelerini kolayca kullanabilirim . ExtFunc'ta bu dizinin indeks elemanlarına da erişmek mümkün müdür? İşlevimi çağırırken, dizi argümanını referansla, bir işaretçi aracılığıyla veya başka bir şeyle iletin mi? Şimdiye kadar, işlevimi bir diziyle çağırırken aynı satırda "'yüksek' - parametre dönüştürmeye izin verilmiyor" ve "'yüksek' - sabit değişken referans olarak geçirilemez" hata mesajlarını en aza indirebildim. OnCalculate'den argüman. Umutsuz mu yoksa bir çözüm var mı?

OnCalculate'deyken yüksekten başka bir diziye kopyalamaya başvuruyorum:

ve ardından yüksek diziyi doğrudan kullanmak yerine ExtFunc'ta CopyOfHigh'ı kullanın.

Diziyi referans olarak işlevinize iletmeniz yeterlidir.

 bool ExtFunc ( string str, int P, int i, double & high[] )
  {
   if (high[i] < high[i- 1 ]) return ( false );
   return ( true );   
  }

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[])
  {
   int i= 0 ;
   if ExtFunc( "s" , 60 ,i, high ) == 1 )
     Buffer[i] = high[i];
  }
 

Herkese hoş geldiniz!

Uyarı ne anlama geliyor:

tür dönüştürme uzmanı nedeniyle olası veri kaybı.mq5

derleme yaparken??? Bunun üzerine yemin eder:

   string Symb= "EURJPY" ;
   int DIGITS = SymbolInfoInteger (Symb, SYMBOL_DIGITS );

Sorun nedir?

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
sergey1294 :

Diziyi referans olarak işlevinize iletmeniz yeterlidir.

Kesinlikle bu şekilde değil:

 bool ExtFunc ( string str, int P, int i, const double & high[])
  {
   if (high[i] < high[i- 1 ]) return ( false );
   return ( true );   
  }

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[])
  {
   int i= 0 ;
   if ExtFunc( "s" , 60 ,i,high) == 1 )
     Buffer[i] = high[i];
  }
 
RomanS :

Herkese hoş geldiniz!

Uyarı ne anlama geliyor:

tür dönüştürme uzmanı nedeniyle olası veri kaybı.mq5

derleme yaparken??? Bunun üzerine yemin eder:

Sorun nedir?

SymbolInfoInteger () işlevi, long türünde bir değer döndürür (bkz. Referans) ve DIGITS, int olarak bildirilir. Bu, örtük tür dönüşümünün gerçekleştiği yerdir. "Tip dökümü" bölümüne bakın.
 
RomanS :

Uyarı ne anlama geliyor:

tür dönüştürme nedeniyle olası veri kaybı

Bu mesajın anlamı, görüldüğü bağlama göre değişir.

Örneğin:

1. "Açık bir oyuncu seçimi yapın!"

   int DIGITS = (int) SymbolInfoInteger (Symb, SYMBOL_DIGITS );

2. "Örtülü tip döküm ile olası veri kaybı." // Bu gerçek bir çeviridir.

İşlev tarafından döndürülen uzun tür daha büyük olduğundan ve daha geniş bir değer aralığını kapsadığından bu anlaşılabilir bir durumdur.

Çoğu zaman aklıma gelen bir başka seçenek de şudur:

3. "MetaQuotes çalışanları, mql5 derleyicisinin hata mesajları ve uyarılarının kullanıcının ana dilinde yayınlanıp yayınlanmadığını incelemenin ne kadar havalı, çekici ve etkili olacağını anlamıyorlar."

 
MetaDriver :

... mql5 derleyici hata mesajları ve uyarıları kullanıcının ana dilinde yayınlansaydı, çalışmak ne kadar havalı, çekici ve etkili olurdu."

Evet çok güzel olurdu. Her ne kadar kişisel olarak İngilizce konusunda zaten biraz bilgili olsam ve çevirmenler artık bir düzine kuruş olsa da, bu yine o değerli zamanı alıyor, ki bu çok fazla değil. Bazıları, finansal piyasalarda ticaret + programlama ile ilgili zaten çok karmaşık bir konuyla çevirmene girmek için çok az şeye sahiptir. MetaTrader 5, çok dilli bir platformdur. Yardım örneklerindeki (bazen rastlanan) mesajlar ve yorumlar terminalde seçilen dilde olsun.
 

Gösterge iCustom aracılığıyla etkinleştirilirse, her onay işareti için hesaplandığına dair bir şüphe vardı. Ve CopyBuffer aracılığıyla yapılan çağrılara bağlı değildir. Bu doğru?

Doğruysa, gösterge yeniden hesaplamasını devre dışı bırakmak ve yalnızca CopyBuffer öğesini çağırmadan önce etkinleştirmek mümkün müdür?

 
masharov :

Gösterge iCustom aracılığıyla etkinleştirilirse, her onay işareti için hesaplandığına dair bir şüphe vardı. Ve CopyBuffer aracılığıyla yapılan çağrılara bağlı değildir. Bu doğru?

Her şey, özel göstergede hangi mantığın gömülü olduğuna bağlıdır. Prensip olarak, diğer tüm keneleri atlayarak değerlerini günde bir kez yeniden hesaplayabilir. Yazarın iradesiyle, tabiri caizse.

masharov :

Doğruysa, gösterge yeniden hesaplamasını kapatmak ve yalnızca CopyBuffer'ı çağırmadan önce açmak mümkün müdür?

Prensip olarak, bazı insanlar böyle korkunç bir yaklaşım kullanmaya çalışırlar: iCustom aracılığıyla göstergenin bir kopyasını oluşturun, gerekli verileri kopyalayın, göstergenin kopyasını imha edin. Prosedür gerektiği kadar tekrarlanır.

..Ayrıca OnTimer() işlevi de vardır. Onunla kendim çalışmadım, ama belki onu göreviniz için oluşturabilirsiniz.

Neden: