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

 
Vasiliy Sokolov:

Peter, ¿estás borracho? En la subcadena de ... 25_... cuatro caracteres: _, 2, 5, _.

Sí, tienes razón. Me lo perdí.

Pero podemos arreglarlo.

 
Vasiliy Sokolov:

En la subcadena ... 25_... cuatro caracteres: _, 2, 5, _.

No todos pueden ser contabilizados. Gracias por señalar el error específico.
 
Реter Konow:

Sí, tienes razón. Se perdió ese punto.

Pero se puede arreglar.

Aparentemente, el paciente es incurable.

 

Arreglaré el código y lo publicaré.

Por favor, espere.

Por cierto. Las emociones pueden ser moderadas. No hay nada malo en ello.

 
Реter Konow:

Arreglaré el código y lo publicaré.

Por favor, espere.

Hola. Las emociones pueden ser moderadas. No hay nada de qué preocuparse.


Está ocurriendo. Lo que está muerto no quiere morir.

 

Hecho:

//+------------------------------------------------------------------+
//|                                                        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;
 //---------------------------------
}
//+------------------------------------------------------------------+
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 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()
  {
   Trading();
   //--------------------------
   ulong t1 = GetMicrosecondCount();
   Get_magic(1000);
   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));
   
  }
//+------------------------------------------------------------------+
 

Peter, tu ejemplo es intrínsecamente delirante e inviable. En el mundo real, el número de transacción es siempre aleatorio. No puedes escribir:

//--------------------------------------------
 //Получаем конец строки магика.
 //--------------------------------------------
 int Magic_position_end   =  StringFind(All_magics,"_" + (string)(deal_number + 1) + "_",0); //тут по идее снова начинается поиск и он уже идет с самого начала снова не знаю зачем искать еще раз, надо хотябы поиск начинать с тагоже места где нашли начало маджика чтоли... и искать просто подчеркивание... 

No sabemos el número de la siguiente transacción.

 
Vasiliy Sokolov:

En el mundo real, el número de transacción es siempre aleatorio. No puedes escribir:

No sabemos el número de la siguiente transacción.

La verdad es que no.

Supongamos que estamos operando y que ya hemos realizado 300 operaciones.

Si necesitamos conseguir algún medjic antes de la operación número 300, siempre tenemos el siguiente número de operación.

Si tenemos que conseguir el número del comercio número 300, entonces... siempre podemos mantener el número de la última operación en una variable.

 

El código no es, desde luego, perfecto para que pueda aplicarse inmediatamente al comercio. Simplemente demuestra una aproximación a la solución. Se puede afinar.

 
Реter Konow:

La verdad es que no.

Supongamos que estamos operando y ya hemos realizado 300 operaciones.

Si necesitamos conseguir algún medjic antes de la operación número 300, siempre tenemos el número de la siguiente operación.

Si tenemos que conseguir el número del acuerdo número 300, entonces... siempre podemos mantener el número de la última operación en alguna variable.


¿Qué hay de malo en un array normal de ints? ¿Qué sentido tiene el thongs.... De nuevo, imagina que en lugar de una cadena, utilizas una clase que almacena una matriz dinámica de gráficos, ¿y crees que eso es rápido?