Algoritmos, métodos de solución, comparación de su rendimiento - página 3

 
fxsaber:

¿Qué es más específico? ¿No se le ocurre un contraejemplo de su aplicación? Explique qué son las matrices y las estructuras.

Me da miedo incluso adivinar lo que ocurrirá si se necesita obtener no sólo el número de la orden, sino también el precio, por ejemplo.

En definitiva, una especie de ignorancia. Y no es la de un principiante, y por tanto inexcusable. Vergüenza debería dar el recurso si alguien de fuera citara este hilo como ejemplo de "¡mira el nivel de los programadores en MQL!

¿Y cómo se define el nivel?
Yo también soy un principiante en muchos temas, pero Peter parece ser un ignorante militante.
Y no sólo en Tester u OOP.
No tiene ningún problema con el MetaEditor.
¿Quizá lo usa poco?
¿Y dónde hay un solo código en la biblioteca? ¿O en los productos?
(

 
Реter Konow:
Usted aporta su solución. De lo contrario, son sólo palabras vacías. Lo mismo que antes.

¿Estás preparado?

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Algoritmos, métodos de solución, comparación de su rendimiento

fxsaber, 2017.12.10 16:12

Casi todo el mundo aquí está dispuesto a hacer si usted entra en el modo de sólo lectura durante un mes después.


 
Sergey Dzyublik:

¿Estás preparado?


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:

Esta es la prueba práctica:

Ni siquiera he visto tanta pesadumbre en el hilo de "preguntas de novatos". ¡Chicos, esto es simplemente espeluznante! ¿Qué hay que comentar?

s. Bien, por qué escribes Get_magic(1), escribe Get_magic(23999).

 
Mikhail Dovbakh:

¿Y cómo se determina el nivel?
Yo también soy un novato en muchos temas, pero Pedro parece ser un ignorante militante.

Y soy nuevo en muchos temas. Y cuando mi ignorancia militante se moja en una cuba de mierda, no hago como si no hubiera ocurrido. Agradezco la lección aleccionadora.

Nunca hay que avergonzarse de ser un novato o de no saber algo. En este caso, sin embargo, el orgullo de la ignorancia está presente, y además se sale de lo normal.

El único beneficio - resulta uno de los mejores motivadores para crear una lista negra en el recurso.

 
Vasiliy Sokolov:

No he visto este tipo de pesadumbre ni siquiera en el hilo de "preguntas para novatos". ¡Chicos, eso es una locura! ¿Qué hay que comentar?

S.s. No, bueno, porque escribes Get_magic(1), escribe Get_magic(23999).

¿Funciona la solución?

 
Реter Konow:

¿Funciona la solución?

No, no lo hace, porque StringFind puede encontrar el número de medjik en lugar del número de transacción.

 
Vasiliy Sokolov:

No, no funciona, porque StringFind puede encontrar el número de la mediana en lugar del número de la transacción.

StringFind encuentra primero el número de operación ("_" + número de operación + "_").

Luego sumamos 3 y obtenemos el inicio del megic.

Entonces StringFind busca el inicio de la siguiente operación.

Luego resta el inicio de la siguiente operación al inicio del megic.

Entonces StringSubstr obtiene la cadena del megic.

Luego lo convertimos en int y lo devolvemos.


¿Qué es lo que no funciona aquí?

 
Реter Konow:

¿Qué es lo que no funciona aquí?


Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Algoritmos, métodos de decisión, comparación de su rendimiento

Sergey Dzyublik, 2017.12.10 16:10

Reg Konow, tu nivel de conocimiento de "estructuras de datos" es 0.

1. Su código no funciona.
Patrón "_index_magic" erróneo. La posible solución es "|index_magic".

2. Su algoritmo tiene una velocidad O(n) con hasta tres pases del valor de la cadenaAll_magics

3. Su medida de rendimiento es completamente incorrecta:

- no hay un resultado medio en la serie
- ninguna serie con búsqueda de los últimos valores del índice



En lugar de escribir tonterías, por favor, estudie algo sobre el tema, por ejemplo,https://habrahabr.ru/post/310794/.
Y luego aprender a aplicar CArrayList de <Generic\ArrayList.mqh>.
Buena suerte.