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

 
fxsaber :

Ve daha spesifik olan nedir? Uygulamanıza bir karşı örnek düşünebilir misiniz? Dizilerin ve yapıların ne olduğunu açıklayın?

Sadece sihirli sayıyı değil, aynı zamanda örneğin sipariş numarasına göre fiyatı da almanız gerekiyorsa ne olacağını tahmin etmekten bile korkuyorum.

Genel olarak, bir tür cehalet. Ve yeni başlayanlar için değil ve bu nedenle affedilemez. Dışarıdan biri bu konuyu örnek olarak "MQL programcılarının seviyesine bakın!" diye yönlendirirse kaynağa yazık olur.

Seviyeyi nasıl belirliyorsunuz?
Ben de pek çok şeyde yeniyim ama Peter militan bir cahil gibi görünüyor.
Ve sadece test cihazında veya OOP'de değil.
MetaEditor ile herhangi bir sorunu yoktur..
Belki nadiren kullanır?
Ve kütüphanede en az bir kod nerede? Yoksa ürünün ürünlerinde mi?
(

 
Реter Konow :
Çözümünüzü sunuyorsunuz. Aksi takdirde, sadece boş sözler. Eskisi gibi.

Hazırsın?

 
Sergey Dzyublik :

Hazırsın?


CHTD.
 
/+------------------------------------------------------------------+
//|                                                        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;   // Тут как бы не рационально особенно для скорости - в данном случае будет происходить поочередное сложение т.е. сперва стрин увеличиться на один знак и ему выделеиться дополнительно 1 чарт, потом увоичиться на количество символов в (string)order_number.... и каждый раз будет происходить выделение памяти... 
 //---------------------------------
}
//+------------------------------------------------------------------+
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;  // поиск происходит слушающим образом... наш string разбирается на масив чартов и мы начинаем искать среди них номер чарта равный номеру символа  "_" путем перебора, если произошло совпадение то будем сравнивать второй символ... даже банально исключив последний  + "_" скорость возрастет
 //--------------------------------------------
 //Получаем конец строки магика.
 //--------------------------------------------
 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);  // Мы же на скорость проверяем так что давайте исполняемые функции брать в цикл с повтором в 10 000 раз... хотябы лучше с изменяющими входными параметрами
   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));
   
  }
//+------------------------------------------------------------------+
 
Реter Konow :

İşte pratik kanıt:

"Acemi soruları" başlığında bile bu kadar karanlık görmemiştim. Çocuklar, bu sadece bir çeşit teneke! Yorumlanacak ne var?

ps Hayır, peki, neden Get_magic (1) yazıyorsun, Get_magic (23999) yaz.

 
Mikhail Dovbakh :

Seviyeyi nasıl belirliyorsunuz?
Ben de pek çok şeyde yeniyim ama Peter militan bir cahil gibi görünüyor.

Ve bir çok şeyde yeniyim. Ve militan cehaletim bir fıçı boka battığında hiçbir şey olmamış gibi davranmam. Ayık ders için teşekkürler.

Acemi olmak ya da bir şey bilmemek asla ayıp değildir. Bu durumda gurur, cehaletle birlikte mevcuttur, aynı zamanda ölçeğin dışına çıkar.

Tek faydası, Kara Liste kaynağında aynı yaratımın en iyi motive edicilerinden birinin ortaya çıkmasıdır.

 
Vasiliy Sokolov :

"Acemi soruları" başlığında bile bu kadar karanlık görmemiştim. Çocuklar, bu sadece bir çeşit teneke! Yorumlanacak ne var?

ps Hayır, peki, neden Get_magic (1) yazıyorsun, Get_magic (23999) yaz.

Çözüm işe yarıyor mu?

 
Реter Konow :

Çözüm işe yarıyor mu?

Hayır, çalışmıyor çünkü StringFind anlaşma numarası yerine sihirli sayıyı bulabiliyor.

 
Vasiliy Sokolov :

Hayır, çalışmıyor çünkü StringFind anlaşma numarası yerine sihirli sayıyı bulabiliyor.

StringFind önce anlaşma numarasını ("_" + anlaşma numarası + "_") bulur.

Sonra 3 ekliyoruz ve meg'in başlangıcını elde ediyoruz.

Sonra StringFind bir sonraki ticaretin başlangıcını arar.

Ardından, bir sonraki ticaretin başlangıcından meg'in başlangıcını çıkarır.

Sonra StringSubstr meg dizesini alır.

Ardından, onu int'ye dönüştürüyoruz ve döndürüyoruz.


Burada ne işe yaramaz?

 
Реter Konow :

Burada ne işe yaramaz?


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

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

Sergey Dzyublik , 2017.12.10 16:10

Peter Konow, "veri yapıları" bilgi seviyen 0.

1. Kodunuz çalışmıyor.
Yanlış desen "_index_magic". Olası çözüm "|index_magic"

2. Algoritmanız, dizeden All_magics değerine üç kez geçerken O(n) hızına sahiptir.

3. Performans ölçümünüz kesinlikle yanlış:

- dizi ortalaması yok
- en son indeks değerlerinin arandığı seri yok



Saçma sapan şeyler yazmak yerine - lütfen konuyla ilgili en azından bir şeyler çalışın, örneğin, https://habrahabr.ru/post/310794/
Ardından, <Generic\ArrayList.mqh> adresinden CArrayList'in nasıl kullanılacağını öğrenin.
İyi şanlar.