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

 
fxsaber #:

Sıralama için sayısal bir alanın kullanıldığı özel bir durum için (en yaygın durum), öncekinden birkaç kat daha hızlı olan bir varyant yazdım. Ancak iki kat daha fazla bellek tüketiyor. Büyük diziler için geçerlidir.


Uygulama (yürütme süresinin ölçülmesi ile).


Sonuç.

Bu seçenek hakkında ne düşünüyorsunuz?

#include <QuickSort.mqh>

#include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279
#define _BV2(A) _BV(A, 100) // Алертим все, что исполняется дольше 100 микросекунд.

struct STRUCT : public MqlTick
{
  double Num;
};

typedef bool (*FuncLess)( const STRUCT&, const STRUCT& );

bool Less( const STRUCT& struct1, const STRUCT& struct2 )
{
   return struct1.Num < struct2.Num;
}

void function1( STRUCT& array[] )
{
   QuickSort< STRUCT, FuncLess >( array, Less );
}

void OnStart()
{
  STRUCT Array[];
  
  const int Size = ArrayResize(Array, 1 e5);
  
  for (int i = Size - 1; i >= 0; i--)
    Array[i].Num = Size - i;
    
//  _BV2(ArraySortStruct(Array, Num));
//  _BV2(ArraySortStruct2(Array, Num));
  
  _BV2( function1( Array ) );
  
}
 
Koldun Zloy #:

Buna ne dersin?

Test edemem.

 
fxsaber #:

Kontrol etme.

QuickSort kütüphanesi burada

Быстрая сортировка.
Быстрая сортировка.
  • www.mql5.com
Функции для сортировки массивов. Позволяют сортировать строки и структуры по любому условию.
 
Koldun Zloy #:

QuickSort kütüphanesi burada

Teşekkürler, bu çok iyi bir seçenek! Bende de QuickSort var gibi görünüyor, ancak bazı nedenlerden dolayı çok yavaş.


Seçeneğiniz, kullanımı daha hızlı hale getirmek için bir şekilde makrolara sarılabilir ...

 
fxsaber #:

Teşekkürler, bu çok iyi bir seçenek! Bende de QuickSort var gibi görünüyor, ancak nedense frenler vahşi.


Seçeneğiniz.... kullanımını daha hızlı hale getirmek için makrolara sarılabilir.

Neden makrolara ihtiyacınız olduğunu anlamıyorum. Bu haliyle çok basit.

 

C'de buna benzeyen bir şeyi nasıl düzgün biçimlendirebilirim:

int sort(void *arr,size_t isize,size_t size, int (*cmp)(void *item1,void *item2)); /// типовой прототип sort с функцией сравнения

???

şablonlar arasında sıralama yapmaya çalışıyorum:

template <typename T>

int sort(T &arr[],int (*cmp)(const T &,const T&))
{

}

çalışmaz - argümanın içine bir fonksiyon işaretçisi koyamazsınız. Ayrı bir typedef olmalıdır

ama typedef bir şablon olamaz (ya da olabilir mi??).

makromlar bu sorunların dışında büyür :-)

 
Maxim Kuznetsov #:

C'de buna benzeyen bir şeyi nasıl düzgün bir şekilde biçimlendirebilirim:

int sort(void *arr,size_t isize,size_t size, int (*cmp)(void *item1,void *item2)); /// типовой прототип sort с функцией сравнения

???

Şablonları kullanmaya çalışıyoruz:

başarısız olur - argümana bir fonksiyon işaretçisi koyamazsınız. Ayrı bir typedef olmalıdır

ancak typedef bir şablon olamaz (ya da olabilir mi??)....

makromlar bu sorunların dışında büyür :-)

template <typename T> struct SORT
  {
   typedef int       (*cmp)(const T &, const T&);
   static  int       Do(T &arr[], cmp) {return 0;}
  };

int SortInt(const int &, const int &) {return 0;}

void OnStart()
  {
   int arr[];
   SORT<int>::Do(arr, SortInt);
  }
 

MQL'in (ve C++'ın) açık olmayan bir özelliğini keşfettim

class C1
  {
public:
   virtual void      f1(int p = 1) {Print(p);}
  };
class C2: public C1
  {
public:
   virtual  void     f1(int p = 2) {Print(p);}
  };

void OnStart()
  {
   C2 obj;
   C1 *p = &obj;
   p.f1();        //Prints "1"
  }

Yani, varsayılan değer yöntem çağrısı noktasında (p.f1()) parametreye (p) yerleştirilir ve bu değer C1 sınıfındaki yöntem açıklamasından alınır - obj nesnesinin gerçek türü değil, ptr değişkeninin bildirilen türü.

(Bu da genel olarak mantıksaldır).

 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi üzerine forum

Hatalar, hatalar, sorular

Andrey Dik, 2022.06.24 08:38

MQL_VISUAL_MODE , MQL_TESTER'ın özel bir durumu mudur?

MQL_OPTIMIZATION, MQL_TESTER'ın özel bir durumu mudur?

Yani, MQL_TESTER hem MQL_VISUAL_MODE hem de MQL_OPTIMIZATION'ı mı içeriyor?

EA'nın bir grafik üzerinde ve görsel modda çalışırken bazı eylemleri gerçekleştirmesine ihtiyacım var, ancak diğer tüm durumlarda değil. MQLInfoInteger() kontrol ederken bu durum için doğru bayrakları nasıl seçeceğimi bulamıyorum?

Bunu çok basit bir şekilde, örneğin şu şekilde yapabilirdim:

if (MQLInfoInteger(MQL_VISUAL_MODE) || MQLInfoInteger(MQL_CHART_MODE))

{

  //выполняем некоторые действия

}

ancak MQL_CHART_MODE bayrağı mql5'te sağlanmıyor.


Herhangi bir fikri olan var mı?

 
Andrey Dik #:

Herhangi bir fikri olan var mı?

if (ChartID()!=0) {

    // Graphical chart presents
    // draws on it

}