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

 

Bu başlıkta, belirli sorunları çözmenin farklı yollarını tartışacağız, önerilen çözümlerin performansını karşılaştıracağız.

Herkes sorunları ve bunları çözme yöntemlerini tartışabilir;)

 

Sorunu çözmeyi öneriyorum:

  1. Her çağrıda, koşullu bir " sihir " olacak bir sözde rasgele sayı alacak ve yazacak bir işlev yazın.

2. Birinci işlevi sözde rasgele sayıda çağıracak ve (oluşturulan) koşullu "sihri" ona iletecek ikinci bir işlev yazın.

3. Kullanıcının ilettiği " işlem " numarasından (herhangi bir seri numarasından) " sihirli " sayıyı döndürecek üçüncü bir fonksiyon yazın.


Gereksinimler:

  1. Büyüleri kaydetmek için bellek tüketimi, sayısı önceden bilinmeyen büyülerin sayısına mümkün olduğunca yakın olmalıdır.
  2. Fonksiyonlar hızlı çalışmalıdır.

//------------------------------------------------ --------

Tartışılan kitaplığın bu sorunu çözmek için bir araç takımı olduğunu düşünüyorum.


not. Her üç işlev de, sayısı önceden bilinmeyen Expert Advisor siparişleriyle çalışmayı taklit eder. Bu nedenle, sorun bizim konumuza uymaktadır.

 
Реter Konow :

Sorunu çözmeyi öneriyorum:

  1. Her çağrıda, koşullu bir " sihir " olacak bir sözde rasgele sayı alacak ve yazacak bir işlev yazın.

2. Birinci işlevi sözde rasgele sayıda çağıracak ve (oluşturulan) koşullu "sihri" ona iletecek ikinci bir işlev yazın.

3. Kullanıcının ilettiği " işlem " numarasından (herhangi bir seri numarasından) " sihirli " sayıyı döndürecek üçüncü bir fonksiyon yazın.

Gereksinimler:

  1. Büyüleri kaydetmek için bellek tüketimi, sayısı önceden bilinmeyen büyülerin sayısına mümkün olduğunca yakın olmalıdır.
  2. Fonksiyonlar hızlı çalışmalıdır.

Tartışılan kitaplığın bu sorunu çözmek için bir araç takımı olduğunu düşünüyorum.

not. Her üç işlev de, sayısı önceden bilinmeyen Expert Advisor siparişleriyle çalışmayı taklit eder. Bu nedenle, sorun bizim konumuza uymaktadır.

Peter, herhangi bir işlevin bir faydası olması gerektiğini düşünüyorum. Bu üç işlevden herhangi birinin getirdiği olumlu etkiyi tam olarak anlamıyorum?

 
Victor Ziborov :

Peter, herhangi bir işlevin bir faydası olması gerektiğini düşünüyorum. Bu üç işlevden herhangi birinin getirdiği olumlu etkiyi tam olarak anlamıyorum?

Bu konunun bir dalı https://www.mql5.com/ru/forum/221917

Burada, kütüphane tarafından önerilen çözümlerin etkinliğini pratikte kontrol ediyoruz.

Bu iş parçacığında, sihirli emirleri bir dizgeye yazmanın ve sonra bunları bir diziye koymanın çözümünün verimsiz olduğu tartışıldı.

Bu sorunun çözümü de yeni Generic kitaplığında.

Bir dizgeye yazmanın verimsiz bir çözüm olduğu iddiasını doğrulamak veya çürütmek ilginçtir.

Uygulamanın ne göstereceğini bilmenin faydalı ve ilginç olacağını düşünüyorum.


İsteyen herkes bu sorunu kütüphane araçlarını kullanarak çözmeyi deneyebilir.

Bu sorunu kendi yöntemimle çözmeye çalışacağım.

Sonra performansı karşılaştırırız.

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

Peter Konow , eğer bir şey organize ediyorsanız, lütfen bunu iyi bir seviyede yapın ve kendiliğinden ve arka arkaya değil.....geri çekilin.

Terimler açık, net ve belirli örneklerle belirtilmelidir....
İşte ilk paragrafın tamamının dikkatli bir şekilde okunmasından kaynaklanan soruların bir listesi.

  1. Написать функцию, которая на каждом обращении будет  принимать и записывать  некоторое  псевдо-случайное  число, которое будет условным " меджиком ".

1) Anlamsal bir yük taşımayan metni neden kalın harflerle vurgulamalısınız?
2) İşaretçi almak zaten bir işleve "başvuru" mu, yoksa henüz değil mi? Fonksiyon çağrılır.
3) "Numara yaz" terimi genellikle dosyalarla çalışırken kullanılır. Bu bir yanlışlık mı ve bellekteki verilerle mi çalışmakla ilgili, yoksa program açılışları arasında veri kaydetmek hala gerekli mi?
4) İstenirse, sözde rastgele sayı negatif olabilir, ancak büyü olamaz. Peki elimizde ne var: belirli bir aralıkta sihir mi yoksa sözde rastgele mi? Ne?

 
Sergey Dzyublik :

Peter Konow , eğer bir şey organize ediyorsanız, lütfen bunu iyi bir seviyede yapın ve kendiliğinden ve arka arkaya değil.....geri çekilin.

Terimler açık, net ve belirli örneklerle belirtilmelidir....
İşte ilk paragrafın tamamının dikkatli bir şekilde okunmasından kaynaklanan soruların bir listesi.

1) Anlamsal bir yük taşımayan metni neden kalın harflerle vurgulamalısınız?
2) İşaretçi almak zaten bir işleve "başvuru" mu, yoksa henüz değil mi? Fonksiyon çağrılır.
3) "Numara yaz" terimi genellikle dosyalarla çalışırken kullanılır. Bu bir yanlışlık mı ve bellekteki verilerle mi çalışmakla ilgili, yoksa program açılışları arasında veri kaydetmek hala gerekli mi?
4) İstenirse, sözde rastgele sayı negatif olabilir, ancak büyü olamaz. Peki elimizde ne var: belirli bir aralıkta sihir mi yoksa sözde rastgele mi? Ne?

Ana görev:

Anlaşma numarası aracılığıyla belirli bir sihire hızlı erişim uygulayın .

Sihirleri "sözlük"e yazmak ve işlem numarası üzerinden bunlara ulaşmak gerekir.

Önceden sipariş sayısı bilinmiyor, dolayısıyla sözlüğün boyutu bilinmiyor.

Ancak, erişim hızlı olmalı ve ayrılan bellek miktarı kabul edilebilir olmalıdır.

Önerdiğim görev, siparişleri veren ve daha sonra onlarla daha fazla çalışmak için sihirlerini anlaşma numarasına göre alan bir danışmanın çalışmasını simüle etmeyi amaçlıyor.

Sorunu sizin için uygun olan herhangi bir şekilde çözebilirsiniz.

Sihirbazın belirli sayısı önemli değil. Herhangi bir sayı olabilir. Bu sadece bir taklit.


Katma:

Yukarıda " Anlaşma numarası aracılığıyla belirli bir sihire hızlı erişim uygulayın. " düzeltildi.

 

Üç sihirli sayı eklersek: 10, 11, 12
O zaman anlaşma numaraları nedir? 0, 1, 2?

 
Sergey Dzyublik :

Üç sihirli sayı eklersek: 10, 11, 12
O zaman anlaşma numaraları nedir? 0, 1, 2?

Başka bir başlıktaki bilgili kişiler, bir ipe sihir yazıp onları ipten çabucak "bulmak" için etkili bir çözüm üretmenin imkansız olduğunu söylediler.

Ancak, benim görüşüme göre, gelecekteki siparişlerin sayısı bilinmiyorsa, o zaman tek iyi çözüm, büyüleri bir dizeye yazmak olacaktır.

Hız kaybı olmayacağını belirttim.

İşte pratik kanıt:

 //+------------------------------------------------------------------+
//|                                                        Magic.mq5 |
//|                                                      Peter Konow |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Peter Konow"
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
string All_magics;
int     order_number;
int     Random_orders_of_strategy;
//+------------------------------------------------------------------+
void Save_magic( int magic)
{
 order_number++;
 //---------------------------------
 //Записываем каждый магик вместе с порядковым номером ордера.
 //---------------------------------
 All_magics +=   "_" + ( string )order_number + "_" + ( string )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)
{
 //--------------------------------------------
 //Получаем начало строки магика.
 //--------------------------------------------
 int Magic_position_start =   StringFind (All_magics, "_" + ( string )deal_number + "_" , 0 ) + 3 ;
 //--------------------------------------------
 //Получаем конец строки магика.
 //--------------------------------------------
 int Magic_position_end   =   StringFind (All_magics, "_" + ( string )(deal_number + 1 ) + "_" , 0 );
 //--------------------------------------------
 //Получаем количество цифр из которых состоит магик.
 //--------------------------------------------
 int Magic_lenght         =  Magic_position_end - Magic_position_start;
 //--------------------------------------------
 //Извлекаем магик из общей строки.
 //--------------------------------------------
 string Magic             =   StringSubstr (All_magics,Magic_position_start,Magic_lenght);
 //--------------------------------------------
 //Возвращаем цифровое значение магика.
 //--------------------------------------------
 return (( int )Magic);
}
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   Trading();
   //--------------------------
   ulong t1 = GetMicrosecondCount ();
   Get_magic( 1 );
   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 ));
   
  }
//+------------------------------------------------------------------+


Belki birisi çözümümü faydalı bulur ...

(Kod, 15 mikrosaniyede 24.000'den fazla sihirbaz arasından doğru sihirbazı bulur!)

(Ayrıca, tek bir baytlık fazladan bellek boşa harcanmaz.)

Daha hızlı yapabilecek biri varsa lütfen.
 
Sergey Dzyublik :

Üç sihirli sayı eklersek: 10, 11, 12
O zaman anlaşma numaraları nedir? 0, 1, 2?

Numara. Anlaşma numaraları bir ile başlamalıdır.
 

Konuyla ilgili böyle ilginç bir soru:

Örneğin, bir sonraki siparişin bir sonraki partisinin farklı çiftler için halihazırda açılmış sonuçlara dayandığı bir çoklu para birimi danışmanı vardır.


sipariş açma koşulu - açılma sinyali varsa, toplam lot 0.1'den fazla değil ve toplam düşüş depozitonun %101'inden fazla değil

birinci seçenek: tüm verileri bir diziye koyun ve bir sonrakini açmak için istek olarak çıkarın (her tikte yeni siparişler açmayalım)


ikinci seçenek - bir sonraki siparişin açılmasını talep ederken her seferinde kontrol etmek için, tümü mevcut zamanda tüm çiftler için mevcuttur



hangi çözüm daha hızlı ve daha ucuz olacak

 

Teneke)

Neden: