Algoritmalar, karar yöntemleri, performanslarının karşılaştırılması - sayfa 16

 
Реter Konow :

İlginç ve mantıklı bir öneri. Paralel kayıtların tutulması. Bunu diğer çözümlerde yaptım.

Tek şey, başlangıçta danışmanın vereceğisiparişlerin sayısını bilmememizdir. Bir int dizisinin boyutu nedir?

Bu yüzden hattı almaya karar verdim.


100 elemanlık bir kenar boşluğu koyun ve her birine 100 ekleyin ... satır aynı uygulamaya sahip

 
Alexandr Andreev :

Generic dosyasını bulamadım bile, nedeni eski yapı gibi görünüyor. Peki, ördek, ama navigasyon ilkesi nasıl sağlanacak - kaynak kodu nedir?

https://www.mql5.com/ru/forum/221917

Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
  • 2017.12.07
  • www.mql5.com
С 6 декабря 2017 года в стандартную поставку MetaTrader 5 стали входить так называемые Generic-классы, реализующие эффективные алгоритмы для хранен...
 
Vasiliy Sokolov :

Peter, ArrayResize() adında harika bir fonksiyon var. Program yürütülürken dizinin boyutunu artırmanıza olanak tanır.

Alternatif olarak, düşündüm.

1. Hız açısından - şüpheli.

2. Kodun bakış açısından - daha fazla satır ve daha kafa karıştırıcı olduğu ortaya çıkıyor.

Bir dizi yeniden boyutlandırıldığında , içindeki veriler kaybolur (yanılmıyorsam).

Bu, başka bir dizide depolanmaları gerektiği anlamına gelir ve bu da artırılması gerekir.

Daha önce bahsettiğim ileri geri yeniden yazma ortaya çıkıyor.

 
Реter Konow :

Alternatif olarak, düşündüm.

1. Hız açısından - şüpheli.

2. Kodun bakış açısından - daha fazla satır ve daha kafa karıştırıcı olduğu ortaya çıkıyor.

Bir dizinin boyutunu değiştirdiğinizde, içindeki veriler kaybolur (yanılmıyorsam).

Bu, başka bir dizide ayrılmaları gerektiği anlamına gelir ve bu da artırılması gerekir.

Daha önce bahsettiğim ileri geri yeniden yazma ortaya çıkıyor.


hayır yok olmazlar

 
Alexandr Andreev :

hayır yok olmazlar

Emin misin?
 
Реter Konow :
Emin misin?

Evet. Veriler kaybolmaz.

 
Реter Konow :
Emin misin?


 template < typename T> 
   void ArrayAdd(T &m[], T& a)    {m[ ArrayResize (m, ArraySize (m)+ 1 , 100 )- 1 )]=a;}

aslında tüm peynir bu satırdan kaynaklanmaktadır.... dizinin sonuna bir eleman ekler. diğer her şey tüylü

sayfada ekleme ilkesi aynıdır sadece bir sınıfta paketlenmiştir
 
Реter Konow :

2. Kodun bakış açısından - daha fazla satır ve daha kafa karıştırıcı olduğu ortaya çıkıyor.

   #include <Generic\ArrayList.mqh>

   CArrayList< int > collection;
   
   int value_set = 1 ;
   collection.Add(value_set);
 
   int index = 0 ;
   int value_get = - 1 ; 
   collection.TryGetValue(index,value_get); 


Ne karışıklık, okumak için ne kadar güç öldürmeniz gerekiyor......
Çözümünüz %100 daha güzel, daha zarif ve daha hızlı.

 

CHashMap'te örnek çözüm:

 //+------------------------------------------------------------------+
//|                                                RandomTickets.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property version    "1.00"
#include <Generic\HashMap.mqh>
input int RandomDeals = 24000 ;
CHashMap< int , int > MagicsByDeals;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{
   for ( int i = 0 ; i < RandomDeals; i++)
      MagicsByDeals.Add( MathRand (), MathRand ());
   MagicsByDeals.Add( 1337 , MathRand ());
   ulong msec = GetMicrosecondCount ();
   bool res = MagicsByDeals.ContainsKey( 1337 );
   string t = ( string )( GetMicrosecondCount ()-msec);
   printf ( "Время выполнения запроса: " + t + " микросекунд" );
   if (res)
       printf ( "Сдлека с номером 1337 была удачно найдена" );
   else
       printf ( "Сдлека с номером 1337 не найдено" );
}
//+------------------------------------------------------------------+
 
Alexandr Andreev :

aslında tüm peynir bu satırdan kaynaklanmaktadır.... dizinin sonuna bir eleman ekler. diğer her şey tüylü

sayfada ekleme ilkesi aynıdır sadece bir sınıfta paketlenmiştir


Mükemmel bir uyum gibi görünüyor. Lütfen herkesi kontrol edin.

Yeniden boyutlandırıldığında verilerin diziden kaybolmadığından emin olsaydım, çözüm şu olurdu:

 //+------------------------------------------------------------------+
//|                                                      Magic 2.mq5 |
//|                                                      Peter Konow |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Peter Konow"
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
int     All_magics[];
int     order_number;
int     Random_orders_of_strategy;
//+------------------------------------------------------------------+
void Save_magic( int magic)
{
 order_number++;
 //---------------------------------
 //Записываем каждый магик вместе с порядковым номером ордера.
 //---------------------------------
 ArrayResize (All_magics,order_number);
 All_magics[order_number - 1 ] = magic;
 //---------------------------------
}
//+------------------------------------------------------------------+
void Trading()
{
 Random_orders_of_strategy = MathRand ();
 //----------------------------------------
 //Имитируем открытие неопределенного количества ордеров стратегии.
 //----------------------------------------
 for ( int a1 =   0 ; a1 < Random_orders_of_strategy; a1++)
   {
     int this_magic = MathRand ();
     //----------------------------
    Save_magic(this_magic);
     //----------------------------
   }
 //----------------------------------------
}
//+------------------------------------------------------------------+
int Get_magic( int deal_number)
{
 return (All_magics[deal_number - 1 ]);
}
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   Trading();
   //--------------------------
   ulong t1 = GetMicrosecondCount ();
   Get_magic( 1000 );
   ulong t2 = GetMicrosecondCount ();
   //--------------------------
   Print ( "Время исполнения функции Get_magic() при количестве ордеров " ,Random_orders_of_strategy, " равно " ,t2 - t1);
   //--------------------------
   Print ( "Random_orders_of_strategy  " ,Random_orders_of_strategy);
   Print ( "magic 1:  " ,Get_magic( 1 ), "  magic 2: " ,Get_magic( 2 ), "  magic 3: " ,Get_magic( 3 ));
   
  }
//+------------------------------------------------------------------+