Errores, fallos, preguntas - página 1786
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Si se sustituye OnCalculate por OnTick, no se producen errores. El problema no es el SymbolInfoTick, sino que los indicadores no están bien configurados para que no haya saltos.
¿Cuánto tiempo duraron las mediciones? ¿Y qué tiene que ver esto con la fijación de los indicadores? La hora de llegada del tic actual es 10, la hora de llegada del tic anterior es 11. Se trata de un error de la función que devuelve un valor distinto al actual. Estás de acuerdo en que el valor temporal actual no puede ser menor que el anterior, ¿no?
SymbolInfoTick funciona de forma diferente en los indicadores que en los EAs.
En un indicador, siempre devuelve el tick que fue el iniciador de la llamada de OnCalculate. Y estos ticks de iniciación en el indicador no deben ser omitidos - esta es la ideología de los desarrolladores. El problema está en la formación de la cola de estas garrapatas.
En el EA, SymbolInfoTick en OnTick no devuelve el tick que inició la llamada de OnTick, sino que hace una petición completa del estado actual.
Medido diez minutos en Si.
SymbolInfoTick funciona de forma diferente en los indicadores que en los EAs.
En un indicador, siempre devuelve el tick que fue el iniciador de la llamada de OnCalculate. Y estos ticks de iniciación en el indicador no deben ser omitidos - esta es la ideología de los desarrolladores. El problema está en la formación de la cola de estas garrapatas.
En el Asesor Experto, SymbolInfoTick en OnTick no devuelve el tick que inició la llamada de OnTick, sino que hace una petición completa del estado actual.
Medido diez minutos en Si.
En tercer lugar, aunque SymbolInfoTick() esté bien, sigue funcionando mejor que CopyTicks(), porque suele devolver valores más actualizados.
Se han detectado situaciones en las que CopyTicks daba datos más recientes que SymbolInfoTick llamado LATER. Por eso hago la consulta con dos funciones a la vez y selecciono el tick más reciente de ellas.
SymbolInfoTick funciona de forma diferente en los indicadores que en los EAs.
En un indicador, siempre devuelve el tick que fue el iniciador de la llamada de OnCalculate. Y estos ticks de iniciación en el indicador no deben ser omitidos - esta es la ideología de los desarrolladores. El problema está en la formación de la cola de estas garrapatas.
En el Asesor Experto, el SymbolInfoTick en OnTick no devuelve el tick que inició la llamada de OnTick, sino que hace una petición completa del estado actual.
Entonces sería lógico complementarlo con el
con la garrapata que lo provocó, sobre todo porque no cuesta nada.
Y la función SymbolInfoTick() debería estar totalmente implementada en el Indicador y en el Asesor Experto (devolverá los precios actuales, no los precios en el momento de la llamada deOnCalculate)
MT4 sigue sorprendiendo con su imprevisibilidad )) ¿Quién redacta la aplicación de las funciones comerciales? MT4 build 1045
Empecemos con la información humorística, hay que enviársela a Zadornov, porque siempre está hablando de los estúpidos americanos.
SÍMBOLO_COMERCIO_VALOR_DE_TICK
Valor SYMBOL_TRADE_TICK_VALUE_PROFIT
doble
SYMBOL_TRADE_TICK_VALUE_PROFIT
No se admite
doble
SIMBOLO_COMERCIO_VALOR_DE_PUNTUALIDAD_PÉRDIDA
No se admite
doble
Mientras tanto SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE, tickValue) produce un valor. ¡¡¡¡¡BUT!!!!! Si tiras el indicador en el gráfico, está bien al inicio. ¡Y si reinicias el terminal, esta función devolverá true y cero tickValue en la primera llamada! Así que no se relaje, señor desarrollador de asesores expertos, todo tiene que ser comprobado con sus propias manos.
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);
}
Salir:
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: cargado con éxito
Entonces sería lógico complementar
con la garrapata que lo ha llamado, sobre todo porque no cuesta nada
Y la función SymbolInfoTick() debería ser totalmente funcional en el Indicador y el Asesor Experto (devolver los precios actuales, no los precios en el momento de la llamadaOnCalculate)
Incluso tiene sentido añadir un número de tic a la cola actual.