Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Нужен приватный мониторинг счета? В Сигналах есть такая возможность!
Саша
487
Саша 2007.07.01 20:40 

Доброго времени суток, у меня вопрос...
Есть необходимость записать 100тыс. чисел double, числа будут ежесуточно удалятся и записываться заново. Как это лучше сделать, писать в файл или в массив? При работе эти числа используются экспертом только раз в сутки. Если писать в файл то как это отразится на скорости тестирования и оптимизации, и вообще использует ли тестер записанные экспертом файлы при тестировании? Если писать в массив - есть ли какие-то ограничения на его размер?

Спасибо.

Andrey Khatimlianskii
52181
Andrey Khatimlianskii 2007.07.01 21:00  
Думаю, хранить в массиве будет экономичнее (будет занята память, но меньше нагрузки на проц и винчестер). По крайней мере, при тестировании.
А для реальной работы, наверное, лучше писАть в файл - и память будет свободна, и при сбое информация не потеряется.
Valery V. Chesnokov
1319
Valery V. Chesnokov 2007.07.02 19:20  
Думаю, раз в сутки записать в файл не слишком вычислительно накладно. Если опер. памяти хватает, и машина стоит на хорошем UPS'e, можете рискнуть держать массив в памяти.
Andrey Khatimlianskii
52181
Andrey Khatimlianskii 2007.07.02 22:40  
chv:
Думаю, раз в сутки записать в файл не слишком вычислительно накладно. Если опер. памяти хватает, и машина стоит на хорошем UPS'e, можете рискнуть держать массив в памяти.
Для тестера (и оптимизатора) это "раз в сутки" будет наступать несколько раз в секунду.
А для реала в любом случае лучше в файл - на одном эксперте не заметно, а на десятке почувствуется.
Саша
487
Саша 2007.07.03 00:19  

Буду писать в массив, был не уверен что в него можно записать 100тыс чисел. Мне нужно тики писать за последние сутки для встроенного оптимизатора, в начале следующих суток несколько проходов, затем тики удаляются и пишутся заново. UPS пол часа держит, в принципе за год около трех отключений по вине электричества.

Спасибо.

Valery V. Chesnokov
1319
Valery V. Chesnokov 2007.07.03 06:50  
komposter:
Для тестера (и оптимизатора) это "раз в сутки" будет наступать несколько раз в секунду.

Хорошее замечание, Андрей, я упустил это из виду. Когда у меня терминалы молотят сутками переборы в SQL базу, о файловой оптимизации поневоле задумаешься. Жаль, терминал не позволяет отключить логирование совсем :(, у него три папки logs, если не удалять их скриптами, за пару дней они съедают 20-30 Гб.

А к текущему вопросу топика можно, например, так:

if(IsTesting())
{
  // test mode: use array in memory
}
else
{
   // real-time mode: write array to file
}
Dikii
36
Dikii 2013.07.12 09:15  
А ни кто не в курсе какое максимальное количество элементов массива можно создать? или ограничено размерностью типа инт?
Boeing747
241
Boeing747 2013.07.12 09:35  
Dikii:
А ни кто не в курсе какое максимальное количество элементов массива можно создать? или ограничено размерностью типа инт?
если память не изменяет то не более 100 миллионов единиц. по заглаза должно хватить
Vadim Zhunko
5218
Vadim Zhunko 2013.07.12 12:24  
Dikii:
А ни кто не в курсе какое максимальное количество элементов массива можно создать? или ограничено размерностью типа инт?
Ограниченно размером адресуемой памяти для 32-х разрядного приложения. В ОС х32 от 2 Гб до 4 Гб (в зависимости от настроек ОС). В ОС х64 - 4 Гб.
Dikii
36
Dikii 2013.07.19 13:46  
Zhunko :
Ограниченно размером адресуемой памяти для 32-х разрядного приложения. В ОС х32 от 2 Гб до 4 Гб (в зависимости от настроек ОС). В ОС х64 - 4 Гб.


Спасибо огромное

А то я скриптик уже поставил и он у меня 8 млн уже дошел в течении 6 суток все никак не исполнится

код:

#property copyright "Copyright 2013, MetaQuotes Software Corp."

#property link "http://www.metaquotes.net"



//+------------------------------------------------------------------+

//| script program start function |

//+------------------------------------------------------------------+

int i;

int mas[];



int start()

{

//----

for(i=0;i>=0;i++){

if (GetLastError()!=0){

return;

}

ArrayResize(mas,i+1);

mas[i]=i;

if(mas[i]!=i){

return;

}

Print(mas[i]);

}

//----

return(0);

}

//+---------------
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий