Hatalar, hatalar, sorular - sayfa 436

 
Interesting :

1. Bu neden? Zararlı belirtilerden kurtulmanız gerekir ve kararlı bir şekilde.

2. Değişkenler, diziler ve diğer şeyler ünsüz veya dilin anahtar kelimeleri ile isimlendirilmemelidir (ancak "Sembol" dizisi çok dikkat çekicidir, o zaman kodda bu diziyi veya başka bir şeyi ayrıştırırsınız).

1. Öncelikle, semptomatolojinin olumlu veya olumsuz belirtilere ait olup olmadığını gerçekten belirlemeniz gerekir. Tecrübelerime göre, bunu yapmaması gereken bir fonksiyonda global bir değişkenin değerini değiştirmeye çalıştığım durumlar oldu (lanet kopyala-yapıştır). Birkaç gündür bu hatayı arıyordum. O zamandan beri, prensipte onlarsız yapamayacağım durumlarda global değişkenleri kullanıyorum.

2. katılıyorum. Ama aynı işlev içinde kullanılıyorlarsa beni rahatsız etmiyor. Benzer adlara sahip küresel değişkenler, gerçekten de gelecekteki karışıklığın bir garantisidir.

Документация по MQL5: Глобальные переменные терминала / GlobalVariableGet
Документация по MQL5: Глобальные переменные терминала / GlobalVariableGet
  • www.mql5.com
Глобальные переменные терминала / GlobalVariableGet - Документация по MQL5
 

Ancak sorumu tekrar edeceğim.

OnTick içinde OnInit'in çalışmasının nasıl tanımlanacağı mümkün mü?
Örneğin, OnTick içinde EA başlatmalarının sayısını depolayan statik bir değişken tanımlayın (eğer MQL5'te böyle veya benzer bir özellik varsa)?

 
voix_kas :

Muhtemelen paranoyakım. Genel (global) değişkenleri sevmiyorum. Bunu bir hareket olarak görüyorum.

Global değişkenler en azından uzaktan görülebilir. Ancak, fonksiyonların içindeki ciddi birikimli değişkenleri statiğe gizlemek, komisyonu kendi başına dikkatlice yaymanın yoludur. Bu, kişisel olarak böyle bir işlevin içine gizlenmiş kümülatif bir statik diziyi ilk kez görüyorum. Bu ateşli boyutta bir tırmık.

Sınıfları kullanın - küresel seviyeyi temiz bırakacaklar, tüm cesaretleri gizleyecek ve koltuk değneklerinden kurtulacaklar.

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Основы языка / Переменные / Глобальные переменные - Документация по MQL5
 
voix_kas :

Ancak sorumu tekrar edeceğim.

OnTick içinde OnInit'in çalışmasının nasıl tanımlanacağı mümkün mü?
Örneğin, OnTick içinde EA başlatmalarının sayısını depolayan statik bir değişken tanımlayın (eğer MQL5'te böyle veya benzer bir özellik varsa)?

OnInit tetiklemelerinin sayısı yalnızca sayılamaz, aynı zamanda başlatmanın tam olarak neden gerçekleştiğini de belirler (uygulama sorunu başka bir noktadır).

Örneğin, _UninitReason'a aşina mısınız?

 
Bunu OnInit'te de sayabilirsiniz, başka bir soru da bu verilere başka bir olayda ( global değişkenler kullanmadan) ihtiyacım var. Kim ne derse desin, uygulama sorunu. OnDenit ile aynı şarkı.
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Основы языка / Переменные / Глобальные переменные - Документация по MQL5
 
Hiç ders yazmadım. Herhangi biri yardım edebilirse, minnettar olurum.
Bir WorkSymbols sınıfı yazmanız gerekiyor.
yöntemler:
string GetSymbol[];
bool UpdateSymbols(inWorkSymbols);
bool UpdateSymbolsStatus();
int GetSymbolCount();

İstek küstahsa özür dilerim ... Ben de bunu anlamaya çalışacağım.
 
Renat :

Evet, sembol değiştirme şartı ile zaman dilimini boşuna birleştirmişler gibi görünüyor.

Ben de bunların 2 şarta ayrılmasından yanayım. Zaten servis masasına bir bilet koyun.

Teşekkür ederim!
 

Delirmiş gibi görünüyor. Eleştiri açığız.

 input string inWorkSymbols  = "USDCHF; GBPUSD; EURUSD; USDJPY; USDCAD; AUDUSD; EURGBP; EURAUD; EURCHF; EURJPY; GBPJPY; GBPCHF" ; // Рабочие инструменты

class CSymbolList {
   private :
     string Symbols[];

   public :
     void    CSymbolList() { SetSymbols( "" ); }
     void   ~CSymbolList() { ArrayFree (Symbols); }
     int     GetSymbolCount() { return ArraySize (Symbols); }
     void    SetSymbols( string );
     string GetSymbolName( int );
};

void CSymbolList::SetSymbols( string Source) {
   ArrayFree (Symbols);
   for ( int count = 1 , i = 0 ; i < SymbolsTotal ( false ); i++)
     if ( StringFind (Source, SymbolName (i, false )) != - 1 ) {
       if ( ArrayResize (Symbols, count) != count) {
         ArrayFree (Symbols);
         return ;
      }
      Symbols[count- 1 ] = SymbolName (i, false );
      count++;
    }
}

string CSymbolList::GetSymbolName( int Item) {
   if (Item < 0 || ! ArraySize (Symbols) || Item >= ArraySize (Symbols)) return "" ;
   return Symbols[Item];
}

void OnStart () {
  CSymbolList slMain;
  slMain.SetSymbols(inWorkSymbols);
   for ( int i = 0 ; i < slMain.GetSymbolCount(); i++)
     Print (slMain.GetSymbolName(i));
}
 

Burada hoşuma gitmeyen tek şey, çalışma verilerini içeren dizinin "canlı" boyut değişikliği.
Geliştiricilere soru , önceden girilen kullanıcı verilerinin aşağıdaki koşulda değişken bir dinamik diziye kaydedilmesi garanti edilir mi ?:

 if ( ArrayResize (Symbols, count) == count)
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
voix_kas :

Burada hoşuma gitmeyen tek şey, çalışma verilerini içeren dizinin "canlı" boyut değişikliği.
Geliştiricilere soru , önceden girilen kullanıcı verilerinin aşağıdaki koşulda değişken bir dinamik diziye kaydedilmesi garanti edilir mi ?:

Bahse girerim garantilidir. En azından sürekli buna güveniyorum ve sorun hiç ortaya çıkmadı.
Neden: