Erros, bugs, perguntas - página 279

 
Rosh:
Não.
é por isso que o acesso simultâneo não pode ser organizado:(((
 
Olegts:
é por isso que o acesso simultâneo não pode ser organizado:(((.

Pode, o ficheiro aberto em MT5 com a bandeira de acções também estará disponível para qualquer outro programa, incluindo MT4.

Veja como é feito aqui.

ou seja, se o ficheiro já estiver aberto em MT4, a bandeira Shaare permitirá que seja aberto por MT5 sem problemas. O MT4 funciona como habitualmente, enquanto que o MT5 pode permitir que outros programas utilizem um ficheiro já aberto por ele, ou abrir um ficheiro que é aberto por outra pessoa sem a bandeira de shahre.

 
Urain:

Pode, o ficheiro aberto em MT5 com a bandeira de acções também estará disponível para qualquer outro programa, incluindo MT4.

Veja como é feito aqui.

Obrigado, vou dar uma olhadela agora...
 
Olegts:
Obrigado, vou dar uma olhadela agora...
Eu olhei, o MT5 escreve e o MT4 lê, funciona, mas se o MT4 escreve, o MT5 não consegue ler porque o ficheiro está bloqueado, pelo menos não funcionou para mim...
 
A secção de ajuda na descrição do tipo de dados diz:
<br / translate="no">

Devido a isto, não é categoricamente recomendado comparar dois números reais um com o outro para a igualdade, pois tal comparação não é correcta.

E é sugerido um método de comparação especial.

Se ainda precisar de comparar dois números reais para a igualdade, pode...

Mas segue-se uma conclusão lógica de que não é recomendado comparar números reais mesmo através de operações maiores/pequenas, porque tal operação, no sentido do acima mencionado, só é correcta quando um método especial primeiro estabelece correctamente que os valores verificados não são iguais em termos de zero máquina.

Ou seja, acontece que os operadores > e < para números reais também não podem ser utilizados em forma pura. Acertei, e se sim, porque não acrescentar um comentário correspondente à ajuda?


Mas, se o operador, por exemplo, >, só pode ser utilizado após uma verificação correcta da desigualdade, então como podemos organizar a verificação para >=? É necessário complicar ainda mais o algoritmo, ou seja, verificar primeiro a igualdade com uma função especial, e depois com uma função especial para a desigualdade (antes de usar >)?


Talvez alguém já tenha desenvolvido uma biblioteca para todos os casos de comparação, tanto para o tipo duplo como para o tipo flutuante? Esbocei algo para o tipo duplo - não sei se está correcto:

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Функция проверки на равенство двух вещественных чисел типа double
bool EqualDoubles(const double d1, const double d2)
   {  
      const double epsilon=2.2204460492503131 e-016;//DBL_EPSILON
      if(d1-d2>epsilon) return false;
      if(d1-d2<-epsilon) return false;
      return true;
   }
// Конец функции проверки на равенство двух вещественных чисел типа double
//+++++++++++++++++++++++++++++++++++++++++++++++++
// Функция проверки на неравенство двух вещественных чисел типа double
bool NotEqualDoubles(const double d1, const double d2)
   {      
      return !EqualDoubles(d1, d2);
   }
// Конец функции проверки на неравенство двух вещественных чисел типа double
//+++++++++++++++++++++++++++++++++++++++++++++++++
// Функция проверки на меньшинство первого из двух вещественных чисел типа double
bool LessDoubles(const double d1, const double d2)
   {  
      if (NotEqualDoubles(d1, d2)&&(d1<d2))
      {
         return true;
      }
      return false;
   }
// Конец функции проверки на меньшинство первого из двух вещественных чисел типа double
//+++++++++++++++++++++++++++++++++++++++++++++++++
// Функция проверки на большинство первого из двух вещественных чисел типа double
bool GreaterDoubles(const double d1, const double d2)
   {  
      if (NotEqualDoubles(d1, d2)&&(d1>d2))
      {
         return true;
      }
      return false;
   }
// Конец функции проверки на большинство первого из двух вещественных чисел типа double
//+++++++++++++++++++++++++++++++++++++++++++++++++
// Функция проверки на меньшинство первого или равенство двух вещественных чисел типа double
bool LessEqualDoubles(const double d1, const double d2)
   {  
      if (LessDoubles(d1, d2)||EqualDoubles(d1, d2))
      {
         return true;
      }
      return false;
   }
// Конец функции проверки на меньшинство первого или равенство двух вещественных чисел типа double
//+++++++++++++++++++++++++++++++++++++++++++++++++
// Функция проверки на большинство первого или равенство двух вещественных чисел типа double
bool GreaterEqualDoubles(const double d1, const double d2)
   {  
      if (GreaterDoubles(d1, d2)||EqualDoubles(d1,d2))
      {
         return true;
      }
      return false;
   }
// Конец функции проверки на большинство первого или равенство двух вещественных чисел типа double

P.S. Se pré-cálculo==0 funciona novamente como habitualmente. Insecto flutuante?

 

Boa tarde!

Preciso de utilizar um indicador personalizado no módulo de sinais comerciais.

Para tal, tanto quanto sei, preciso de acrescentar um ponteiro a este objecto indicador na "colecção de indicadores(timeseries?)", como é feito no exemplo:

indicators.Add(GetPointer(m_MA)))

onde m_MA é um objecto da classe CiMA.

As funções iCustom e IndicatorCreate devolvem o valor inteiro de um cabo do indicador criado, mas eu preciso de um objecto deste indicador, tal como o entendo.

Por favor, aconselhar como sair desta situação?

Переход на новые рельсы: пользовательские индикаторы в MQL5
Переход на новые рельсы: пользовательские индикаторы в MQL5
  • 2009.11.23
  • Андрей
  • www.mql5.com
Я не буду перечислять все новые возможности и особенности нового терминала и языка. Их действительно много, и некоторые новинки вполне достойны освещения в отдельной статье. Вы не увидите здесь кода, написанного по принципам объектно-ориентированного программирования — это слишком серьезная тема для того, чтобы просто быть упомянутой в контексте как дополнительная вкусность для кодописателей. В этой статье остановимся подробней на индикаторах, их строении, отображении, видах, а также особенностях их написания по сравнению с MQL4.
 
lVlaxim:

Boa tarde!

Preciso de utilizar um indicador personalizado no módulo de sinais comerciais.

Para tal, tanto quanto sei, preciso de acrescentar um ponteiro a este objecto indicador na "colecção de indicadores(timeseries?)", como é feito no exemplo:

onde m_MA é um objecto da classe CiMA.

As funções iCustom e IndicatorCreate devolvem o valor inteiro de um cabo do indicador criado, mas eu preciso de um objecto deste indicador, tal como o entendo.

Por favor, aconselhar como sair desta situação?

Tanto quanto sei, devo escrever o meu próprio objecto indicador baseado no CiCustom (semelhante à forma como o CiMA é escrito).

Não posso aconselhar em detalhes, porque não trabalhei com indutores, mas penso que compreenderá ou as pessoas dir-lhe-ão a realização certa.

PS

A propósito, os criadores, acrescentem exemplos à secção sobre o CiCustom...

 
-Alexey-:

E é sugerido um método de comparação especial.

Mas depois segue-se logicamente que não é recomendado comparar números reais mesmo através de operações maiores/pequenas, porque tal operação, no sentido do acima exposto, só é correcta se for correctamente estabelecida de antemão, utilizando um método especial, que os valores a verificar não são iguais no sentido do zero máquina.

Talvez não tenha compreendido bem o ponto, mas se dois números reais estão a ser comparados, digamos, com a ajuda da operação "<" e os números reais a serem verificados são "iguais no sentido de máquina zero", a operação "<" irá simplesmente devolver falsos. O que significa "o primeiro número real não é menos do que o segundo número real".
 
lVlaxim:

Boa tarde!

Preciso de utilizar um indicador personalizado no módulo de sinais comerciais.

Para tal, tanto quanto sei, preciso de acrescentar um ponteiro a este objecto indicador na "colecção de indicadores(timeseries?)", como é feito no exemplo:

onde m_MA é um objecto da classe CiMA.

As funções iCustom e IndicatorCreate devolvem o valor inteiro de um cabo do indicador criado, mas eu preciso de um objecto deste indicador, tal como o entendo.

Pode por favor aconselhar como sair desta situação?

Por agora, tome este ficheiro como exemplo.

A classe CSignalCustomMACD é absolutamente idêntica ao CSignalMACD, excepto pelo facto de se basear na versão "personalizada" do indicador da entrega padrão.

Não se esqueça de acrescentar uma linha no código fonte do Expert Advisor:

#property tester_indicator "Examples\MACD.ex5"

caso contrário, não funcionará no testador.

Se não houver nenhum ficheiro MACD.ex5 na pasta Indicadores\Exemplos, o indicador deve ser compilado.

Um exemplo na ajuda será acrescentado num futuro próximo.

Arquivos anexados:
 
Yedelkin:
Talvez eu não compreenda bem o problema, mas se dois números reais forem comparados usando, digamos, a operação "<", e os números reais a serem verificados forem "iguais no sentido de máquina zero", então a operação "<" apenas retornará falsa, e ponto final. O que significaria "o primeiro número real não é inferior ao segundo número real".
Isto seria lógico, mas agora a operação ">" ("<" não verificou) pode voltar a ser verdadeiro para tais números "igual no sentido de máquina zero". O efeito foi detectado porque o resultado do cálculo numérico foi maior do que teoricamente possível como resultado deste efeito, mas depois de utilizar as funções especiais acima referidas, tornou-se verdadeiro. É por isso que proponho uma adição à ajuda.