Алгоритмы, методы решений, сравнение их производительности - страница 5

 
Vasiliy Sokolov:

Петр, Вы пьяны? В подстроке ..._25_... четыре символа: _, 2, 5, _.

Да вы правы. Упустил этот момент.

Но исправить можно.

 
Vasiliy Sokolov:

В подстроке ..._25_... четыре символа: _, 2, 5, _.

Не все можно сходу учесть. Спасибо за указание на конкретную ошибку.
 
Реter Konow:

Да вы правы. Упустил этот момент.

Но исправить можно.

По-видимому, пациент неизлечим.

 

Исправлю код и выложу.

Прошу подождать.

зы. Эмоции можно сбавить. Ничего страшного не происходит.

 
Реter Konow:

Исправлю код и выложу.

Прошу подождать.

зы. Эмоции можно сбавить. Ничего страшного не происходит.


Происходит. То что мертво умереть ну ни как не хочет.

 

Готово:

//+------------------------------------------------------------------+
//|                                                        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));
   
  }
//+------------------------------------------------------------------+
 

Петр, Ваш пример изначально бредовый и не рабочий. В реальных условиях номер сделки всегда случайный. Нельзя писать:

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

Мы не знаем следующий номер сделки.

 
Vasiliy Sokolov:

 В реальных условиях номер сделки всегда случайный. Нельзя писать:

Мы не знаем следующий номер сделки.

Не совсем.

Допустим мы торгуем и уже совершили 300 сделок.

Если нам нужно получить любой меджик до 300-ой сделки, то у нас всегда есть номер следующей сделки.

Если нам нужно получить номер 300-ой сдеки, то ... мы можем номер меджика последней сделки всегда держать в какой то переменной.

 

Код конечно не идеальный чтобы его сразу можно было применить в торговле. Он просто демонстрирует подход к решению. Его можно дорабатывать.

 
Реter Konow:

Не совсем.

Допустим мы торгуем и уже совершили 300 сделок.

Если нам нужно получить любой меджик до 300-ой сделки, то у нас всегда есть номер следующей сделки.

Если нам нужно получить номер 300-ой сдеки, то ... мы можем номер меджика последней сделки всегда держать в какой то переменной.


Чем обычный массив интов не подойдет?  зачем эти стринги.... повторюсь представте что вместо стринга у вас использован класс в которм храниться динамический массив чартов - и это по вашему быстро?