¿Cómo puedo abrir una orden de mercado correctamente? - página 7

 
prostotrader:

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.


 
Alexey Kozitsyn:

Por cierto, es extraño que llames a Sleep() desde el indicador, ya que está prohibido:


No sé qué es Sleep() en absoluto
 
prostotrader:

¡Alexei!

Un instrumento bastante líquido :)

2016.12.14 22:01:41.431 Trades  'xxxxx': cancel order #49931802 sell limit 1.00 GOLD-9.17 at 1190.2 placed for execution in 64926.078 ms

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 hago trading desde hace mucho tiempo y sólo uso EAs. Pero sobre todo en MT4. He estado operando en MT5 sólo con Asesores Expertos usando Límites y no hubo problemas. Yo también estoy en contra de las pausas adicionales en los EAs, sobre todo si es un scalper o un pipsitter, simplemente se puede perder una entrada.
 
prostotrader:
No sé qué es Sleep() en absoluto
Entonces es extraño que tú y yo estemos discutiendo sobre las pausas ahora...
 
Alexey Kozitsyn:
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 su aplicación en mi código.
 
prostotrader:
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?
 
Alexey Kozitsyn:
¿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().

 
Gennady Mazur:
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.
Ya has respondido a tu propia pregunta. Tenemos que seguir el orden.
 
prostotrader:

¡Alexei!

Un instrumento bastante líquido :)

2016.12.14 22:01:41.431 Trades  'xxxxx': cancel order #49931802 sell limit 1.00 GOLD-9.17 at 1190.2 placed for execution in 64926.078 ms

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 :(

¿Y qué pasa si no tienes uno? Tal vez el algoritmo allí es tal que no es necesario.
 
Gennady Mazur:
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.
Este no es el caso cuando se necesita una pausa.
Razón de la queja: