Блог им. Crazy_Trading

программисты трейдеры АУ

парни очень нужна консультация программиста на С++

суть: не могу разобраться с векторами (((
пишу ДЛЛ пока для МТ4
дан двумерный ДИНАМИЧЕСКИЙ массив баров.
необходимо этот массив передать в ДЛЛ.

в С++ как таковое отсутствует понятие ДИНАМИЧЕСКОГО массива ((( поэтому через вектора…
но информация слишком скудная в нете…
не могу понять как вектор двумерного массива инициализировать в классе, как в отдельной функции добавлять в него новые элементы, и как из другой функции читать..

если есть тут прогеры — откликнитесь плиз!

прошу плюсануть 
  • Ключевые слова:
  • cpp
18 комментариев
всё правильно, через вектора надо делать
в конструкторе инициализируй приватный вектор:
www.cprogramming.com/tutorial/constructor_destructor_ordering.html — это про конструкторы
ну и соответственно, сделай public-функции для управления этим вектором
avatar
velikan, я таких сайтов насмотрелся керову тучу ))
и нигде нет банального решения простой задачи:

в классе tf должен быть вектор двумерного массива.
как его инициализировать и как к нему обращаться?
Crazy Trading, инициализировать надо в конструкторе, а для добавления/удаления элементов — в классе сделать функции-обёртки, в которые будешь передавать элемент для добавления или индекс для удаления
avatar
velikan, как ты не поймешь — то что ты говоришь я и так знаю ))
мне не понятен синтаксис инициализации
Дед Тархун, спасибо, как передавать я разобрался…
сутьв том, что необходимо переданное сохранять и с появлением нового бара увеличивать размер массива в ДЛЛ, тоесть это динамический массив, а в С++ с динамикой насколько я понял туговато
Дед Тархун, это очень очень по плохому ))
несколько сотен инструментов, на каждом инструменте 9 таймфреймов + 18 искусственных + 27 дополнительных массивов с данными… и если сделать по каждому инструменту->таймфрейму к примеру 100 000 баров — любая винда тихо умрет )))
Crazy Trading,
1 если даже сделаешь как ты хочеш имхо будет тормозить… особенно под с++…
avatar
ves2010, тормозить не будет ))) то что я описал делается один раз при включении длл, все остальное время просчитывается нулевой бар
вектор врядли подойдёт.
double[,] candles = new double[10,30000]; не подойдёт?
avatar
Тунеядец, вектор как раз подойдет… так как он динамически расширяется, а вот в втоем примере во первых мало баров… надо как минимум 100 000 для КАЖДОГО таймфрейма, ну и инструментов не одна сотня ))
Что есть «вектор» в с++ — не знаю:)
есть след варианты решения:
1. статические массивы 4 байта(дабл) * 4(хай, лоу, опен, клозе) * 100000 (баров) * 100(инстурментов) = 160 000 000 = 160 мбайт вроде? если я не ошибся делай так — самый быстрый и простой вариант
2. динамические массивы — хранится в памяти куском, при каждом изменении размера выделяет кусок целиком. Забудь…
3. списки… вариантов реализации масса, в делфи сделано более менее удобно…
avatar
xTestero, согласен, статическое распределение памяти — первый выбор, если хочешь, чтобы было и быстро и просто!
avatar
xTestero, в принципе тоже верно, на первое время сойдет ))
xTestero, подсчеты немного не верны ))

4 байта(дабл) * 6(время открытия, хай, лоу, опен, клозе, объем) * 100000 (баров) * 100(инстурментов) * 9 таймфреймов = 2 160 000 000 (2 гига)
также к каждому таймфрейму создается 2 искусственных таймфрейма… тоесть к тому что есть прибавляем еще 4 гига (((

но это всего лишь ДАННЫЕ!!!
теперь для каждого имея на по 3 таймфрейма необходимо создать один с пересчитанными значениями…

тоесть если есть 5 минутки и мы создали еще 2 искусственных, то пересчитав эти три таймфрейма, мы получим еще один массив, тоесть еще 2 гига… итого 6 гигов (((
Crazy Trading, ты по другому проблему не решишь — либо упрешься в физический потолок либо в быстродействие. Если реально есть необходимость в хранение такой тучи данных (а скорее всего ее нет:) то варианты:
1. статика со сдвигами памяти (не нужные данные убираем на их месть двигаем необходимые, в конец дописываем новые) — вряд ли ты будешь заглядывать на 5и минутках в прошлый год например
2. списки, но тут конечно можешь и 16гигов в комп воткнуть но потолок все рано будет
3. хранить все в базе данных быстрой
ну есть еще наколхозить решений, в зависимости от твоих потребностей.
если хочешь динамически выделять массивы — попробуй метров на сто массив выделить и перекроить — увидишь сколько это по времени занимает…
avatar
xTestero, спасибо… тоже об этом уже думал…
пока пришел к следующему решению:
2 массива с искусственными таймфреймами мне необходимы чтобы делать свои рассчеты, после которых эти данные в этих массивах не нужны, а это повторюсь 4 гига памяти… поэтому эти данные храниться не будут. при создании нового искусственного бара будет сразу происходить необходимый пересчет без занесения этого бара в массив.

теги блога Тихая Гавань

....все тэги



UPDONW
Новый дизайн