Блог им. Crazy_Trading

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

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

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

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

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

прошу плюсануть 
  • Ключевые слова:
  • cpp
66
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 гига памяти… поэтому эти данные храниться не будут. при создании нового искусственного бара будет сразу происходить необходимый пересчет без занесения этого бара в массив.

Читайте на SMART-LAB:
Фото
Нефть не любит резких взлетов
👉 Наш канал в MAX 👈 👉 Чат Иволги в MAX 👈 На графике нефти последних 20 с небольшим лет мы не видим восходящей...
Фото
BRENT: Дипломатия Трампа против "бычьего десанта" — кто блефует?
После сенсационного заявления Трампа о достижении двухнедельного перемирия с Ираном нефть открыла торги в среду с мощным гэпом вниз. Цена...
АПРИ продолжает строительство всесезонного мультикурорта «ФанПарк»
АПРИ продолжает строительство всесезонного мультикурорта «ФанПарк» «ФанПарк» – это мультифункциональный всесезонный курорт на...
Фото
Кто сейчас самый дешевый сбыт? Сводный пост по сбытовым компаниям по отчетам РСБУ за 2025г.
Волгоградэнергосбыт Ставропольэнергосбыт Самараэнерго Мордовэнергосбыт Пермэнергосбыт Новосибирскэнергосбыт...

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

....все тэги



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