Algoritmi, metodi di soluzione, confronto delle loro prestazioni - pagina 3

 
fxsaber:

Cosa c'è di più specifico? Non riesci a pensare a un controesempio alla tua implementazione? Spiegare cosa sono gli array e le strutture?

Ho paura anche solo di indovinare cosa succederà se hai bisogno di ottenere non solo il numero dell'ordine, ma anche il prezzo, per esempio.

Tutto sommato, una specie di ignoranza. E non è quello di un principiante, e quindi inescusabile. Vergogna sulla risorsa se qualcuno dall'esterno citasse questo thread come esempio di "guardate il livello dei programmatori in MQL!

E come si definisce il livello?
Anch'io sono un principiante su molte questioni, ma Peter sembra essere un ignorante militante.
E non solo in Tester o OOP.
Non ha problemi con MetaEditor.
Forse lo usa raramente?
E dov'è anche un solo codice nella biblioteca? O nei prodotti?
(

 
Реter Konow:
Tu fornisci la tua soluzione. Altrimenti sono solo parole vuote. Come prima.

Sei pronto?

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Algoritmi, metodi di soluzione, confronto delle loro prestazioni

fxsaber, 2017.12.10 16:12

Quasi tutti qui sono disposti a fare se si entra in modalità di sola lettura per un mese dopo.


 
Sergey Dzyublik:

Sei pronto?


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:

Ecco la prova pratica:

Non ho mai visto una tristezza del genere nemmeno nel thread "domande per principianti". Ragazzi, questo è semplicemente inquietante! Cosa c'è da commentare?

s. Bene, perché si scrive Get_magic(1), si scrive Get_magic(23999).

 
Mikhail Dovbakh:

E come si determina il livello?
Sono anche un novizio su molte questioni, ma Peter sembra essere un ignorante militante.

E sono nuovo a molte questioni. E quando la mia ignoranza militante viene immersa in una vasca di merda, non faccio finta che non sia successo. Sono grato per la lezione sobria.

Non c'è mai da vergognarsi di essere un novizio o di non sapere qualcosa. In questo caso, però, l'orgoglio dell'ignoranza è presente, ed è anche fuori scala.

L'unico vantaggio - risulta essere uno dei migliori motivatori per creare una Blacklist sulla risorsa.

 
Vasiliy Sokolov:

Non ho visto questo tipo di malinconia nemmeno nel thread "domande per principianti". Ragazzi, è semplicemente pazzesco! Cosa c'è da commentare?

S.s. No, beh, perché scrivi Get_magic(1), scrivi Get_magic(23999).

La soluzione funziona?

 
Реter Konow:

La soluzione funziona?

No, non lo fa, perché StringFind può trovare il numero di medjik invece del numero di transazione.

 
Vasiliy Sokolov:

No, non funziona, perché StringFind può trovare il numero mediano invece del numero della transazione.

StringFind trova prima il numero di transazione ("_" + numero di transazione + "_").

Poi aggiungiamo 3 e otteniamo l'inizio del megic.

Poi StringFind cerca l'inizio del prossimo scambio.

Poi sottrae l'inizio del prossimo scambio dall'inizio del megic.

Poi StringSubstr ottiene la stringa del megic.

Poi lo convertiamo in int e lo restituiamo.


Cosa non funziona qui?

 
Реter Konow:

Cosa non funziona qui?


Forum sul trading, sistemi di trading automatico e test di strategie di trading

Algoritmi, metodi di decisione, confronto delle loro prestazioni

Sergey Dzyublik, 2017.12.10 16:10

Reg Konow, il tuo livello di conoscenza delle "strutture di dati" è 0.

1. Il tuo codice non funziona.
Modello "_index_magic" errato. La soluzione possibile è "|index_magic".

2. Il tuo algoritmo ha velocità O(n) con ben tre passaggi del valore della stringaAll_magics

3. La vostra misurazione delle prestazioni è completamente sbagliata:

- non c'è un risultato medio nella serie
- nessuna serie con ricerca dei valori dell'ultimo indice



Invece di scrivere sciocchezze - per favore studiate qualcosa sull'argomento, per esempiohttps://habrahabr.ru/post/310794/.
E poi imparare come applicare CArrayList da <Generic\ArrayList.mqh>.
Buona fortuna.