Discussão do artigo "Interfaces Gráficas X: Gestão avançada de listas e tabelas. Otimização do código (build 7)" - página 3
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
Tol, sei que este não é o tópico correto, mas desde a última atualização....
Em geral: notei isso há muito tempo, mas estava esperando essa atualização sair (para o caso de ser corrigido, mas não...).
Se houver uma janela com um gráfico (CStandartChart) e uma janela localizada na parte superior do subgráfico, se a conexão com o servidor for perdida e depois restaurada, o gráfico de objeto ficará mais alto do que as outras janelas.
Seria necessário redesenhar a janela mais alta de alguma forma. É claro que você pode rastrear isso em seu programa CP, mas me parece que a biblioteca deveria fazer essas coisas.
(Ela fica muito lenta, mas isso provavelmente se deve à gravação em tempo real).
...
Se houver uma janela com um gráfico (CStandartChart) e uma janela localizada na parte superior do subgráfico, se a conexão com o servidor for perdida e depois restaurada, o objeto do gráfico ficará mais alto do que as outras janelas.
Seria necessário redesenhar a janela mais alta de alguma forma. É claro que você pode rastrear isso em seu programa CP, mas me parece que a biblioteca deveria fazer essas coisas.
(Ela fica muito lenta, mas isso provavelmente se deve à gravação em tempo real).
Ok, obrigado pela mensagem. Ainda não testei com a desconexão/reconexão. Verei o que posso fazer.
Por que os freios estão tão ruins? Qual programa é usado para gravar? Está muito lento. Parece que o processador está 100% carregado? Tentei gravar com o Fast Stone Capture e usar ativamente a GUI no aplicativo MQL. Tudo está normal, nada fica lento assim.
Ok, obrigado pela mensagem. Ainda não testei com a desconexão/reconexão. Verei o que posso fazer.
Qual é o motivo da lentidão? Com qual programa está sendo usado para gravar? Está muito lento. Parece que o processador está 100% carregado? Tentei gravar com o Fast Stone Capture e usar ativamente a GUI no aplicativo MQL. Tudo está bem, nada fica lento assim.
Artyom Trishkin:
...
Mas, a propósito, também estou diminuindo a velocidade sem a gravação em tempo real.
Há muitos objetos.
E o cronômetro precisa examinar muitos símbolos em busca de níveis de cruzamento de preço, que são diferentes para cada símbolo, e a lista de símbolos é dinâmica, e também precisa ser monitorada quanto a alterações.
...E com que frequência essas verificações são feitas?
Temporizador:
//| Temporizador|
//+------------------------------------------------------------------+
void CProgram::OnTimerEvent(void)
{
CWndEvents::OnTimerEvent();
//---
static int count=0;
if(count<500)
{
count+=TIMER_STEP_MSC;
return;
}
//--- Zerar o contador
count=0;
//--- Veja a mudança no Market Watch
if(IsChangeSymbolListInMW()) {
UpdateAllDataAndTables();
}
//--- Capturar o aparecimento de novas barras
bool need_update=false;
for(int i=0; i<ArraySize(m_array_new_bar); i++) {
if(m_array_new_bar[i].isNewBar()>0) {
string sy=m_array_new_bar[i].GetSymbol();
ENUM_TIMEFRAMES timeframe=m_array_new_bar[i].GetPeriod();
Print("Novo Bar".,sy," em ",GetNameTF(timeframe));
if(timeframe==PERIOD_D1) {
for(int j=0; j<ArraySize(m_array_symbols_new_sig_d1); j++) delete m_array_symbols_new_sig_d1[j].symbol_tick;
ZeroMemory(m_array_symbols_new_sig_d1);
}
if(timeframe==PERIOD_W1) {
for(int j=0; j<ArraySize(m_array_symbols_new_sig_w1); j++) delete m_array_symbols_new_sig_w1[j].symbol_tick;
ZeroMemory(m_array_symbols_new_sig_w1);
}
if(timeframe==PERIOD_MN1) {
for(int j=0; j<ArraySize(m_array_symbols_new_sig_mn); j++) delete m_array_symbols_new_sig_mn[j].symbol_tick;
ZeroMemory(m_array_symbols_new_sig_mn);
}
need_update=true;
}
}
if(need_update) {
UpdateAllDataAndTables();
}
//--- Alterando os textos de valores na janela principal
short row=(short)m_table_base_symbol_list.SelectedItem();
ChangeTextData(row);
//--- Procurando por critérios de notificação D1, W1, MN1
GetNotify(m_sorted_struct_symbols_d1,m_array_symbols_new_sig_d1,PERIOD_D1);
GetNotify(m_sorted_struct_symbols_w1,m_array_symbols_new_sig_w1,PERIOD_W1);
GetNotify(m_sorted_struct_symbols_mn,m_array_symbols_new_sig_mn,PERIOD_MN1);
//--- Redesenhar o gráfico
m_chart.Redraw();
}
//+------------------------------------------------------------------+
Temporizador:
É necessário fazer esse tipo de verificação de condição exatamente no temporizador?
Se for no cronômetro, por que com tanta frequência?
Você pode tentar reduzir a etapa e definir um intervalo diferente para cada grupo de condições. Eu adicionei a classe CTimeCounter para essa finalidade. Leia o artigo novamente para entender como usá-la. Seção: Aplicação para teste de itens
É necessário verificar condições desse tipo no cronômetro?
Se no cronômetro, por que com tanta frequência?
Você pode tentar reduzir a etapa e definir um intervalo diferente para cada grupo de condições. Eu adicionei a classe CTimeCounter para essa finalidade. Leia o artigo novamente para entender como usá-la. Seção: aplicativo de teste de item
Sim, já estou pensando nisso.
A verificação de uma nova barra pode ser feita com menos frequência, é claro, pois não é crítica. Mas a verificação dos níveis de cruzamento de preços em alguns símbolos (a lista deles muda dinamicamente, respectivamente, e as instâncias da classe de trabalho com ticks são adicionadas/removidas dinamicamente) deve ser feita com frequência suficiente para poder determinar os fatos dos cruzamentos a tempo.
Quando li que agora é possível ter um intervalo diferente para eventos diferentes, pensei imediatamente nessa necessidade.
... Mas a verificação de cruzamento por preços de níveis em alguns símbolos (a lista deles muda dinamicamente, respectivamente, e as instâncias da classe de trabalho com ticks são adicionadas/removidas dinamicamente) deve ser feita com frequência suficiente para poder determinar os fatos dos cruzamentos no tempo.
Portanto, se você trabalha com ticks, é melhor fazer essas verificações em OnTick(). Por que o cronômetro deve ser ajustado a cada 16 ms?
É uma moeda múltipla. O que é OnTick()?
Por meio de eventos, então. Mas não por meio de um cronômetro com essa frequência. Em geral, os freios estão do seu lado, não do lado da biblioteca ou da gravação de vídeo. Não tenho mais perguntas.