Erros, bugs, perguntas - página 1786

 
fxsaber:
Se OnCalculate for substituído por OnTick, não ocorrem erros. O problema não é SymbolInfoTick, mas que os indicadores não estão devidamente definidos para não saltar.
Há quanto tempo estava a fazer medições? E o que é que a afinação de indicadores tem a ver com isso? A hora de chegada do tick actual é 10, a hora de chegada do tick anterior é 11. Há um erro na função que não devolve o valor actual. Concorda que o valor temporal actual não pode ser inferior ao anterior, não concorda?
 
Alexey Kozitsyn:
Quanto tempo demoraram as medições? E o que é que isto tem a ver com a definição dos indicadores? A hora de chegada do tick actual é 10, a hora de chegada do tick anterior é 11. Isto é um erro da função que não devolve o valor actual. Concorda que o valor temporal actual não pode ser inferior ao anterior, não concorda?

O SymbolInfoTick funciona de forma diferente nos indicadores do que nos EAs.

Num indicador, devolve sempre o tique que foi o iniciador da chamada da OnCalculate. E estas carraças iniciadoras no indicador não devem ser ignoradas - esta é a ideologia dos criadores. O problema está na formação da fila destas carraças.

Na EA, o SymbolInfoTick no OnTick não devolve o tick que iniciou a chamada do OnTick, mas faz um pedido completo para o estado actual.

Medido dez minutos em Si.

 
fxsaber:

O SymbolInfoTick funciona de forma diferente nos indicadores do que nos EAs.

Num indicador, devolve sempre o tique que foi o iniciador da chamada da OnCalculate. E estas carraças iniciadoras no indicador não devem ser ignoradas - esta é a ideologia dos criadores. O problema está na formação da fila destas carraças.

No Expert Advisor, SymbolInfoTick no OnTick não devolve o tick que iniciou a chamada do OnTick, mas faz um pedido completo para o estado actual.

Assim, a fila de carraças é inclinada. Em qualquer caso, precisamos de ordenar o trabalho em indicadores. Parece que a ênfase principal é colocada no teste de funções para trabalhar com Consultores Especialistas. Este é o primeiro. Segundo, tem a certeza de que SymbolInfoTick() é uma função síncrona? Terceiro, mesmo que SymbolInfoTick() esteja OK - ainda funciona melhor do que CopyTicks(), porque frequentemente devolve mais valores reais. De qualquer modo, como disse antes, há muitos erros com carraças. E os criadores são silenciosos...
 
fxsaber:

Medido dez minutos em Si.

Isso é muito pouco. Medir durante várias horas. Em vários instrumentos.
 
Alexey Kozitsyn:
Terceiro, mesmo que SymbolInfoTick() esteja OK - ainda funciona melhor do que CopyTicks(), porque frequentemente devolve valores mais actualizados.
Já apanhei situações em que CopyTicks devolveu dados mais recentes do que SymbolInfoTick chamado LATER. É por isso que utilizo duas funções ao mesmo tempo e selecciono a mais recente delas.
 
fxsaber:
Situações capturadas quando CopyTicks dá dados mais recentes do que SymbolInfoTick chamado LATER. É por isso que faço perguntas com duas funções ao mesmo tempo e selecciono o tick mais recente de entre elas.
Fiz o meu teste chamando SymbolInfoTick() primeiro e só depois CopyTicks(). De qualquer forma, acha que este comportamento é correcto e que eu não preciso de mudar nada?
 
fxsaber:

O SymbolInfoTick funciona de forma diferente nos indicadores do que nos EAs.

Num indicador, devolve sempre o tique que foi o iniciador da chamada da OnCalculate. E estas carraças iniciadoras no indicador não devem ser ignoradas - esta é a ideologia dos criadores. O problema está na formação da fila destas carraças.

No Expert Advisor, o SymbolInfoTick no OnTick não devolve o tick que iniciou a chamada do OnTick, mas faz um pedido completo para o estado actual.

Então seria lógico complementá-la com o

OnCalculate( ..., const MqlTick& tick );

com o carrapato que o causou, especialmente porque não custa nada.

E a função SymbolInfoTick() deve ser totalmente implementada em Indicator e Expert Advisor (devolverá os preços actuais, não os preços no momento da chamada daOnCalculate)

 

MT4 continua a surpreender com a imprevisibilidade )) Quem escreve a implementação das funções comerciais? MT4 construir 1045

Comecemos pela informação humorística, deve ser enviada ao Zadornov, porque ele está sempre a falar dos estúpidos americanos.

SÍMBOLO_VALOR_VALOR_DO_SISTEMA_COMERCIANTE

Valor SYMBOL_TRADE_TICK_VALUE_PROFIT

duplo

SIMBOLO_COMÉRCIO_VALOR_LUCRO

Não suportado

duplo

SÍMBOLO_TRADE_TICK_VALUE_LOSS

Não suportado

duplo


Entretanto SymbolInfoDouble(símbolo, SYMBOL_TRADE_TICK_VALUE, tickValue) produz um valor. MAS!!!!! Se atirar o indicador na tabela, não há problema no arranque. E se reiniciar o terminal, esta função retornará verdadeiro e zero tickValue na primeira chamada! Portanto, não se descontraia, Sr. Consultor Especialista em Desenvolvimento, tudo tem de ser verificado com as suas próprias mãos.

//переводит котировку в цену/1_лот в валюте депозита, например 0.00015 для EURUSD будет равно $15/лот
bool Quote2Price(double diff,double &price4lot,string symbol="EURUSD")
  {
   int dig=(int)MarketInfo(symbol,MODE_DIGITS);
   if(dig == 0)
      return(false); // symbol is none
   double tickSize = MarketInfo(symbol, MODE_TICKSIZE);   // пункт в валюте котировки (0,00001 для EURUSD на 5-знаке)
   //double tickValue = MarketInfo(symbol, MODE_TICKVALUE); // пункт в валюте депозита ($1 для EURUSD на 5-знаке)
   double tickValue;
   if(!SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE, tickValue)) // пункт в валюте депозита ($1 для EURUSD на 5-знаке)
      Print(__FUNCTION__, "  SymbolInfoDouble(...) returns false"); // всегда возвращается true!!
   Print("tickSize= ", tickSize, "  tickValue= ", tickValue);
   if(tickValue == 0.0) // исключений нет, терминал врет, надо тупо везде проверять на деление на ноль...
      return false;
   double price=diff/(tickSize/tickValue); // а то завалимся c  tickValue == 0
   price4lot=NormalizeDouble(price,2);
   return (true);
  }

Saída:

2017.02.07 16:08:25.332 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 1.0

2017.02.07 16:08:25.332 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 1.0

2017.02.07 16:08:24.515 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 0.0

2017.02.07 16:08:23.037 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 0.0

2017.02.07 16:08:23.037 ShowImportantParams EURUSD.e,M15: inicializado

2017.02.07 16:08:23.002 Indicador personalizado ShowImportantParams EURUSD.e,M15: carregado com sucesso


 
A100:

Então seria lógico complementar

OnCalculate( ..., const MqlTick& tick );

com o carrapato que lhe chamou, especialmente porque não custa nada

E a função SymbolInfoTick() deve ser totalmente funcional em Indicador e Expert Advisor (devolver preços correntes, não preços no momento da chamadaOnCalculate)

Seria até lógico adicionar o número de tick na fila actual.
 
fxsaber:
Faz mesmo sentido acrescentar um número de tick à fila actual.
Porque precisa de um número de tick? Só precisa de um fluxo correcto, que seja dado correctamente e que possa ser recebido correctamente.