Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 153

 
Roffild :

ArrayReverse yardımından:

ArraySetAsSeries () işlevi , dizi öğelerini fiziksel olarak hareket ettirmez, ancak bir timeseride olduğu gibi öğelere erişimi düzenlemek için yalnızca dizin oluşturma yönünü tersine çevirir . ArrayReverse() işlevi, bir dizinin öğelerini, dizi "ters çevrilecek" şekilde fiziksel olarak hareket ettirir.

Ancak bu kod aksini kanıtlıyor:

Niye ya? Her şey doğru.

Numaralandırmanın bir zaman serisindeki gibi olduğu bir dizi ile uğraşıyorsak, yani. sıfır çubuğu en sonuncusu ve sonuncusu en erken olanı, o zaman yeni bir eleman eklendiğinde, sonuncunun yanında yer alacaktır, yani. en erken.

Ve dizi bir zaman dizisindeki gibi numaralandırılmamışsa, o zaman sıfır elemanı en erken ve son eleman en sondur. Bu nedenle yeni bir eleman eklerken en güncelin yanında olacaktır.
Testinizde neler oluyor.

Kanıt nerede - anlamıyorum. Bu genel olarak nasıl kanıtlanabilir ve dizinin başlangıcının bellekte nerede olduğunu ve artım adımının ne olduğunu - pozitif veya negatif - nasıl bulabilir.
Bu yalnızca bir diziyi geçen ve işaretçiler kullanan bir dll ile kanıtlanabilir.
Genel olarak, bu işlemin yürütme süresini ölçerek kanıtlamak daha kolaydır. 100.000.000 elemanlı bir dizi anında "dönerse", o zaman transfer olmadığı, sadece başlangıç değişikliklerine ve artış değişiklikleri işaretine yapılan referansın olduğu açıktır.
işlevi her zaman kullanırım   ArraySetAsSeries() ve zaman açısından tamamen ücretsiz olduğunu görüyorum. Yani yanılıyorsunuz.

Dürüst olmak gerekirse, hızlı bir işlev olduğunda neden yavaş ArrayReverse işlevine ihtiyaç duyulduğunu anlamıyorum.   ArraySetAsSeries()  

 
Roffild :

ArrayReverse yardımından:

ArraySetAsSeries () işlevi , dizi öğelerini fiziksel olarak hareket ettirmez, ancak bir timeseride olduğu gibi öğelere erişimi düzenlemek için yalnızca dizin oluşturma yönünü tersine çevirir . ArrayReverse() işlevi, bir dizinin öğelerini, dizi "ters çevrilecek" şekilde fiziksel olarak hareket ettirir.

Ancak bu kod aksini kanıtlıyor:

AsSeries bayrağına sahip bir dizi için bellek yeniden tahsisiniz var, elbette bunu hesaba kattılar. Böyle bir şeye sahip olmalılar:

 template < typename T>
T* ReAllocArray(T* array, size_t size, size_t newSize, bool asSeries) {
    auto _array = (T*)realloc(array, newSize * sizeof (T));
     if (_array == NULL ) throw bad_alloc();
    auto _ptr = _array + size;
    auto ptr = _array + newSize;
     if (asSeries){
         while (_ptr != _array) *(--ptr) = *(--_ptr);
         while (ptr != _array) new (--ptr) T;
    }
     else {
         while (_ptr != ptr) new (_ptr++) T;
    }
     return _array;
}
 
Vladimir Simakov :

AsSeries bayrağına sahip bir dizi için bellek yeniden tahsisiniz var, elbette bunu hesaba kattılar. Böyle bir şeye sahip olmalılar:

Evet, dikkate aldılar. Ancak bu davranış CopyRates() ile eşleşmiyor:

Alıcı dizinin hangi özelliğe sahip olduğu önemli değildir - as_series=true veya as_series=false, veriler, zaman içindeki en eski öğe dizi için ayrılan fiziksel belleğin başlangıcında olacak şekilde kopyalanacaktır.

Ve ayrıca ArrayCopy() için:

sayı<0 veya sayım>src_size-src_start ise, dizinin geri kalanı kopyalanır. Diziler soldan sağa kopyalanır. Seri diziler için, soldan sağa kopyalama dikkate alınarak başlangıç konumu doğru şekilde yeniden tanımlanır.

Son cümle biraz belirsiz.
 

Hafif bir şoktayım. Java'da bir test yazdı. Java'nın neredeyse C kadar hızlı olduğu ve bu nedenle MQL5'ten biraz daha hızlı olduğu ortaya çıktı.

Nasıl yaptıklarını anlamıyorum, aslında bir tercüman dili.

Python ile aynı olup olmadığını merak ediyorum?

Bu, elbette, MQL5'in kötü olduğu anlamına gelmez. Java çok havalı.

Bir şey gözden kaçmış gibi görünüyor. Ne zamandan beri tercümanlar derleyicilerin hızına yetişti?...

Bunun ancak kısmi derleme yardımı ile mümkün olduğu görülebilir, yani. tercümanlar temiz değildir.

 
Nikolai Semko :

Hafif bir şoktayım. Java'da bir test yazdı. Java'nın neredeyse C kadar hızlı olduğu ve bu nedenle MQL5'ten biraz daha hızlı olduğu ortaya çıktı.

Nasıl yaptıklarını anlamıyorum, aslında bir tercüman dili.

Python ile aynı olup olmadığını merak ediyorum?

Bu, elbette, MQL5'in kötü olduğu anlamına gelmez. Java çok havalı.

Bir şey gözden kaçmış gibi görünüyor. Ne zamandan beri tercümanlar derleyicilerin hızına yetişti?...

Bunun ancak kısmi derleme yardımı ile mümkün olduğu görülebilir, yani. tercümanlar temiz değildir.

MQL aynı zamanda bir tercümandır.

 
Nikolai Semko :

Hafif bir şoktayım. Java'da bir test yazdı. Java'nın neredeyse C kadar hızlı olduğu ve bu nedenle MQL5'ten biraz daha hızlı olduğu ortaya çıktı.

Nasıl yaptıklarını anlamıyorum, aslında bir tercüman dili.

Python ile aynı olup olmadığını merak ediyorum?

Bu, elbette, MQL5'in kötü olduğu anlamına gelmez. Java çok havalı.

Bir şey gözden kaçmış gibi görünüyor. Ne zamandan beri tercümanlar derleyicilerin hızına yetişti?...

Bunun ancak kısmi derleme yardımı ile mümkün olduğu görülebilir, yani. tercümanlar temiz değildir.

Java bayt koduna çevrilmiş olsa da, kendi yürütme sanal makinesine (JVM) sahiptir.
Tercümanlı diğer dillerin aksine, dil de güçlü bir şekilde yazılmıştır.
Büyük olasılıkla güçlü yazma ve JVM, talimatların ekipmana hızlı bir şekilde yürütülmesi ve iletilmesinin nedenidir.
Amerikan ticaret terminallerinin Java ile yazılması boşuna değil. Chicago borsası CME Group, resmi olarak Java ile yazılmış bir terminal sağlar.
Bir programcı bir keresinde bana Java dilinin köklerinin telekomünikasyon endüstrisinde olduğunu söylemişti.
Ve telekomünikasyon alanı, başlangıçta işleme ve veri iletim hızı gerektirir.
Evet ve Oracle'ın bu dilin geliştirilmesi için kendi topluluğu var.
Yani dil yaşıyor ve Oracle topluluğu tarafından sonlandırılıyor.

Bu arada, Quik markası ve LUA dili de Amerikalılar tarafından geliştirildi.
Ancak tüylü 90'larda, Rusya Federasyonu'nda başarıyla birleştirildi (satıldı).
O yıllarda, amers zaten LUA'nın gelecekteki bir gelişimi olmadığını anlamıştı.
Birliğin dağılmasından sonra döviz piyasasının yeni şekillenmeye başladığı Rusya Federasyonu'na başarılı bir şekilde soktular.

 
Nikolai Semko :

Hafif bir şoktayım. Java'da bir test yazdı. Java'nın neredeyse C kadar hızlı olduğu ve bu nedenle MQL5'ten biraz daha hızlı olduğu ortaya çıktı.

Nasıl yaptıklarını anlamıyorum, aslında bir tercüman dili.

orada, model .Net'teki gibidir - kaynak bayt koduna derlenir, aynı zamanda bir yorumlayıcı olur ve belirli bir bilgisayarda bayt kodunu açarken, yürütüleceği sanal ortam için yerel kod zaten oluşturulur , yani bu zaten derlenmiş kod olacak

https://habr.com/ru/post/107585/


Google'dan Java hakkında "Java derleyicisi veya yorumlayıcısı" - benzer makaleler olacak

 
Алексей Тарабанов :

MQL aynı zamanda bir tercümandır.

Gerekçe?

 
Nikolai Semko :

Hafif bir şoktayım. Java'da bir test yazdı. Java'nın neredeyse C kadar hızlı olduğu ve bu nedenle MQL5'ten biraz daha hızlı olduğu ortaya çıktı.

Nasıl yaptıklarını anlamıyorum, aslında bir tercüman dili.

Python ile aynı olup olmadığını merak ediyorum?

Bu, elbette, MQL5'in kötü olduğu anlamına gelmez. Java çok havalı.

Bir şey gözden kaçmış gibi görünüyor. Ne zamandan beri tercümanlar derleyicilerin hızına yetişti?...

Bunun ancak kısmi derleme yardımı ile mümkün olduğu görülebilir, yani. tercümanlar temiz değildir.

Ama hiçbir soru yoktu - başlamak ne kadar sürer? ne kadar bellek yaktı ve JVM kod baytlarını derlemek için kaç tane iş parçacığı başlattı? "Anında" merhaba dünya derleyen bir canavar başlattım, sonuç olarak hem orada hem de orada yerli. C dışında bir canavar yok. Ve piton hakkında

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MetaTrader 5 Python Kullanıcı Grubu - Metatrader'da Python nasıl kullanılır

Mağdur , 2019.12.07 07:12

Python ile ilgili olarak , geçenlerde içinde yazılı olan ranger (dosya yöneticisi) hakkında konuştum. Birkaç gün kullandım, izlenimler ilginç özelliklere sahip harika bir fikir, ancak bir pitonda gerçekten aptalca (arka planda bazı karmaşık görevler gerçekleştirilirse). Yıkıldı, xs neden bu piton insanları böyle yerleştiriyor. Bir sishka'ya benzer bir zanaat koydum .

Pekala, sorun değil - bir araba dolusu RAM'e sahip çok çekirdekli bir sayı kırıcı satın almak ve bu testte java/sharp/... Xi'ye asla yetişemeyecekler. İlerleme, 80'lerden Tetris'i alın, Sharp'ta yeniden yazın ve eskisi kadar hızlı sürün, ancak 60 çekirdekli bir CPU ile)).

Not: Elbrus'ta iki iş parçacığının yalnızca x86 talimatlarından çeviriyle nasıl meşgul olduğuna benzer. Kolilerin Belaz ile taşınması.

 
Bu arada, keskin gelince, onun için küçük-yumuşak olanlar, doğrudan yerel kodda derlemeyi mümkün kılmış gibi görünüyor. Henüz denemedim, ama harika olmalı.