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.
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!
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.
O, como se acaba de decir aquí, pedir el número de barras, también algunos ciclos.
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.
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_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.
Por favor, comparta su bicicleta: una función bool que le diga si un símbolo está listo para negociar o no.
{
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);
}
if (Pause >= 0)
Sleep(Pause); // Если только что произошло добавление символа в Обзор рынка, нужно дождаться поступления данных в Marketwatch.
¿Y si está en un indicador?
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?
De ahí las piernas.
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?
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?