Erros, bugs, perguntas - página 1802
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Está a sugerir que o faça em cada carraça?
Apoio a sincronização em cada disparo do OnBookEvent() :(
Sem perguntas aqui, a questão é que, para além disto, sugere-se que se chame cada vez a função CopyRates()..... Isto parece-me ser uma birra...
:)
{
if(symbol == Symbol())
{
GetBars(Symbol(), time_frame);
}
}
Foi assim que me ensinaram em SD
:)
{
if(symbol == Symbol())
{
GetBars(Symbol(), time_frame);
}
}
Se quiser dizer ou mostrar alguma coisa, por favor mostre-a devidamente... Não quero adivinhar que função tem aqui e o que ela faz.
Adicionado:
Ensinou-me? E não deu uma implementação?
Se quiser dizer ou mostrar alguma coisa, por favor mostre-a devidamente... Não quero adivinhar que função tem aqui e o que ela faz.
Adicionado:
Ensinou-me? E não deu uma implementação?
O que é normal?
Disseram que em dois minutos os dados são descarregados e para manter a sincronização
disseram-me para ligar aos bares.
//| Custom indicator Get bars function |
//+------------------------------------------------------------------+
int GetBars(string symbol, ENUM_TIMEFRAMES period)
{
if(!IsStopped())
{
if(SymbolIsSynchronized(symbol))
{
if(bool(SeriesInfoInteger(symbol, period, SERIES_SYNCHRONIZED)))
{
int a_bars = Bars(symbol, period);
if(a_bars > 0)
{
return(a_bars);
}
else
{
return(GetLocalData(symbol, period));
}
}
else
{
return(GetLocalData(symbol, period));
}
}
else
{
return(LoadServerData(symbol, period));
}
}
return(0);
}
Aqui está
// Custom indicator Check timer function |
//+------------------------------------------------------------------+
bool CheckTimer(const ulong start_value, const ulong per_value)
{
ulong end_value = GetMicrosecondCount();
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 local data function |
//+------------------------------------------------------------------+
int GetLocalData(const string a_symbol, ENUM_TIMEFRAMES a_period)
{
long first_date;
int fail_cnt = 0;
while((fail_cnt < 3) && !IsStopped())
{
first_date = long( SeriesInfoInteger(a_symbol, PERIOD_M1, SERIES_TERMINAL_FIRSTDATE));
if(first_date > 0)
{
int f_cnt = 0;
datetime times[1];
long a_bars = 0;
while((f_cnt < 5) && !IsStopped())
{
if(bool(SeriesInfoInteger(a_symbol, PERIOD_M1, SERIES_BARS_COUNT, a_bars)))
{
if ( a_bars > 0 )
{
if( bool(SeriesInfoInteger(a_symbol, a_period, SERIES_BARS_COUNT, a_bars)))
if(a_bars > 0) return(int(a_bars));
}
}
else
{
//--- force timeseries build
CopyTime(a_symbol, a_period, 0, 1, times);
ulong start_tick = GetMicrosecondCount();
while(!CheckTimer(start_tick, 5000))
{
f_cnt--;
f_cnt++;
}
}
f_cnt++;
}
}
else
{
ulong start_tick = GetMicrosecondCount();
while(!CheckTimer(start_tick, 5000))
{
fail_cnt--;
fail_cnt++;
}
}
//---
fail_cnt++;
}
return(0);
}
//+------------------------------------------------------------------+
//| 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))
{
return(GetLocalData(a_symbol, period));
}
}
else
{
ulong start_tick = GetMicrosecondCount();
while(!CheckTimer(start_tick, 20000))
{
fail_cnt--;
fail_cnt++;
}
}
fail_cnt++;
}
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator Get bars function |
//+------------------------------------------------------------------+
int GetBars(string symbol, ENUM_TIMEFRAMES period)
{
if(!IsStopped())
{
if(SymbolIsSynchronized(symbol))
{
if(bool(SeriesInfoInteger(symbol, period, SERIES_SYNCHRONIZED)))
{
int a_bars = Bars(symbol, period);
if(a_bars > 0)
{
return(a_bars);
}
else
{
return(GetLocalData(symbol, period));
}
}
else
{
return(GetLocalData(symbol, period));
}
}
else
{
return(LoadServerData(symbol, period));
}
}
return(0);
}
Ao ligar para GetBars, estamos a fazer o backup da sincronização ou a tentar recuperar dados
O que é normal?
Disseram que após dois minutos os dados são descarregados e para os manter em sincronia
disseram para chamar Bars.
//| Custom indicator Get bars function |
//+------------------------------------------------------------------+
int GetBars(string symbol, ENUM_TIMEFRAMES period)
{
if(!IsStopped())
{
if(SymbolIsSynchronized(symbol))
{
if(bool(SeriesInfoInteger(symbol, period, SERIES_SYNCHRONIZED)))
{
int a_bars = Bars(symbol, period);
if(a_bars > 0)
{
return(a_bars);
}
else
{
return(GetLocalData(symbol, period));
}
}
else
{
return(GetLocalData(symbol, period));
}
}
else
{
return(LoadServerData(symbol, period));
}
}
return(0);
}
Não são estes os análogos?
if(bool(SeriesInfoInteger(symbol, period, SERIES_SYNCHRONIZED)))
Sim, pareceu-me que Bars() retorna 0 se não houver sincronização... Terei de fazer um teste...
Está a sugerir que o faça em todas as carraças?
Enquanto o símbolo for seleccionado na visão geral do mercado e o histórico do símbolo for mantido pelo Consultor Especialista, então é mantido em sincronia. Segurar pelo consultor especializado significa que precisa de aceder a este histórico pelo menos uma vez a cada 2 minutos, por exemplo, copiando uma barra. Se o histórico estiver sincronizado, não é gasto tempo a copiar uma barra - apenas alguns ciclos de processamento. Ou, como acabou de ser dito aqui, pedir o número de barras, também alguns ciclos de relógio
Porquê? Uma única acção é suficiente.
Enquanto o símbolo for seleccionado na revisão do mercado e o histórico do símbolo for mantido pelo Consultor Especialista, é mantido em sincronia. A detenção de Expert Advisor significa que precisa de aceder a este histórico pelo menos uma vez a cada 2 minutos, por exemplo, copiando uma barra. Se o histórico estiver sincronizado, então não é gasto tempo a copiar uma barra - apenas alguns relógios de processador.
Os indicadores incluem um intervalo de 2 minutos?
Sim, e verificando o facto da sincronização, a sincronização também será realizada?
Os indicadores incluem um intervalo de 2 minutos?
Sim, a verificação da sincronização também irá manter a sincronização?
A sincronização não é realizada através da verificação do facto da sincronização.