Errores, fallos, preguntas - página 1803

 
Slawa:
O, como se acaba de decir aquí, pedir el número de barras, también algunos ciclos.
Si hay una llamada de la función Bars() después de un largo tiempo de inactividad, el inicio del indicador - ¿es similar a la comprobación de SymbolIsSynchronized()?
 
Slawa:
Esto también se aplica a los indicadores. Cree un temporizador de 1 minuto y pida el número de barras de todas las series temporales de interés.

La comprobación del hecho de la sincronización no mantiene la sincronización.
Sería bueno añadir esto a la documentación...
 
Si deja sólo los símbolos MOEX en el Market Watch en Metaquotes-Demo, TimeCurrent se retrasará 15 minutos. En cuanto se añade un solo símbolo FOREX, TimeCurrent salta hacia delante 15 minutos de una vez.
 

Queridos desarrolladores Una vez más pido que se añada el tiempo en ms para los valores de sentimiento(SYMBOL_SESSION_...) y tumbler( OnBookEvent()) lo antes posible. ¡Da la oportunidad de hacer la sincronización de todos los datos disponibles!

 

Metaquotes-Demo, símbolo DIG-20170330

SymbolInfoDouble(Symb,::SYMBOL_ASK) = 29006.0
SymbolInfoDouble(Symb,SYMBOL_SESSION_PRICE_LIMIT_MIN) = 29528.0
(ENUM_SYMBOL_TRADE_MODE)SymbolInfoInteger(Symb,SYMBOL_TRADE_MODE) = SYMBOL_TRADE_MODE_FULL (4)

Error en SYMBOL_SESSION_PRICE_LIMIT_MIN: por encima de Asc - no se puede establecer BuyLimit.

 
fxsaber:

Por favor, comparta su bicicleta: una función bool que le diga si un símbolo está listo para negociar o no.

ENUM_DAY_OF_WEEK GetDayOfWeek( const datetime time )
{
  MqlDateTime sTime = {0};

  TimeToStruct(time, sTime);
  
  return((ENUM_DAY_OF_WEEK)sTime.day_of_week);
}

// true - находимся в торговой сессии
bool SessionTrade( string Symb = NULL )
{  
  datetime TimeNow = TimeTradeServer();
  
  const ENUM_DAY_OF_WEEK DayOfWeek = GetDayOfWeek(TimeNow);
  
  TimeNow %= 24 * 60 * 60;
  
  if ((Symb == NULL) || (Symb == ""))
    Symb = Symbol();  
  
  bool Res = false;
  datetime From, To;    

  for (int i = 0; SymbolInfoSessionTrade(Symb, DayOfWeek, i, From, To) && (!Res); i++)
    Res = ((From <= TimeNow) && (TimeNow < To));
    
  return(Res);
}

// Возвращает true, если символ торгуемый. Иначе - false.
bool SymbolTrade( string Symb = NULL, const int Pause = -1 )
{
  MqlTick Tick;
  
  if ((Symb == NULL) || (Symb == ""))
    Symb = Symbol();
    
  if (Pause >= 0)
    Sleep(Pause); // Если только что произошло добавление символа в Обзор рынка, нужно дождаться поступления данных в Marketwatch.
  
  return(SymbolInfoTick(Symb, Tick) ? ((Tick.bid != 0) && (Tick.ask != 0) && SessionTrade(Symb) &&
         ((ENUM_SYMBOL_TRADE_MODE)SymbolInfoInteger(Symb, SYMBOL_TRADE_MODE) == SYMBOL_TRADE_MODE_FULL)) : false);
}
 
fxsaber:
   
  if (Pause >= 0)
    Sleep(Pause); // Если только что произошло добавление символа в Обзор рынка, нужно дождаться поступления данных в Marketwatch.
   
¿Y si está en un indicador?
 
Artyom Trishkin:
¿Y si está en un indicador?
De ahí que las piernas

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

fxsaber, 2017.02.14 12:31

Inmediatamente después de SymbolSelect(true) solicito los precios y son cero. Con _LastError == 0, SymbolInfoTick == true.

¿Cómo sé que los precios de un nuevo símbolo para Marketwatch han sido entregados a Marketwatch?

Por lo tanto, si no se hizo SymbolSelect(true), y no establecimos Pause específicamente, entonces no habrá ningún deslizamiento.
 
fxsaber:
De ahí las piernas.
Así que si SymbolSelect(true) no se hace y no se pone específicamente Pause, no habrá ningún deslizamiento.
Sinceramente, no lo entiendo. Me preguntaba: ¿cómo se sabe si un símbolo está listo en un indicador? Sleep() no funciona en los indicadores.
Si el indicador traza algunos datos estadísticos sobre símbolos que no se conocen de antemano, cuando se selecciona el siguiente símbolo del panel, a menudo no se pueden obtener los datos correspondientes de inmediato, y la tabla contendrá información falsa... ¿Cómo puedo estar seguro de que los datos recibidos del símbolo son correctos y en cantidades suficientes para obtener otros cálculos correctos?
 
Artyom Trishkin:
Sinceramente, no lo entiendo. Me preguntaba: ¿cómo se sabe si un símbolo está listo en un indicador? Sleep() no funciona en los indicadores.
Si el indicador muestra en la tabla algunos datos estadísticos sobre símbolos que no se conocen de antemano, entonces cuando se selecciona el siguiente símbolo del panel, a menudo no se pueden obtener inmediatamente los datos correspondientes, y la tabla muestra información falsa... ¿Cómo puedo estar seguro, para los cálculos posteriores, de que los datos obtenidos del símbolo son correctos, y en cantidades suficientes para obtener otros cálculos correctos?
Lasuspensión sólo es necesaria cuando el símbolo no está en la vigilancia del mercado. Para todos los símbolos que están en la Vigilancia del Mercado antes (y durante) el inicio del indicador, no es necesario ningún deslizamiento.