Algorithmen, Lösungsmethoden, Vergleich ihrer Leistung - Seite 3

 
fxsaber:

Was ist konkreter? Fällt Ihnen nicht ein Gegenbeispiel zu Ihrer Umsetzung ein? Erklären Sie, was Arrays und Strukturen sind?

Ich wage nicht einmal zu erraten, was passiert, wenn Sie nicht nur die Nummer der Bestellung, sondern beispielsweise auch den Preis benötigen.

Alles in allem eine Art von Ignoranz. Und es ist nicht das eines Anfängers und daher unentschuldbar. Es wäre eine Schande für die Ressource, wenn jemand von außerhalb diesen Thread als Beispiel für "Seht euch das Niveau der Programmierer in MQL an!

Und wie definieren Sie das Niveau?
Auch ich bin in vielen Fragen ein Anfänger, aber Peter scheint ein militanter Ignorant zu sein.
Und das nicht nur in Tester oder OOP.
Er hat kein Problem mit MetaEditor.
Vielleicht benutzt er sie nur selten?
Und wo ist auch nur ein einziger Code in der Bibliothek? Oder in Produkten?
(

 
Реter Konow:
Sie liefern Ihre Lösung. Sonst sind es nur leere Worte. Dasselbe wie zuvor.

Sind Sie bereit?

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Algorithmen, Lösungsmethoden, Vergleich ihrer Leistung

fxsaber, 2017.12.10 16:12

Fast jeder hier ist dazu bereit, wenn Sie danach für einen Monat in den schreibgeschützten Modus wechseln.


 
Sergey Dzyublik:

Sind Sie bereit?


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:

Hier ist der praktische Beweis:

Ich habe noch nicht einmal im Thread "Fragen von Neulingen" eine solche Trübsal gesehen. Leute, das ist einfach nur gruselig! Was gibt es dazu zu sagen?

s. Nun, warum schreiben Sie Get_magic(1), schreiben Sie Get_magic(23999).

 
Mikhail Dovbakh:

Und wie bestimmen Sie das Niveau?
Ich bin auch ein Neuling in vielen Fragen, aber Peter scheint ein militanter Ignorant zu sein.

Und ich bin in vielen Bereichen neu. Und wenn meine militante Ignoranz in einen Bottich voll Scheiße getaucht wird, tue ich nicht so, als wäre das nicht passiert. Ich bin dankbar für diese ernüchternde Lektion.

Es ist nie eine Schande, ein Anfänger zu sein oder etwas nicht zu wissen. In diesem Fall jedoch ist der Stolz auf die Unwissenheit vorhanden, und er ist auch nicht zu überbieten.

Der einzige Vorteil - es stellt sich heraus, einer der besten Motivatoren, um eine Blacklist auf der Ressource zu erstellen.

 
Vasiliy Sokolov:

Ich habe diese Art von Pessimismus noch nicht einmal im Thread "Fragen von Neulingen" gesehen. Leute, das ist einfach verrückt! Was gibt es dazu zu sagen?

S.s. Nein, also, warum schreiben Sie Get_magic(1), schreiben Sie Get_magic(23999).

Funktioniert die Lösung?

 
Реter Konow:

Funktioniert die Lösung?

Nein, denn StringFind kann anstelle der Transaktionsnummer auch die Medjik-Nummer finden.

 
Vasiliy Sokolov:

Nein, das funktioniert nicht, weil StringFind den Medianwert anstelle der Transaktionsnummer finden kann.

StringFind findet zunächst die Geschäftsnummer ("_" + Geschäftsnummer + "_").

Dann addieren wir 3 und erhalten den Beginn des Megic.

Dann sucht StringFind nach dem Beginn des nächsten Handels.

Dann wird der Beginn des nächsten Geschäfts vom Beginn des Megic abgezogen.

Dann erhält StringSubstr die Zeichenkette des Megic.

Dann wandeln wir es in int um und geben es zurück.


Was funktioniert hier nicht?

 
Реter Konow:

Was funktioniert hier nicht?


Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Algorithmen, Entscheidungsmethoden, Vergleich ihrer Leistung

Sergey Dzyublik, 2017.12.10 16:10

Reg Konow, Ihr Wissen über "Datenstrukturen" ist gleich 0.

1. Ihr Code funktioniert nicht.
Falsches Muster "_index_magic". Eine mögliche Lösung ist "|index_magic".

2. Ihr Algorithmus hat die Geschwindigkeit O(n) mit bis zu drei Durchläufen des String-WertesAll_magics

3. Ihre Leistungsmessung ist völlig falsch:

- es gibt kein Durchschnittsergebnis in der Reihe
- keine Serien mit Suche nach den letzten Indexwerten



Anstatt Unsinn zu schreiben - studieren Sie bitte etwas zu diesem Thema, z.B.https://habrahabr.ru/post/310794/.
Und dann lernen Sie, wie Sie CArrayList aus <Generic\ArrayList.mqh> anwenden können.
Viel Glück!