Proponho a solução de um problema:
- Escreva uma função que em cada chamada aceite e escreva um número pseudo-aleatório, que será um"honeyjack" condicional.
2. Escreva uma segunda função que chame a primeira função de um número pseudo-aleatória de vezes e a passe o "medjic" condicional (gerado).
3. escrever uma terceira função que retornará o número"medjic" pelo número"transação" (qualquer número ordinal) passado pelo usuário.
Exigências:
- O consumo de memória para escrever "medjic" deve ser o mais próximo possível do número de "medjic", cujo número é desconhecido antecipadamente.
- As funções devem funcionar rapidamente.
//--------------------------------------------------------
Acho que a biblioteca em discussão tem as ferramentas para resolver este problema.
ZS. Todas as três funções simulam o trabalho com ordens da EA, cujo número não é conhecido antecipadamente. Portanto, a tarefa se enquadra em nosso tema.
Proponho a solução de um problema:
- Escreva uma função que em cada chamada aceite e escreva um número pseudo-aleatória, que será um"medjic" condicional.
2. Escreva uma segunda função que chame a primeira função de um número pseudo-aleatória de vezes e a passe de um "medjic" condicional (gerado).
3. para escrever a terceira função, que retornará o número de"medjik" pelo número de"deal" (qualquer número de série), que é transferido pelo usuário.
Exigências:
- O consumo de memória para escrever os "medgies" deve ser o mais próximo possível do número de "medgies", cujo número não é conhecido antecipadamente.
- As funções têm que funcionar rapidamente.
Acho que a biblioteca em questão tem as ferramentas para resolver este problema.
SZY. Todas as três funções imitam o trabalho com ordens de Expert Advisor, cujo número não é conhecido antecipadamente. Portanto, o problema se enquadra em nosso tema.
Piotr, acredito que qualquer função deve ter algum benefício. Eu não entendo bem o bem que sai de qualquer uma das três funções ?
Peter, acho que cada função deve ter algum benefício. Não estou bem certo do efeito positivo que qualquer uma destas três funções tem ?
Este é um lançamento de https://www.mql5.com/ru/forum/221917
Aqui estamos testando a eficácia das soluções propostas pela biblioteca na prática.
Nessa linha, foi sugerido que a solução de escrever ordens de medjic a um fio e depois colocá-las em uma matriz era ineficiente.
A nova biblioteca genérica também tem uma solução para este problema.
Interessante confirmar ou refutar a afirmação de que escrever para uma corda é uma solução ineficaz.
Penso que será útil e interessante ver o que a prática mostrará.
Todos que quiserem, podem tentar resolver esta tarefa com a ajuda do kit de ferramentas da biblioteca.
Vou tentar resolver esta tarefa à minha própria maneira.
Em seguida, compararemos o desempenho.

- 2017.12.07
- www.mql5.com
Reg Konow, se você estiver organizando algo, por favor, faça-o em um nível decente, não espontaneamente e de.....stand.
Os termos devem ser claros, inequívocos e com exemplos concretos....
Aqui está uma lista de perguntas que surgiram de uma leitura atenta de todo o primeiro parágrafo.
- Написать функцию, которая на каждом обращении будет принимать и записывать некоторое псевдо-случайное число, которое будет условным "меджиком".
1) Por que negrito o texto que não é significativo?
2) Levar um ponteiro é uma "chamada" para uma função ou ainda não? A função é chamada.
3) O termo "escrever um número" é normalmente usado quando se trabalha com arquivos. É uma imprecisão e refere-se ao trabalho com dados em memória, ou ainda requer salvar dados entre as execuções do programa?
4) Se você quiser, um número pseudo-aleatória pode ser negativo, mas magia não é. Então o que temos: magia ou pseudo-aleatória dentro de uma certa faixa? Qual deles?
Reg Konow, se você estiver organizando algo, por favor, faça-o em um nível decente, não espontaneamente e de.....stand.
Os termos devem ser claros, inequívocos e com exemplos concretos....
Aqui está uma lista de perguntas que surgiram de uma leitura atenta de todo o primeiro parágrafo.
1) Por que negrito o texto que não é significativo?
2) Levar um ponteiro é uma "chamada" para uma função ou ainda não? A função é chamada.
3) O termo "escrever um número" é normalmente usado quando se trabalha com arquivos. É uma imprecisão e refere-se ao trabalho com dados em memória, ou ainda requer salvar dados entre as execuções do programa?
4) Se você quiser, um número pseudo-aleatória pode ser negativo, mas magia não é. Então o que temos: magia ou pseudo-aleatória dentro de uma certa faixa? Qual deles?
Tarefa principal:
Para implementar acesso rápido a um mágico específico através de um número de transação.
É necessário escrever mágicos em um "dicionário" e acessá-los através do número da transação.
O número de pedidos não é conhecido antecipadamente, portanto o tamanho do dicionário é desconhecido.
Entretanto, o acesso tem que ser rápido e a quantidade de memória alocada tem que ser aceitável.
A tarefa que eu sugiro é imitar o trabalho de um EA que faz pedidos e depois recebe seus magos pelo número do comércio para continuar trabalhando com eles.
Você pode resolver o problema da maneira que quiser.
Um número específico de um mágico não importa. Pode ser qualquer número. É apenas uma simulação.
Adicionado:
Corrigido acima"Implementar acesso rápido a uma magia específica via número de transação ". " .
Se acrescentarmos três números mágicos: 10, 11, 12
Então, quais são os números de suas transações? 0, 1, 2?
Se acrescentarmos três números mágicos: 10, 11, 12
Então, quais são os números de suas transações? 0, 1, 2?
Em outro tópico, as pessoas com conhecimento disseram que é impossível fazer uma solução eficaz para escrever mágicos a uma corda e obtê-los rapidamente "na mosca" a partir da corda.
Entretanto, na minha opinião, se o número de mandatos futuros for desconhecido, então a única boa solução é escrever mágicos para a corda.
Eu argumentei que não haveria perda de velocidade.
Aqui está uma prova prática:
//+------------------------------------------------------------------+ //| 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 Magic_position_start = StringFind(All_magics,"_" + (string)deal_number + "_",0) + 3; //-------------------------------------------- //Получаем конец строки магика. //-------------------------------------------- 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); 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)); } //+------------------------------------------------------------------+
Talvez alguém ache útil minha solução...
(o código encontra a magia certa em mais de 24.000 pedidos mágicos em 15 microssegundos!)
(Além disso, não se desperdiça um byte de memória extra).
Se acrescentarmos três números mágicos: 10, 11, 12
Então, quais são os números de suas transações? 0, 1, 2?
Esta é uma pergunta interessante sobre o assunto:
Por exemplo, existe uma EA com várias moedas na qual o próximo lote do próximo pedido é baseado em resultados de pedidos já abertos em diferentes pares
condição de abertura de uma ordem - se houver um sinal para abri-la, o lote total não excede 0,1 e o saque total não é superior a 101% do depósito
Opção um: preencher todos os dados na matriz e recuperá-los quando o próximo pedido for solicitado (não devemos abrir novos pedidos a cada tick)
opção dois - cada vez que emitimos um pedido para abrir o próximo pedido, devemos verificar todos os dados disponíveis no momento atual para todos os pares
Qual solução será mais rápida e menos dispendiosa?
Quebra-cabeças )

- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Nesta linha, discutiremos diferentes maneiras de resolver estes ou aqueles problemas e compararemos o desempenho das soluções propostas.
Todos são bem-vindos para discutir problemas e métodos para resolvê-los ;)