Erros, bugs, perguntas - página 1439

 
George Merts:

Como a minha experiência mostra, se o programador escreve algo num array contendo 10 itens com índice 20, muito provavelmente significa que cometeu um erro e o programa deve gerar um erro em vez de aumentar o tamanho do array, escondendo assim uma acção questionável.

Todas aquelas "matrizes que ajustam o tamanho" são muito mais problemáticas em termos de esconder potenciais erros do que a conveniência. Além disso, não ter de controlar o tamanho de uma matriz é também uma prática potencialmente perigosa, levando a bugs difíceis de corrigir.

É impressão minha, ou não trabalhou com as línguas em questão? Não é necessário especificar um índice a ser adicionado: é atribuído automaticamente e o tamanho da matriz também é aumentado. O programador simplesmente não tem hipótese de cometer um erro com o índice durante esta operação.

Pode implementar comportamentos semelhantes com classes, adicionar as funções relacionadas pop, shift, unshift, etc. E arraste um vagão de classes de código para código, com cada código usando %10...20 funções do mesmo. Isto parece-lhe uma boa solução? Um exemplo de solução correcta na minha opinião é acrescentar aos ObjectosDeleteAll a capacidade de apagar por prefixo - isto é outro micron para programação de nível superior - e a maioria dos codificadores voaram para o caixote do lixo da reciclagem de modo a terem uma função tão auto-fabricada. Infelizmente, dificilmente veremos isso com arrays...

 

И таскать телегу классов из кода в код, при том что в каждом коде из неё используются %10..20 функций.

Ainda não ouviu falar em incluir ficheiros mqh?
 

Não há necessidade de escrever classes "smart array", já estão na MetaQuotes Standard Library, ver a família de classes Arry

 
Olá. Estou a tentar usar o MT5 para trabalhar com futuros através do corretor "Otkritie".
Ao aceder à função SymbolInfoTick verificou-se que os dois últimos parâmetros da estrutura do MqlTick
- tempo_msc, falta a bandeira. É possível resolver este problema? Por exemplo, pegue MT5 a partir deste website,
tentar ligá-lo ao servidor do corretor. Ou é possível obter a informação necessária de outra forma.
Estou interessado: quem iniciou a transacção, o vendedor ou o comprador?
 
Alexander Puzanov:

É impressão minha, ou não trabalhou com as línguas em questão? Não é necessário especificar um índice para o elemento adicionado, este é atribuído automaticamente e o tamanho da matriz é também aumentado. O programador não tem a possibilidade de cometer um erro com o índice durante esta operação

Awwwwww... Que hipóteses tem o programador de cometer um erro? Está errado ao pensar que pode ter em conta todas as variantes de qualquer programa complexo.

Todas essas "acções por defeito" devem ser propriedades de objectos complexos. Objectos simples, tais como variáveis, matrizes e estruturas simples - devem ter o mínimo de propriedades "por defeito" possível.

Por exemplo, na criação - devem armazenar um valor indefinido, e não zero.

Pode implementar comportamento semelhante com classes, adicionar funções relacionadas pop, shift, unshift, etc. E arraste um vagão de classes de código para código, com cada código usando %10...20 funções do mesmo. Isto parece-lhe a solução certa?

É a solução certa em termos de lógica. Quando se trabalha com tais classes - o seu comportamento é transparente.

E que tal "arrastar um carrinho cheio de aulas" - quando codificar não as arrasta, basta ligar a biblioteca. E ao compilar, um linker normal não deve colocar num executável todos os métodos da biblioteca, mas apenas aqueles que são utilizados.

Exemplo de solução correcta na minha opinião - adicionar aos ObjectosDeleteAll função apagar por prefixo - isto é outro micron para programação de nível superior - e a maioria dos codificadores voaram para o lixo esta função auto-fabricada. Infelizmente, é pouco provável que isto aconteça com arrays.

Na minha opinião, esta é também uma abordagem errada, pela mesma razão. A função está carregada de tarefas que não são típicas da mesma e não seguem a lógica da sua aplicação.

A solução correcta, parece-me, é ter um gestor de objectos de classe no gráfico que mantém uma lista deles, e remove os necessários à medida que as funções são chamadas. Os prefixos do nome, parece-me, devem servir apenas para tornar alguma informação sobre o objecto clara para uma pessoa. E eliminação - não deve basear-se de forma alguma no nome do objecto, mas sim em guardar esse nome numa matriz.

 
Demal:
Olá. Estou a tentar usar o MT5 para trabalhar com futuros através do corretor "Otkritie".
Ao aceder à função SymbolInfoTick verificou-se que os dois últimos parâmetros da estrutura do MqlTick
- tempo_msc, falta a bandeira. É possível resolver este problema? Por exemplo, pegue MT5 a partir deste website,
tentar ligá-lo ao servidor do corretor. Ou é possível obter a informação necessária de outra forma.
Estou interessado: quem iniciou a transacção, o vendedor ou o comprador?
  1. Qual a construção do terminal que tem agora?
  2. Liga-se a uma demonstração ou a um servidor real?
 
versão 5.0 build 1150, demo
 
Demal:
versão 5.0 build 1150, demo

Actualize o seu terminal (precisa de se ligar ao servidor MetaQuotes-Demo). Construção actual:

Terminal        MetaTrader 5 build 1210 started (MetaQuotes Software Corp.)

Este é o guião:

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                              Copyright © 2015, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlTick last_tick;
//--- 
   if(SymbolInfoTick(Symbol(),last_tick))
     {
      Print("time = ",last_tick.time,"; bid = ",last_tick.bid,
            "; ask = ",last_tick.ask,"; volume = ",last_tick.volume,
            "; time_msc = ",last_tick.time_msc,"; flag = ",last_tick.flags);
     }
   else Print("SymbolInfoTick() failed, error = ",GetLastError());
  }
//+------------------------------------------------------------------+

Dá este resultado:

Test (RTS-12.15,H1)     time = 2015.11.26 09:42:57; bid = 88360.0; ask = 88400.0; volume = 2; time_msc = 1448530977000; flag = 0

Arquivos anexados:
Test.mq5  2 kb
 
Karputov Vladimir:

Actualize o seu terminal (necessita de se ligar ao servidor MetaQuotes-Demo). Construção actual:

Este é o guião:

Dá este resultado:

Obrigado, sabe porque é que a bandeira tem um valor 0, como se nada tivesse mudado?
 
Demal:
Obrigado, sabe porque é que a bandeira tem um valor 0, como se nada tivesse mudado
UseCopyTicks e ficará feliz. E oSymbolInfoTick provavelmente ainda não sabe como trabalhar com a nova estrutura de carraças.
Arquivos anexados:
CopyTicks.mq5  4 kb