Erros, bugs, perguntas - página 1786
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
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.
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.
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.
Medido dez minutos em Si.
Terceiro, mesmo que SymbolInfoTick() esteja OK - ainda funciona melhor do que CopyTicks(), porque frequentemente devolve valores mais actualizados.
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.
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
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.
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
Então seria lógico complementar
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)
Faz mesmo sentido acrescentar um número de tick à fila actual.