Algoritmos, métodos de solução, comparação de seu desempenho - página 3

 
fxsaber:

O que é mais específico? Você não consegue pensar em um contra-exemplo para sua implementação? Explicar o que são matrizes e estruturas?

Tenho medo até de adivinhar o que acontecerá se você precisar obter não só o número do pedido, mas também o preço, por exemplo.

No geral, algum tipo de ignorância. E não é a de um principiante, e portanto indesculpável. Que vergonha para o recurso se alguém de fora citaria este tópico como um exemplo de "olhar para o nível dos programadores em MQL!

E como você define o nível?
Também sou iniciante em muitas questões, mas Peter parece ser um ignorante militante.
E não apenas em Tester ou OOP.
Ele não tem nenhum problema com o MetaEditor.
Talvez ele o use raramente?
E onde está mesmo um único código na biblioteca? Ou em produtos?
(

 
Реter Konow:
Você fornece sua solução. Caso contrário, são apenas palavras vazias. O mesmo de antes.

Você está pronto?

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Algoritmos, métodos de solução, comparando seu desempenho

fxsaber, 2017.12.10 16:12

Quase todos aqui estão dispostos a fazer se você entrar no modo somente leitura durante um mês depois.


 
Sergey Dzyublik:

Você está 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:

Aqui está a prova prática:

Eu nunca vi uma escuridão como esta nem mesmo no tópico "perguntas de novato". Rapazes, é uma loucura! O que há para comentar?

s. Bem, por que você escreve Get_magic(1), escreva Get_magic(23999).

 
Mikhail Dovbakh:

E como você determina o nível?
Também sou um noviço em muitas questões, mas Peter parece ser um ignorante militante.

E eu sou novo em muitas questões. E quando minha ignorância militante é mergulhada em uma cuba de merda, eu não finjo que isso não aconteceu. Estou agradecido pela lição sóbria.

Nunca há vergonha alguma em ser um novato ou não saber algo. Neste caso, porém, o orgulho da ignorância está presente, e também está fora dos gráficos.

O único benefício - revela-se um dos melhores motivadores para criar uma lista negra sobre o recurso.

 
Vasiliy Sokolov:

Eu ainda nem sequer vi este tipo de obscuridade no tópico "perguntas para principiantes". Rapazes, isso é uma loucura! O que há para comentar?

S.s. Não, bem, por que você escreve Get_magic(1), escreve Get_magic(23999).

A solução funciona?

 
Реter Konow:

A solução funciona?

Não, não encontra, porque StringFind pode encontrar o número medjik ao invés do número da transação.

 
Vasiliy Sokolov:

Não, não funciona, porque StringFind pode encontrar o número mediano ao invés do número da transação.

StringFind encontra primeiro o número comercial ("_" + número comercial + "_").

Depois adicionamos 3 e começamos o megic.

Então StringFind procura o início do próximo comércio.

Em seguida, subtrai o início do próximo comércio do início do megic.

Então StringSubstr recebe o cordão da mega-estrela.

Em seguida, o convertemos em int e o devolvemos.


O que não funciona aqui?

 
Реter Konow:

O que não funciona aqui?


Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Algoritmos, métodos de decisão, comparação de seu desempenho

Sergey Dzyublik, 2017.12.10 16:10

Reg Konow, seu nível de conhecimento de "estruturas de dados" é 0.

1. Seu código não está funcionando.
Padrão "_index_magic" errado. A solução possível é "|index_magic".

2. Seu algoritmo tem velocidade O(n) com até três passes de valor de stringAll_magics

3. Sua medição de desempenho é completamente incorreta:

- não há um resultado médio na série
- nenhuma série com busca dos últimos valores do índice



Em vez de escrever bobagens - por favor, estude algo sobre o assunto, por exemplo,https://habrahabr.ru/post/310794/.
E depois aprenda como aplicar a CArrayList de <Generic\ArrayList.mqh>.
Boa sorte.