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

 
Реter Konow:

2. la integración en la EA es el punto clave. Si la solución es súper confusa (estoy seguro de que ni siquiera puede explicar cómo funciona la solución de Sergey Dzyublik), ¿cuál es su valor práctico para el comerciante? No se puede construir un EA normal con soluciones súper enrevesadas.

La solución propuesta se expresó inmediatamente

Pero alguien ni siquiera preguntó qué era. La aplicación podría haber sido mucho más "clara". Pero no cambiaría la base de la idea.

 
Реter Konow:

1. En la práctica, son palabras vacías con las que se combaten los hechos. He mostrado la medida del tiempo para encontrar al mago. He demostrado la conveniencia de integrar la solución en el EA. Todo lo que está demostrando es una calumnia de mi solución. Nada más.

2. la integración en la EA es el punto clave. Si la solución es súper enrevesada (estoy seguro de que ni siquiera puedes explicar cómo funciona la solución de Sergey Dzyublik), ¿cuál es su valor práctico para el comerciante? No se puede construir un EA normal con soluciones súper enrevesadas.

No estoy juzgando la solución de Sergey Dzyublik. Todavía no lo ha explicado. Cuando lo explique, quedará claro quién "empezó este lío".


Aquí quería responderte, pero el moderador se adelantó y dijo lo mismo. Así que te mostraré de nuevo lo que dijo:

Artyom Trishkin:

No. No te estoy ofreciendo el estilo de solución de otra persona. Escribe con tu propio estilo: nadie impone nada a nadie.

Pero le sugiero que, con la persistencia que le caracteriza, resuelva los problemas de la mejor manera posible al principio. ¿Qué estás haciendo?

1. Inicialmente se elige la solución más subóptima de todas las posibles y se empieza a jugar con ella. Para esta tarea, incluso en la fase de pensar en una solución, no sólo había que rechazar su versión, sino incluso no pensar en esa dirección. Y para eso no están las funciones de manejo de texto.

2. Sobre la integración en el Asesor Experto y las ventajas de la solución propuesta - que te responda el que la propuso.


P.D. Debes ser muy mal estudiante :)

 
Реter Konow:

Me doy cuenta de mis errores en cuanto me convenzo de ellos. Hasta ahora, nadie ha podido demostrar que mi decisión es errónea. Esperaremos.

¡Eres un pobre aprendiz!

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

Algoritmos, métodos de solución, comparación de resultados

Sergey Dzyublik, 2017.12.10 20:58


1. Su código no funciona.
Patrón incorrecto "_index_magic". Posible solución "|index_magic".


Después de la adición tenemos _1_3_2_4_3_5_4_6_
Por favor, encuentre el tercero de la lista.
Obtendrá un resultado de 2.

string All_magics = "_1_3_2_4_3_5_4_6_";

int Get_magic(int deal_number)
{
 int stringlen = StringLen((string)deal_number); //добавлено
 //--------------------------------------------
 //Получаем начало строки магика.
 //--------------------------------------------
 int Magic_position_start =  StringFind(All_magics,"_" + (string)deal_number + "_",0) + stringlen + 2;
 //--------------------------------------------
 //Получаем конец строки магика.
 //--------------------------------------------
 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()
{
  Print(All_magics);
  Print(Get_magic(3));   
}


Resultado

_1_3_2_4_3_5_4_6_
2
 
Artyom Trishkin:

Hasta ahora todo lo que veo aquí es una burla a un hombre que tuvo el valor de publicar su solución aquí.

Claramente, es... por decirlo suavemente, es una basura en absoluto. Pero lo puso ahí fuera. El resto sólo tiene hasta ahora el valor de reírse y señalar con el dedo.

Artem, me ha costado 40 minutos de mi tiempo y unos cuantos millones de neuronas explicarle al hombre que la subcadena..._25_... cuatro caracteres, no tres. Bueno, ¿cuántos años-hombre crees que nos llevará a todos explicarle algo conceptualmente más valioso y poderoso? Creo que muchos, muchos años-hombre. Por eso nadie intenta explicar y masticar algo. Simplemente hay un cierto nivel mínimo por debajo del cual el que explica no puede hundirse, y el nivel de Pedro está por debajo de esa barra.

 
fxsaber:



Resultado

Ya he dicho que el número del mago lo determina el usuario. Para evitar colisiones dentro de una cadena, es necesario asignar un determinado rango numérico a los magos. Por ejemplo, de 100.000 a 999.000. Entonces no habrá ningún problema.

Dicho esto, podemos, por supuesto, afinar la solución. Esto es sólo un "prototipo". Una versión de demostración.

 
Vasiliy Sokolov:

Artem, me ha costado 40 minutos de mi tiempo y unos cuantos millones de neuronas explicarle al hombre que la subcadena de ..._25_... cuatro caracteres, no tres. Bueno, ¿cuántos años-hombre crees que nos llevará a todos explicarle algo conceptualmente más valioso y poderoso? Creo que muchos, muchos años-hombre. Por eso nadie intenta explicar y masticar algo. Simplemente hay un cierto nivel mínimo por debajo del cual el que explica no puede hundirse, y el nivel de Pedro está por debajo de esa barra.

Vasily, lo he entendido todo en cuanto lo has dicho. Gracias por encontrar ese error.

 
fxsaber:

Vete a la mierda.

Aquí vamos...)

¿Y por qué la reacción?

 

El contenedor estándar de la biblioteca - CArrayList - fue elegido para resolver la tarea.
Casi todo el código es una envoltura con el fin de proporcionar una interfaz "conveniente" para las pruebas. Para todos los gustos y colores como dicen....

Para probar tu solución necesitas:
1. Crea una clase que herede de ITestRandomAccessCollection y que implemente los métodos necesarios. (similar aTestRandomAccessCollectionCArrayList)
2. Los datos de un determinado tipo se utilizan para las pruebas. En el ejemplo era int.
Tenemos que asegurarnos de que hay un generador para el tipo de datos seleccionado y se añade aCreateGenerator(similar aIntGenerator).
3. Haz una prueba con los mismos datos para varias soluciones y compara los resultados (si quieres, también puedes hacer un ciclo para obtener la media):

{
     printf ("TestRandomAccessCollectionAfterAdding: Started.", result);
     TestRandomAccessCollectionCArrayList<int> testCollection();
     result = TestRandomAccessCollectionAfterAdding(testCollection, 10000, 1);
     printf ("TestRandomAccessCollectionAfterAdding: Fineshed. Total result: %I64i\n", result);
}


Esta es la función que se está probando actualmente, se pueden añadir otras nuevas por analogía:

template<typename T>
ulong TestRandomAccessCollectionAfterAdding(ITestRandomAccessCollection<T> &testCollection, const int iterationCount = 1000, int srandValue = 0)

Parámetros:

testCollection - contenedor de pruebas que implementaITestRandomAccessCollection<T>;
iterationCount - número de ciclos de iteración en la prueba;
srandValue - influencia en el muestreo del generador si 0 es un muestreo aleatorio.

 
Реter Konow:
1. ¿Cuántos microsegundos de media se tarda en encontrar al mago en su solución?

2. ¿Cómo de fácil es integrar su solución en el EA (en su opinión)?


1. No tiene sentido. Los algoritmos en su conjunto se comparan con resultados relativos.
2. La solución ya está integrada - es una biblioteca estándar<Generic\ArrayList.mqh>.

 
Реter Konow:

Como he dicho antes, el número de mago lo determina el usuario. Para evitar colisiones dentro de una cadena, es necesario asignar un determinado rango numérico a los magos. Por ejemplo, de 100.000 a 999.000. Entonces no habrá ningún problema.

Dicho esto, se puede, por supuesto, perfeccionar la solución. Esto es sólo un "prototipo". Es una versión de demostración.


Querida, lo que quieres es una tarea infantil. Es el tipo de problema que resuelven los escolares.

Hay docenas de ellas en Internet. Y olvídate de los datos de la cadena.