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

 
Реter Konow:

2. A integração na EA é o ponto-chave. Se a solução é super-confusiva (tenho certeza de que você nem consegue explicar como funciona a solução de Sergey Dzyublik), qual é o seu valor prático para o comerciante? Você não pode construir uma EA normal a partir de soluções superconvoluídas.

A solução proposta foi expressa imediatamente

Mas alguém nem sequer perguntou o que era. A implementação poderia ter sido muito "mais clara". Mas isso não mudaria a base da idéia.

 
Реter Konow:

1. Em termos de prática, estas são palavras vazias com as quais você luta contra os fatos. Eu mostrei a medida de tempo para encontrar o mágico. Eu demonstrei a conveniência de integrar a solução na EA. Tudo o que você está demonstrando é calúnia de minha solução. Nada mais.

2. A integração na EA é o ponto-chave. Se a solução é super complicada (tenho certeza que você nem consegue explicar como funciona a solução de Sergey Dzyublik), qual é o seu valor prático para o comerciante? Você não pode construir uma EA normal a partir de soluções superconvoluídas.

Eu não julgo a solução de Sergey Dzyublik. Ele ainda não o explicou. Quando ele o explicar, ficará claro quem "começou esta confusão".


Aqui eu queria responder a você, mas o moderador estava à sua frente e disse a mesma coisa. Portanto, vou mostrar novamente o que ele disse:

Artyom Trishkin:

Não. Não estou oferecendo o estilo de solução de outra pessoa. Escreva em seu próprio estilo - ninguém está impondo nada a ninguém.

Mas estou sugerindo que, com sua persistência característica, você resolva os problemas da melhor maneira possível inicialmente. O que você está fazendo?

1. Inicialmente você escolhe a solução mais subótima de todas as possíveis e começa a brincar com ela. Para esta tarefa, mesmo na fase de pensar uma solução, você não só tinha que rejeitar sua versão, mas até mesmo não pensar nessa direção. E não é para isso que servem as funções de manipulação de texto.

2. Sobre a integração no Expert Advisor e os benefícios da solução proposta - deixe aquele que a propôs responder a você.


P.S. Você deve ser um péssimo estudante :)

 
Реter Konow:

Percebo meus erros assim que estou convencido deles. Até agora, ninguém foi capaz de provar que minha decisão estava errada. Vamos esperar.

Você é um pobre aprendiz!

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

Algoritmos, métodos de solução, comparação de desempenho

Sergey Dzyublik, 2017.12.10 20:58


1. Seu código não funciona.
Padrão incorreto "_index_magic". Possível solução "|index_magic".


Após a adição, temos _1_3_2_4_4_3_5_4_6_
Por favor, encontre o 3º na lista.
Você terá um 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:

Até agora, tudo o que vejo aqui é uma zombaria de um homem que teve a coragem de postar aqui sua solução.

Claramente, é... para dizer de forma branda, é uma bobagem. Mas ele o colocou lá fora. Os demais têm até agora apenas a coragem de rir e apontar o dedo.

Artem, levei 40 minutos do meu tempo e alguns milhões de células nervosas para explicar ao homem que o substrato..._25_... quatro caracteres, não três. Bem, quantos anos-homem você acha que serão necessários para explicar a todos nós algo mais valioso e poderoso conceitualmente? Eu penso muito, muito homem-ano. É por isso que ninguém sequer tenta explicar e mastigar algo. Há simplesmente um certo nível mínimo abaixo do qual o que explica não pode afundar, e o nível de Peter está abaixo dessa barra.

 
fxsaber:



Resultado

Eu já disse que o número do mágico é determinado pelo usuário. A fim de evitar colisões dentro de um cordel, é necessário alocar uma certa faixa numérica para os mágicos. Por exemplo, de 100.000 a 999.000. Então, não haverá problema.

Dito isto, é claro que podemos afinar a solução. Este é apenas um "protótipo". Uma versão demonstrativa.

 
Vasiliy Sokolov:

Artem, levei 40 minutos do meu tempo e alguns milhões de células nervosas para explicar ao homem que o substrato..._25_... quatro caracteres, não três. Bem, quantos anos-homem você acha que serão necessários para explicar a todos nós algo mais valioso e poderoso conceitualmente? Eu penso muito, muito homem-ano. É por isso que ninguém sequer tenta explicar e mastigar algo. Há simplesmente um certo nível mínimo abaixo do qual o que explica não pode afundar, e o nível de Peter está abaixo dessa barra.

Vasily, eu entendi tudo assim que você disse isso. Obrigado por ter encontrado esse erro.

 
fxsaber:

Vá se foder.

Aqui vamos nós...))

E por que a reação?

 

O recipiente padrão da biblioteca - CArrayList - foi escolhido para resolver a tarefa.
Quase todo o código é um invólucro a fim de fornecer uma interface "conveniente" para testes. Para cada gosto e cor, como se costuma dizer....

Para testar sua solução, você precisa:
1. Criar uma classe que herda da ITestRandomAccessCollection e implementa os métodos necessários. (similar aoTestRandomAccessCollectionCArrayList)
2. Os dados de um determinado tipo são usados para testes. No exemplo, foi int.
Precisamos ter certeza de que existe um gerador para o tipo de dado selecionado e ele é adicionado aoCreateGenerator(semelhante aoIntGenerator).
3. Faça um teste com os mesmos dados para várias soluções e compare os resultados (se quiser, também pode fazer um ciclo para obter a média):

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


Esta é atualmente a função para testes, novos testes podem ser adicionados por analogia:

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

Parâmetros:

testCollection - recipiente de teste implementandoITestRandomAccessCollection<T>;
iterationCount - número de ciclos de iteração no teste;
srandValue - influência sobre a amostragem do gerador se 0 for uma amostragem aleatória.

 
Реter Konow:
1. Quantos microssegundos, em média, são necessários para encontrar o mágico em sua solução?

2. Como é fácil integrar sua solução na EA (na sua opinião)?


1. não faz sentido. Os algoritmos como um todo são comparados em resultados relativos.
2. A solução já está integrada - é uma biblioteca padrão<Generic\ArrayList.mqh>.

 
Реter Konow:

Como eu disse antes, o número do mágico é determinado pelo usuário. A fim de evitar colisões dentro de um cordel, é necessário alocar uma certa faixa numérica para os mágicos. Por exemplo, de 100.000 a 999.000. Então não haverá nenhum problema.

Dito isto, você pode, é claro, refinar a solução. Este é apenas um "protótipo". É uma versão demonstrativa.


Minha querida, o que você quer é uma tarefa infantil. É o tipo de problema que as crianças em idade escolar resolvem.

Há dezenas delas na Internet. E esqueça os dados das cordas.

Razão: