Обновлен History Center - бесплатная история минутных котировок с 1999 года - страница 8

 
Rosh:
Увы, ставьте макисамльное число "Макс баров на графике" (в районе 3 миллионов на сегоднящний день) и сможете смотреть любую дату.
т.е произвольно задать отрезок не удастся?
Например только август за 2005?
 
Нет, а зачем. В статье 'Секреты клиентского терминала MetaTrader 4' описаны некоторые полезные вещи, которые облегчают жизнь, вот одна из них:

 
А не было желания убрать ограничение на количество баров в истории и окне вообще? Либо сделать галочку типа unlimited (неограничено). Вопросы бы по этому поводу отпали вообще у пользователей.
Можно заменить ограничение на количество баров в окне на более умную логику подкачки истории из файла. Будет буфер для отображения если сдвигаем на данные вне этого буфера то в этот буфер загружаются из файла новые данные истории вместо прежних - может немного скролинг притормаживать конечно при этом. Хотя если всю историю подгрузить или по мере скролирования в глубь истории то можно размещать в буфере созданным VirtualAlloc в этом случае в память будет подгружаться из файла подкачки те данные к которым терминал обращается в данный момент вместо прежних которые очищаются из памяти и остаются в файле подкачки - та же буферизация но на уровне операционной системы.
 
elritmo:
А не было желания убрать ограничение на количество баров в истории и окне вообще? Либо сделать галочку типа unlimited (неограничено). Вопросы бы по этому поводу отпали вообще у пользователей.
Можно заменить ограничение на количество баров в окне на более умную логику подкачки истории из файла. Будет буфер для отображения если сдвигаем на данные вне этого буфера то в этот буфер загружаются из файла новые данные истории вместо прежних - может немного скролинг притормаживать конечно при этом. Хотя если всю историю подгрузить или по мере скролирования в глубь истории то можно размещать в буфере созданным VirtualAlloc в этом случае в память будет подгружаться из файла подкачки те данные к которым терминал обращается в данный момент вместо прежних которые очищаются из памяти и остаются в файле подкачки - та же буферизация но на уровне операционной системы.
Боже упаси от подкачки!
А ограничение истории тоже нужно для тех, кто ставит терминал на сервер, для автоматического трейдинга. Там нужна минимальная история, чтобы работали индикаторы, и чтобы ограничить место на диске.
 
сделать галочку типа unlimited (неограничено) или infinity. Кому надо ограничится легко это сделают. По умолчанию - никаких ограничений чтобы не было вопросов : А почему у меня не вся история отображается?
 
Ага, и памяти у всех по умолчанию неограничено...

Если отобразить всю историю, то будут вопросы, а почему всё так медленно работает.
 

Можно подгружать из файла историю по мере скролирования. Но мне кажется что тормозит из-за того что память релоцируется через кучу. Есть другие подходы к резервированию памяти. Рекомендуется использовать VirtualAlloc выделения памяти для огромных массивов. Кучу можно использовать свободно для динамических массивов не превышающим 1Mbyte
В МТ я предполагаю для выделения памяти используют new[] оператор и cpymem функцию либо malloc и realloc которые потом вызывают HeapAlloc и HeapRealloc. Out of memory сообщение возникает видимо если не находит неперывный кусок адресного пространства чтобы разместить элементы друг за другом(в этом не уверен :)). Либо размера файла подкачки не хватает в какой-то момент.

Вот пример как можно использовать для таймсерий виртуальную память вместо кучи

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;
}
 
Да-да, у меня тоже есть масса идей как улучшить экономику во всем мире.
Ещё я могу дать ценные советы пахарям как правильно пахать, а бабам как правильно рожать.
И вообще я тут самый умный, несмотря на то, что очень бедный.. .
 

Умные используют чужие идеи ;о) Типа как японцы после второй мировой ...

 
скажите история для 6E, Euro FX Currencies -Globex отсутствует в хистори центре? загруаються почему только последнии два дня.