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
Por cierto, es extraño que llames a Sleep() desde un indicador, porque está prohibido:
La función Sleep() no puede ser llamada desde los indicadores personalizados, ya que los indicadores se ejecutan en el hilo de la interfaz y no deben ralentizarlo. La función tiene incorporada la comprobación del estado de la bandera de parada del experto cada 0,1 segundos.
Por cierto, es extraño que llames a Sleep() desde el indicador, ya que está prohibido:
¡Alexei!
Un instrumento bastante líquido :)
No se trata del instrumento (liquidez), sino del retraso, que puede darse en CUALQUIER instrumento.
Llevo casi 4 años operando activamente con EAs.
No tengo ninguna pausa en ninguno de mis EAs (excepto la pausa para esperar a que se descarguen los datos del servidor en INDICADORES),
Si hace una pausa, es una señal segura de que el algoritmo de su EA no está funcionando correctamente :(
No sé qué es Sleep() en absoluto
Entonces es extraño que tú y yo estemos discutiendo sobre las pausas ahora...
No en el sentido de lo que hace Sleep(), sino en el sentido de utilizarlo en mi código.
¿Cómo se implementa una pausa en su indicador?
// Custom indicator Check timer function |
//+------------------------------------------------------------------+
bool CheckTimer(const uint start_value, const uint per_value)
{
uint end_value = GetTickCount();
if(end_value < start_value)
{
if((start_value - end_value) >= per_value) return(true);
}
else
{
if((end_value - start_value) >= per_value) return(true);
}
return(false);
}
//+------------------------------------------------------------------+
//| Custom indicator Get server data function |
//+------------------------------------------------------------------+
int LoadServerData(const string a_symbol, ENUM_TIMEFRAMES period)
{
int fail_cnt = 0;
//---
while((fail_cnt < 5) && !IsStopped())
{
long first_date = long(SeriesInfoInteger(a_symbol, PERIOD_M1, SERIES_SERVER_FIRSTDATE));
//---
if(first_date > 0)
{
if(SymbolIsSynchronized(a_symbol))
{
// Print( "LoadServerData: Первая дата на сервере есть. Пробуем получить локальные данные..." );
return(GetLocalData(a_symbol, period));
}
}
else
{
uint start_tick = GetTickCount();
//---
while(!CheckTimer(start_tick, 10))
{
fail_cnt--;
fail_cnt++;
}
}
fail_cnt++;
}
// Print( "LoadServerData: Первой даты на сервере нет!" );
return(0);
}
Este es un ejemplo antiguo.
Como el error de GetTickCount es bastante alto (hasta 16 ms), ahora uso GetMicrosecondCount().
En principio lo hago, pero en Forts la orden suele ser aceptada con éxito...pero en el siguiente tick aún no hay posición...
Aquí es donde la apertura adicional puede deslizarse .... resolver parcialmente el problema de esta manera, si la orden es aceptada, aumento la variable Int, y después del aumento las condiciones de apertura son ligeramente diferentes, por lo que no hay una nueva apertura, pero.... si la orden no es aceptada la variable no aumenta, pero aquí está el truco... Me equivoqué de estado y empezaron a aparecer pedidos adicionales.
¡Alexei!
Un instrumento bastante líquido :)
No se trata del instrumento (liquidez), sino del retraso, que puede darse en CUALQUIER instrumento.
Llevo casi 4 años operando activamente con EAs.
No tengo ninguna pausa en ninguno de mis EAs (excepto la pausa para esperar a que se descarguen los datos del servidor en INDICADORES),
Si hace una pausa, es una señal segura de que el algoritmo de su EA no está funcionando correctamente :(
Yo también he estado operando durante bastante tiempo y sólo con la ayuda de EAs. Pero sobre todo en MT4. He estado operando en MT5 sólo con Asesores Expertos usando Límites y no hubo problemas. Si soy un scalper o un pipsder, no me gustan las pausas en los Asesores Expertos, además solo me falta una entrada.