Erros, bugs, perguntas - página 2677

 
fxsaber:

Lançamento, é claro. O próprio terminal armazena carraças na sua cache, das quais não preciso durante a operação.

É melhor para mim voltar a levantar estes carrapatos mais tarde, quando estiver frio. Precisa de um mecanismo para "arrefecer" o Terminal.

Não reparei nisso.

void OnStart()
  {
   Print("используется памяти до закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   MqlTick items[];
   ulong t0=GetMicrosecondCount();
   uint    count=CopyTicks(Symbol(),items,COPY_TICKS_INFO,0,100000000);
   t0=GetMicrosecondCount()-t0;
   Print ("Загружено за "+string(t0/1000)+" миллисекунд "+ (string)count+ " тиков");
   Print("используется памяти после закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   ArrayFree(items);
   Print("используется памяти после ArrayFree: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
  }


SZY O triste é que em memória, os carrapatos são armazenados desempacotados num tamanho de 60 bytes por carrapato. Pode ser facilmente embalado 5 vezes (~12 bytes por carrapato).

 
Stanislav Korotky:

É melhor fazer o download automático como por CopyRates.

Neste caso, o prazo é desconhecido. O download é iniciado por um pedido de símbolo de período.

Considerar o que pode ser feito

 
Nikolai Semko:

não notado.

É preciso olhar para o que o terminal está a consumir.

void OnStart()
  {
//   Print("используется памяти до закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print("используется памяти до закачки истории: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
   MqlTick items[];
   ulong t0=GetMicrosecondCount();
   uint    count=CopyTicks(Symbol(),items,COPY_TICKS_INFO,0,1 e7);
   t0=GetMicrosecondCount()-t0;
   Print ("Загружено за "+string(t0/1000)+" миллисекунд "+ (string)count+ " тиков");
//   Print("используется памяти после закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print("используется памяти после закачки истории: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
   ArrayFree(items);
//   Print("используется памяти после ArrayFree: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print("используется памяти после ArrayFree: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
  }


O resultado está num Terminal que já funciona há muito tempo. Não há EAs/indicadores em funcionamento. Dois gráficos, barras M1 apenas para o ano em curso.

используется памяти до закачки истории: 1043 Mb
Загружено за 11223 миллисекунд 10000000 тиков
используется памяти после закачки истории: 1675 Mb
используется памяти после ArrayFree: 1102 Mb

60Mb não foram libertados. Terminal Vazio consome mais do que um gigabyte. A única forma de reduzir o consumo é recarregar o Terminal.

 
Sergey Dzyublik:

Boa tarde, muito obrigado.
Nunca tinha utilizado o novo operador antes porque logicamente deve ser mais lento do que o ArrayResize com memória reservada.
Mas estou impressionado com os resultados obtidos, acontece que é o contrário, a matriz nativa através do novo operador é mais rápida.

MT5 (construir 2363):

Lançado em beta 2364 (infelizmente tem um erro de compilação para o novo T() dentro do modelo)

Aqui estão os registos do seu guião:

2020.03.19 10:39:45.784 Test (EURUSD,H1)        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
2020.03.19 10:39:46.765 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=984
2020.03.19 10:39:48.233 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1469
2020.03.19 10:39:49.944 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
2020.03.19 10:39:50.923 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=969
2020.03.19 10:39:52.392 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1484
2020.03.19 10:39:54.100 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
2020.03.19 10:39:55.079 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=985
2020.03.19 10:39:56.548 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1469
2020.03.19 10:39:58.258 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
2020.03.19 10:39:59.237 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=984
2020.03.19 10:40:00.705 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1469
2020.03.19 10:40:02.416 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
Pode-se ver que o ArrayResize para objectos começou a funcionar mais rapidamente.

Mais uma vez, a complexidade de uma parte da função ArrayResize foi reduzida de logaritmo para zero
 
Ilyas:
Podemos ver que o ArrayResize para objectos é agora mais rápido.
Mais uma vez, conseguimos reduzir a complexidade de uma parte da função ArrayResize de logaritmo para zero.

Consegui comparar a velocidade do ArrayResizeReserve e ArrayOnNew num projecto real para o tipo de dados - classe com um único campo int, número de registos 20M.

Em MT5 (construir 2363) sobre todos os parâmetros comparados, excepto um ArrayOnNew foi pior para o ArrayResizeReserve:

Acesso de leitura/escrita (std::fill_n, std::copy, std::vector::clear): 2-2,5 vezes mais lento
Criação de todos os elementos de uma só vez (std::vector::resize) para memória "fria"/"quente" - 1,1-1,2 vezes mais lento
Criação de todos os elementos um a um (std::vector::push_back) para memória "quente" - 1,2 vezes mais rápido

 

estas ligações na ajuda (editor) levam a uma página não encontrada


 
Bug MT5 (build 2363) Desadequação das prioridades de execução das funções do modelo em MQL em comparação com as funções do modelo em C++(online:https://onlinegdb.com/HkNqBDZ88).
O problema
ocorre quando a primeira função "teste" contém uma classe base de modelo totalmenteespecializada como argumento,
e a segunda função "teste" sobrecarrega a primeira, é uma função modelo e contém como argumento uma classe base de modelo não especializada.

template<typename T>
struct B{
   T data;
};

template<typename T>
struct BB : public B<T>{};


template<typename T>                                             
struct A{
public:
   static void test(T& src){
      printf("1");
   }
   
   template<typename TT>
   static void test(B<TT>& src){
      printf("2");
   }
};
      

void OnStart(){
   BB<int> bb;
   A<B<int>>::test(bb);         //'test' - ambiguous call to overloaded function        
}
 
Olá a todos!!! Pergunta: Utilizo duas plataformas MT4 e MT5 no meu copyutera. MT4 ligado ao sinal sem qualquer problema. Mas não me consigo ligar a outro sinal do MT5. Tenho uma conta e o movimento de fundos é exibido, mas não há número de conta na conta, não tenho nenhum botão de sinal no painel de instrumentos do terminal. Aluguei um servidor, vps, escrevi que preciso de migração, mas o botão de migração não funciona. Por favor, digam-me porquê.
 
Anna:
Olá a todos!!! A minha pergunta é: utilizo duas plataformas MT4 e MT5 no meu copyutera. Liguei-me ao sinal do MT4 sem qualquer problema. Mas não me consigo ligar a outro sinal do MT5. Tenho uma conta e o movimento de fundos é exibido, mas não há número de conta na conta, não tenho botão de sinal no painel de instrumentos do terminal. Aluguei um servidor, vps, escrevi que preciso de migração, mas o botão de migração não funciona. Por favor, digam-me porquê.

MetaTrader 5 (para o aluguer de alojamento virtual incorporado no terminal) requer um sistema operativo de 64 bits.

 

em Win 10 alguém liga os agentes locais?

Tentei ligar 2 PCs, o agente remoto está constantemente pronto a ligar-se... sem empregos.

dei uma olhada na firewall penso que existe uma marca de verificação para Metatrader Agent , export - import agent via file see ports and name of pc also

suspeito que preciso de encaminhar os portos para outro lugar?