Centro de História atualizado - histórico gratuito de cotações minúsculas desde 1999 - página 8

 
Rosh:
Infelizmente, coloque as "barras máximas no gráfico" (cerca de 3 milhões para hoje) e você pode assistir a qualquer data.
ou seja, não é possível estabelecer um segmento arbitrário?
Por exemplo, somente agosto de 2005?
 
Não, e por quê. O artigo "Segredos do Terminal de Clientes MetaTrader 4" descreve algumas coisas úteis que tornam a vida mais fácil, aqui está uma delas:

 
Você já quis remover o limite do número de barras na história e na janela em geral? Ou fazer uma caixa de seleção como ilimitada. Isso faria com que os usuários não tivessem nenhuma dúvida sobre isso.
Você pode substituir a limitação do número de barras na janela por uma lógica mais inteligente de trocar o histórico a partir de um arquivo. Haverá um buffer para exibição se mudarmos os dados para fora deste buffer, então neste buffer é carregado um arquivo de dados do novo histórico em vez dos anteriores - ele pode ficar um pouco atrasado, é claro. Embora se todo o histórico for carregado ou como rolagem na profundidade do histórico possa ser colocado em um buffer criado pela VirtualAlloc neste caso, a memória será carregada a partir do arquivo swap dos dados aos quais o terminal acessa no momento, ao invés dos antigos que são apagados da memória e permanecem no arquivo swap - o mesmo buffer, mas no nível do sistema operacional.
 
elritmo:
Você gostaria de remover a limitação do número de barras na história e na janela em geral? Ou fazer uma caixa de seleção como ilimitada. Os usuários não teriam nenhuma dúvida sobre isso.
Você pode substituir a limitação do número de barras na janela por uma lógica mais inteligente de trocar o histórico a partir de um arquivo. Haverá um buffer para exibição se mudarmos os dados para fora deste buffer, então neste buffer é carregado um arquivo de dados do novo histórico em vez dos anteriores - ele pode ficar um pouco atrasado, é claro. Embora se todo o histórico for carregado ou como rolagem na profundidade do histórico possa ser colocado em um buffer criado pela VirtualAlloc neste caso, a memória será carregada a partir do arquivo swap dos dados aos quais o terminal acessa no momento, ao invés dos antigos que são apagados da memória e permanecem no arquivo swap - o mesmo buffer, mas no nível do sistema operacional.
Deus nos livre na paginação!
Limitar o histórico também é necessário para aqueles que colocam o terminal em um servidor para comércio automatizado. Eles precisam do histórico mínimo para que os indicadores funcionem e limitem o espaço em disco.
 
Faça uma caixa de seleção como ilimitada ou infinita. Quem precisar ser limitado, o fará facilmente. Por padrão, não há restrições para que você não tenha que perguntar: Por que não consigo ver toda a minha história?
 
Sim, e a memória de todos é ilimitada por padrão.

Se você exibir todo o histórico, haverá perguntas sobre o porquê das coisas serem tão lentas.
 

Você pode carregar o histórico a partir de um arquivo enquanto você rola. Mas parece-me que ele abranda porque a memória é realocada através da pilha. Existem outras abordagens para reservar a memória. Recomendamos o uso da alocação de memória VirtualAlloc para grandes matrizes. O Heap pode ser usado livremente para matrizes dinâmicas que não excedam 1Mbyte
Em MT assumo que para alocação de memória use nova[] função de operador e cpymem ou malloc e realloc que então chamam HeapAlloc e HeapRealloc. Uma mensagem fora da memória aparece se você não conseguir encontrar um novo pedaço de espaço de endereço para colocar itens um após o outro (não tenho certeza sobre isto :)). Ou talvez a troca do tamanho do arquivo seja insuficiente em algum momento.

Aqui está um exemplo de como você pode usar a memória virtual para as séries de tempo em vez de pilha

MemManager::MemManager(int reg_size, int unt_size, void*& p) {
    unit_size = unt_size;
    SYSTEM_INFO si;
    GetSystemInfo(&si);
    page_size = si.dwPageSize;
    region_size = (reg_size / page_size) * page_size;
    if(reg_size % page_size != 0) region_size += page_size;
    next_page = region = (char*)VirtualAlloc(0, region_size, MEM_RESERVE, PAGE_READWRITE);
    p = region;
    capacity = 0;
}
 
MemManager::~MemManager() {
     VirtualFree(region, 0, MEM_RELEASE);
}
 
void MemManager::realloc(int sz) {
    size = sz*unit_size;
    if(size <= capacity)
        return;
    int tmp_size = size - capacity;
    int inc_size = (tmp_size / page_size) * page_size;
    if (tmp_size % page_size != 0) inc_size += page_size;
    char* p = (char*)VirtualAlloc(next_page, inc_size, MEM_COMMIT, PAGE_READWRITE);
    next_page += inc_size;
    capacity += inc_size;
}
 
Sim, sim, eu também tenho muitas idéias sobre como melhorar a economia em todo o mundo.
Também posso dar conselhos valiosos aos lavradores sobre como arar e às mulheres sobre como dar à luz.
E eu sou o mais inteligente aqui, apesar de ser muito pobre... .
 

Os inteligentes usam as idéias de outras pessoas ;o) Como os japoneses depois da Segunda Guerra Mundial...

 
Conte-me a história do 6E, Euro FX Currencies -Globex está faltando no centro de história? Por que apenas os dois últimos dias são baixados?