Erros, bugs, perguntas - página 1803

 
Slawa:
Ou, como acabou de ser dito aqui, pedir o número de barras, também alguns ciclos.
Se houver uma chamada da função Bars() após um longo tempo de ociosidade, o início do indicador - é semelhante a verificar SymbolIsSynchronized()?
 
Slawa:
Isto também se aplica aos indicadores. Criar um temporizador de 1 minuto e pedir o número de barras de todas as séries cronológicas de interesse.

A verificação do facto de o momento não se aplica ao momento.
Seria bom acrescentar isto à documentação...
 
Se deixar apenas símbolos MOEX no Market Watch em Metaquotes-Demo, o TimeCurrent irá atrasar-se 15 minutos. Assim que é adicionado um único símbolo FOREX, o TimeCurrent salta 15 minutos de uma só vez.
 

Caros programadores! Mais uma vez peço para adicionar tempo em ms para valores de sentimento(SYMBOL_SESSION_...) e tumbler( OnBookEvent()) o mais rápido possível. Dê uma oportunidade de fazer a sincronização de todos os dados disponíveis!

 

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)

Erro em SYMBOL_SESSION_PRICE_LIMIT_MIN: acima Ask - no BuyLimit pode ser definido.

 
fxsaber:

Por favor partilhe a sua bicicleta: uma função bool que lhe diz se um símbolo está ou não pronto a ser comercializado.

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.
   
E se estiver num indicador?
 
Artyom Trishkin:
E se estiver num indicador?
Daí as pernas

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Insectos, insectos, perguntas

fxsaber, 2017.02.14 12:31

Imediatamente após SymbolSelect(true), solicito preços e estes são zero. Com _LastError == 0, SymbolInfoTick == verdadeiro.

Como sei que os preços do novo símbolo do Marketwatch foram entregues à Marketwatch?

Portanto, se a SymbolSelect(true) não foi feita, e não estabelecemos Pausa especificamente, então não haverá deslize.
 
fxsaber:
Daí as pernas.
Portanto, se o SymbolSelect(true) não tiver sido feito e não se definir especificamente a Pausa, não haverá deslize.
Sinceramente, não estou a perceber. Estava a pensar: como é que sabe se um símbolo está pronto num indicador? Sleep() não funciona em indicadores.
Se o indicador traça alguns dados estatísticos sobre símbolos que não são conhecidos de antemão, ao seleccionar o próximo símbolo do painel, muitas vezes não pode obter os dados para ele de uma só vez, e a tabela conterá informações falsas... Como posso ter a certeza de que os dados recebidos do símbolo estão correctos e em quantidades suficientes para obter mais cálculos correctos?
 
Artyom Trishkin:
Sinceramente, não estou a perceber. Estava a pensar: como é que sabe se um símbolo está pronto num indicador? Sleep() não funciona em indicadores.
Se o indicador mostrar na tabela alguns dados estatísticos sobre símbolos que não são conhecidos antecipadamente, então quando selecciona o próximo símbolo do painel, muitas vezes não pode obter imediatamente os dados para ele, e a tabela mostra informações falsas... Como posso ter a certeza, para mais cálculos, que os dados obtidos a partir do símbolo estão correctos, e em quantidades suficientes para obter mais cálculos correctos?
Osono só é necessário quando o símbolo não se encontra no Market Watch. Para todos os símbolos que estão no Market Watch antes (e durante) o início do indicador, não são necessários deslizamentos.