Erros, bugs, perguntas - página 934

 
uncleVic:
É assim que as coisas são.

Muito obrigado por toda a vossa ajuda! Tudo é simples e agradável )

Inicialmente tentei o Mapa de Eventos mas não o compreendi até ao fim, por isso decidi sobrecarregar o OnEvent() eu próprio...

P.S. Seria bom se em qualquer código que venha com o terminal, ou na sua documentação houvesse alguns exemplos de utilização do mapa de eventos (de ON_EVENT a ON_EXTERNAL_EVENT) - seria muito mais fácil de os compreender. Existem apenas exemplos de ON_EVENT - Peritos/Exemplos/Controlos/ControlosDialog.mq5 e Indicadores/Exemplos/Painéis/PanelDialog.mq5 - pelo menos não encontrei outros exemplos. E uma pesquisa no site, excepto por algumas palavras no artigo, não resultou em nada.

 
Rone:

Muito obrigado por toda a vossa ajuda! Tudo é simples e agradável )

Originalmente e experimentei o Mapa de Eventos, mas não o compreendi completamente, por isso decidi eu próprio sobrecarregar o OnEvent()...

P.S. Seria bom se em qualquer código que venha com o terminal, ou na sua documentação houvesse alguns exemplos de utilização do mapa de eventos (de ON_EVENT a ON_EXTERNAL_EVENT) - seria muito mais fácil de os compreender. Existem apenas exemplos de ON_EVENT - Peritos/Exemplos/Controlos/ControlosDialog.mq5 e Indicadores/Exemplos/Painéis/PanelDialog.mq5 - pelo menos não encontrei outros exemplos. E uma pesquisa no website, excepto por algumas palavras no artigo, não produziu nada.


1. Por favor. Por favor, não hesite em contactar-me.

2. Para acrescentar.

 
CTrade::OrderSend: comprar paragem 0,94 USDCHF a 0,93366 sl: 0,93016 tp: 0,94816 [volume inválido]

Porque é que recebi um volume de lote 0,94 de erro no USDCHF ?

Este é um volume inválido ou eu não tinha dinheiro suficiente para colocar este volume?

 
Konstantin83:
CTrade::OrderSend: comprar paragem 0,94 USDCHF a 0,93366 sl: 0,93016 tp: 0,94816 [volume inválido]

Porque é que recebi um volume de lote 0,94 de erro no USDCHF?

Este é um volume inválido ou eu não tinha dinheiro suficiente para colocar este volume?

Qual é o passo do volume nas definições das ferramentas? 0,10 ou 0,01 do lote? Se for 0,10, então tudo está correcto - volume inválido
 
Renat:
Qual é o passo do volume nas definições das ferramentas? 0,10 ou 0,01 lote? Se 0,10, está correcto - volume errado

servidor de demonstração a partir de metaquotas, tem 0,01 passo.

o lote é verificado



CSymbolInfo       Exp_Symbol_Info;              // symbol info object

...
double CBaseTrade::GetCorrectLot(double pLot)
 {
      double   dLot   = pLot;
      double   dLotMin   = Exp_Symbol_Info.LotsMin();
      double   dLotMax   = Exp_Symbol_Info.LotsMax();
      double   dLotStep  = Exp_Symbol_Info.LotsStep();
    
      dLot=dLotStep*NormalizeDouble(pLot/dLotStep, 0);
 
      if(dLot < dLotMin) dLot=dLotMin;
 
      if(dLot > dLotMax && dLotMax !=0) dLot=dLotMax;

 
  return(dLot);
 }

 

Imprimir o valor do volume para 4-8 dígitos, por favor.

Um erro claro de não arredondamento para o segundo dígito aqui:

dLot=dLotStep*NormalizeDouble(pLot/dLotStep, 0);
 
Renat:

Imprimir o valor do volume para 4-8 dígitos, por favor.

Um erro claro de não arredondamento para o segundo dígito aqui:

sim, mas porque é que não há arredondamento?

Digamos que o passo do lote é 0.01

Lote de entrada 2.111

resultado = 0,01 * NormalizeDouble(2.111/0,01)=0,01*NormalizeDouble(211,1)=0,01*211=2,11

Ou há corretores onde o incremento de lote é de 0,25, não se pode simplesmente arredondar o resultado para o 2º sinal.

Suponha que a etapa de lote é 0,25

Lote de entrada 2.3

Resultado = 0,25 * NormalizeDouble(2,3/0,25)=0,25*NormalizeDouble(9,2)=0,25*9=2,25


Não há problema no testador. Recebi hoje este erro apenas algumas vezes na demonstração.

A etapa de volume da classe CSymbolInfo está normalizada?

 

Aconselhe por favor!

Como mudar a cor de fundo dos pares de moedas na visão geral do mercado

Ou remover a cor por completo!

Obrigado de antemão!

 
Konstantin83: resultado = 0,01 * NormalizeDouble(2.111/0,01)=0,01*NormalizeDouble(211,1)=0,01*211=2,11
O produto de dois números duplos é um número não normalizado. 0.01*NormalizeDouble(211.1)=0.01*211.***********=2.11*************
 
Konstantin83:

Sim, mas porque não é arredondado?

Porque o resultado das operações de tapete dos valores mais elevados normalizados não é um número normalizado.

É por isso que é um lugar de erro.

Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
Преобразование данных / NormalizeDouble - Документация по MQL5