Hatalar, hatalar, sorular - sayfa 2754

 
fxsaber :

Önemli olan referans ile geçebilmektir.

Tıpkı stringlerde olduğu gibi, Geliştiricilerin (henüz yapmamışlarsa) değişkeni gerçekten kopyalamadan her şeyi referans olarak iletme seçeneği vardır.

 void f()
{
         MqlTick tick;
         SymbolInfoTick ( NULL , tick );
        g( tick );
}
 inline void SymbolInfoTick ( string symbol, MqlTick& tick )
{
       tick = _LastTick; //л енивое программирование: а не будем ничего копировать,
                        //пока _LastTick не изменится
}


Ve bu, belirli bir MqlTick yapısı için değil, tüm durumlar için bir çözüm olacaktır.

 
A100 :

Bu, _ Digits, _P oint, _Period, _LastError vb.'yi doğrudan kullanmanın bir anlamı olmadığını bir kez daha doğrular. hayır (ve _Symbol bile NULL ile değiştirilebilir). Aslında const volatile olarak bildirilmeleri gerekir.

Ve tam tersine, bu seriyi tamamlamayı teklif ediyorsunuz.

Haklısınız, ancak IsStopped bayrağı dışında yalnızca onlar neredeyse uçucudur - %100 uçucudur, yani. herhangi bir IsStopped okuması %100 bellek okumasıdır.
Geri kalanı için, neredeyse geçici, derleyicinin bir değişkenin değerini bir kayıttaki ilk erişildiğinde önbelleğe alabileceği ve böyle bir değişkene bir sonraki erişildiğinde önbelleğe alınan değeri kullanabileceği, ancak yalnızca aynı işlev veya çağrı dalı içinde olduğu anlamına gelir. aynı işleve sıralanırlar.
Bu mümkündür (ve gereklidir), çünkü önceden tanımlanmış değişkenlerin değişimi (IsStopped hariç) MQL giriş noktası (OnXXX işlevi) içinde gerçekleşemez.

const VARIABLE MODIFIER ile ilgili olarak, const'ın programcılar tarafından programcılar için kullanıldığını söyleyelim.
Bildiğimiz gibi, bir döküm bir değişkenin sabitliğini değiştirebilir, bu nedenle derleyiciye const değiştirici ile güvenilemez.
Derleyici, değişkenin değerini değiştirmediğini ve bir sabitle başlatıldığını görürse, const değiştiricisi olmadan bile böyle bir değişkeni anlık bir değere dönüştürür (ImmediateValue)

_LastTick ile ilgili olarak tartışıyoruz ama...
Bu bir yapıdır, basit bir atomik tip değildir ve MQL programının herhangi bir noktasında, değerin alındığı zaman da dahil olmak üzere aniden değişebilir.
Bu yapıyı ele almak için bir senkronizatör tanıtmanız gerektiği ortaya çıktı.

Sürekli olarak performans üzerinde çalışıyoruz, özellikle bu nedenle, yapıların yüksek sıklıkta yayınlanmasından dolayı.
MQL kodunun çalışmasını hızlandırmak için birçok çalışma planlanmaktadır.

Документация по MQL5: Предопределенные переменные
Документация по MQL5: Предопределенные переменные
  • www.mql5.com
Для каждой выполняющейся mql5-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql5-программы на выполнение...
 
Ilyas :

_LastTick ile ilgili olarak tartışıyoruz ama...

Bu bir yapıdır, basit bir atomik tip değildir ve MQL programının herhangi bir noktasında, değerin alındığı zaman da dahil olmak üzere aniden değişebilir.
Bu yapıyı ele almak için bir senkronizatör tanıtmanız gerektiği ortaya çıktı.

ancak test cihazında _LastTick, MQL programının herhangi bir noktasında değişemez mi?

evet ise, yalnızca hesaplama hızının en önemli olduğu test cihazı için böyle bir çözüm verin

 
Igor Makanu :

ancak test cihazında _LastTick, MQL programının herhangi bir noktasında değişemez mi?

evet ise, yalnızca hesaplama hızının en önemli olduğu test cihazı için böyle bir çözüm verin

Öyleyse, OnTick işleyicisinde bir kez bu onay işaretini istemenizi ve ardından alınan verilerle çalışmanızı engelleyen nedir? Pratik olarak hiçbir maliyeti yoktur. Neden 100 kez isteyelim (daha önce verilen testlerde olduğu gibi), birdenbire yapay olarak frenler yaratarak. Onlar. Expert Advisor'ın çarpık kodu sorununun, MT'nin dahili çalışmasını karmaşıklaştırarak çözülmesi önerilmektedir. Veya normal ölçüleriniz var mı?
 
Alexey Navoykov :
Öyleyse, OnTick işleyicisinde bir kez bu onay işaretini istemenizi ve ardından alınan verilerle çalışmanızı engelleyen nedir?

Market ve Cloud tarafından yüklenen danışman yaratıcılarının düşük kalifikasyonu araya giriyor.

 
Alexey Navoykov :
Öyleyse, OnTick işleyicisinde bir kez bu onay işaretini istemenizi ve ardından alınan verilerle çalışmanızı engelleyen nedir? Pratik olarak hiçbir maliyeti yoktur. Neden 100 kez isteyelim (daha önce verilen testlerde olduğu gibi), birdenbire yapay olarak frenler yaratarak. Onlar. Expert Advisor'ın çarpık kodu sorununun, MT'nin dahili çalışmasını karmaşıklaştırarak çözülmesi önerilmektedir. Veya normal ölçüleriniz var mı?

"OnTick" tarafından işlenecek olaylar, dışarıdan bir öncelik sırasına gelir. Diğer işleyicilerde, bu tür yeni olayların gelmediğinden emin olmak gereksiz değildir, aksi takdirde önceki onay işaretinin verileri geçersiz/güncel olur.

 
Alexey Navoykov :
Öyleyse, OnTick işleyicisinde bir kez bu onay işaretini istemenizi ve ardından alınan verilerle çalışmanızı engelleyen nedir? Pratik olarak hiçbir maliyeti yoktur. Neden 100 kez isteyelim (daha önce verilen testlerde olduğu gibi), birdenbire yapay olarak frenler yaratarak.

Test cihazında tam olarak bunu yapıyorum

Alexey Navoykov :
Onlar. Expert Advisor'ın çarpık kodu sorununun, MT'nin dahili çalışmasını karmaşıklaştırarak çözülmesi önerilmektedir. Veya normal ölçüleriniz var mı?

peki, olduğu gibi, kodun eğriliği, yerleşik kod yazma yöntemleriyle belirlenir, bu örneklerde KB'ye ve SB kullanımına bakın.

SB kullanmıyorum profiler ile ölçtüm aylarca çözüm aradım hız testleri ile ilgili bir konu vardı kısmen alternatif çözümler attım

ölçüm normal mi? bu ciddi bir şekilde ele alınması gereken kaygan bir konu, EA'm optimizasyon için bana uyuyor, 18 ay geçti 6 saniye, şimdi 2.5 saniye, IMHO Kendim için iyi bir iş çıkardım)))

 
Malzemelere göre ... aşağıdaki hususlar ortaya çıktı:
UninitializeReason() öğesinin programın herhangi bir bölümünde, özellikle OnInit() içinde çağrılabileceğini göz önünde bulundurarak (ve böyle bir çağrı amaçlanmamışsa, uygulamanın sınırlarını genişletebilirsiniz)
Sunulan:

_UninitReason değişkeninin değeri OnDeinit() işlevi çağrılmadan önce oluşturulmuşsa,
ve önceki EA başlatma işleminin nedeni belirlenemezse (REASON_PROGRAM, REASON_REMOVE, vb.)
o zaman bu çağrıdan önce tanımsız (-1) olmalıdır. Şimdi 0, yani aslında REASON_PROGRAM

EA tamamen yeniden başlatılırsa ( REASON_RECOMPILE , REASON_ACCOUNT , REASON_CLOSE vb.), o zaman
programın yeni bir kopyasını başlatırken _UninitReason değişkenini uygun değere ayarlamak mümkün görünüyor (REASON_RECOMPILE, REASON_ACCOUNT, REASON_CLOSE, vb.),

ve şimdi 0 olduğu gibi değil, yani. aslında REASON_PROGRAM

Expert Advisor kısmen yeniden başlatılırsa (REASON_CHARTCHANGE vb.), OnInit() içindeki _UninitReason değişkeni karşılık gelen değere (REASON_CHARTCHANGE vb.) eşittir.
ve hiçbir değişikliğe gerek yok
 
Sınıf şablonu yönteminin ileri bildirimi için MT5 hatası (build 2450) derleme hatası .

 template < typename T>
class A{};


class B{
public :
   template < typename T>
   void test(A<T> &a);
};

template < typename T>
void B::test(A<T> &a){}   // 'test' - member function already defined with different parameters 


void OnStart (){ 
   B b;
} 
 

Terminal yeniden başlatıldığında, sürekli ve durmaksızın girişleri günlüğe yazar

2020.05.24 03:36:03.342 HistoryBase     'GBPUSD' 1 invalid bars removed

Kayıttaki tarihi çubuğun süresi sürekli artmaktadır. GBPUSD Günlük grafiği açık ve seğiriyor - sıfır, birinci ve ikinci çubuklar silindi/oluşturuldu. Ve böylece bir daire içinde.

İşte bekliyorum. Ya bu loglarla tüm SSD'yi tıkayacak ya da sonunda duracak...

Fragmanda dünkü giriş.

Dosyalar:
20200523.zip  304 kb
Neden: