Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2010, 10:47   #1
fagot1892
 
Регистрация: 09.06.2010
Сообщений: 8
По умолчанию Работа в постоянно обновляемыми значениями

Всем здравствуйте.
Подобного рода вопросы уже на данном форуме от трейдеров задавались. Однако будучи в начале пути по изучению VBA, разобраться, пока самостоятельно не могу и поэтому прошу помощи специалистов.

Есть поток обновляемых в режиме реального времени котировок акций (импортируются из программы в лист «Исходные данные» файла Пример 1 (прикрепил) и изменяются в режиме реального времени в одной строке, т.е. почти ежесекундно могут).

1. Хочу сделать во втором листе «Промежуточные вычисления» таблицу с этими же данными (обновляемыми real-time), но с добавлением, например, 7 дополнительных строк для каждого символа, в которых указываются значения символа, соответствующие значениям, например, 5-минутного интервала (поскольку поток значений идет постоянно, в данных строках будут как бы фотоснимки значений через ровно 5 минут – время соответствует системному времени компьютера).

2. Далее планирую условным форматированием на основе полученных данных делать заливку ячеек (текущая формула стоит следующая: С2>С3 – зеленый, С2<С3 – красный, С2=С3 – желтый). Получится визуальное представление графика-«светофора» за 30 минут (6 квадратиков по 5 минут).
3. Потом планирую в листе «Итоги» сделать чистовой вариант светофора (поскольку в условном форматировании нельзя ссылаться на другие листы) и сортировать данный «светофор» по количеству подряд идущих с конца ячеек с определенным цветом. Как сделать, пока тоже не знаю.

P.S. Как думаете данные по 500 акциям с учетом всего вышеизложенного Excel потянет?

Буду очень признателен за ликбез.
Вложения
Тип файла: rar Пример1.rar (5.3 Кб, 20 просмотров)
fagot1892 вне форума Ответить с цитированием
Старый 11.06.2010, 09:32   #2
fagot1892
 
Регистрация: 09.06.2010
Сообщений: 8
По умолчанию Сделал пример для одной акции

Для одной акции сделал (можете протестировать, вставляя в ячейку С2 любые значения и выбрав нужный период обновления, например 5 сек - цвета ячеек будут меняться). Теперь надо решить следующие вопросы:

1. Алгоритм, который я сделал для одной акции (обновление значений в строках 3-15 через определенный период времени), надо распространить на весь перечень акций, которые имеются на листе2 (может быть до 1000 акций с различными обновляемыми в режиме реального времени значениями). Для примера скопировал строки и поставил ссылки вручную - лучше, чтобы макрос все это сам вставлял в зависимости от количества акций на Листе 2.
2. Надо сделать на 3-м листе аккуратный список акций и светофор без лишних строк 2-15 Листа2
3.Надо на основе данных параметра Last сделать 2 дополнительных параметра Min и Max, которые будут отражать минимальные и максимальные значения параметра Last в течение определенного периода времени=периоду времени таймера, через который происходит обновление строк 3-15 в файле Пример1. Соответственно появятся новые столбцы Min/Max, аналогичные столбцу Last с обновляемыми строками 3-15 как и у столбца Last. По сути парамерт Min/Max это такие же параметры как и Last, только они отражают в режиме реального времени модифицированные значения. Для трейдеров это Low/High? например, 5-минутного бара/свечи. Это нужно, чтобы делать условия для "Светофора" на основе значений Min/Max.
Вложения
Тип файла: rar Пример 1.rar (17.7 Кб, 18 просмотров)
fagot1892 вне форума Ответить с цитированием
Старый 11.06.2010, 23:03   #3
fagot1892
 
Регистрация: 09.06.2010
Сообщений: 8
По умолчанию

1-й вопрос (2-й пост) криво, но решил.
Очень критичным является 3-й вопрос с мин/макс значениями, например в каждый 5-минутный период времени.
Люди помогите - полный тупик.
fagot1892 вне форума Ответить с цитированием
Старый 11.06.2010, 23:19   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Реально таймер будет работать 10 секунд или 5 минут.
Мин и макс необходим за период 30 минут,или последние 5 минут.
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 12.06.2010, 01:13   #5
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
1-й вопрос (2-й пост) криво, но решил.
Выровнял ваш код и сменил алгоритм.Возможно такой вариант подойде.Лист4,кнопка Макс как в фильме Большие Гонки
Я думаю с остальным справитесь сами
Вложения
Тип файла: rar Свеча.rar (30.6 Кб, 27 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 12.06.2010, 10:50   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Я думаю, 90% про "Большие Гонки" не поняли Но остальные улыбнулись
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 12.06.2010, 21:56   #7
fagot1892
 
Регистрация: 09.06.2010
Сообщений: 8
По умолчанию

Doober,
Спасибо за отклик.
Но мне кажется, что вы не поняли моего вопроса с нахождением минимума за определенный период времени. Попробую объяснить по другому.
Есть график цены акции, разбитый на, например, 5 минутные отрезки (могут быть отрезки любого временного периода). Посмотрите например здесь http://www.finam.ru/analysis/charts/default.asp.
Каждая палка (свеча) показывает максимальные и минимальные значения цены за определенный период времени (часовик, 1-минутка, 5-минутка и т.д.- в поле "период" на графике газпрома из ссылки).
Как строится график: начинается 5-минутный интервал. мин и макс равны определенному значению Last. Потом значение Last движется вверх/вниз и создаются новые минимумы/максимумы. По истечении 5 минут цикл повторяется.
Я хочу чтобы у меня рядом с ячейкой С2 в ячейках D2 и E2 отражались минимумы и максимумы за определенный период времени - пусть пока будет 10 секунд, чтобы вручную меняя данные можно было проверить как работает). Например,
начало 10-секундного периода = 1 секунда: С2=3(Last-последняя цена) D2=3(макс) E2=3(мин)
2 сек: С2=2 D2=3(максимум остался прежним) E2=2(обновился минимум)
3 сек: С2=1 D2=3 E2=1
7 сек: С2=5 D2=5 E2=1
10 сек: С2=3 (изменения не повлияли на макс и мин) D2=5 E2=1
_______ __________ - новый отрезок времени начался
11 сек=1 сек: С2=9 D2=9 E2=9 (все значения обновились)
12 сек=2 сек: С2=13 D2=13 E2=9
и т.д.

В примере дается изменения за 1 секунду, но на практике за 1 секунду может быть несколько изменений цены Last (максимумы и минимумы могут даже одновременно обновиться), поэтому нужно плясать от изменения ячейки С2 (Last).

Соответственно нужен макрос, который будет каждые 10 секунд фиксировать значения минимума и максимума в ячейках D2 и E2.

P.S. Еще вопросик - как сделать макросом ссылку одной ячейки на вторую так, чтобы при смене значений второй первая автоматически тоже меняла свои значения (типа когда в Excel равно поставишь, автоматически значения переносятся)
fagot1892 вне форума Ответить с цитированием
Старый 12.06.2010, 22:26   #8
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Посл. вопрос - например, так:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
If (Target.Address = "$A$1") Then Range("A2").Value = Range("A1").Value
End Sub
А почему вас формула не устраивает?
motorway вне форума Ответить с цитированием
Старый 12.06.2010, 22:32   #9
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

я считаю что мин и макс определяю правильно.Код срабатывает при обновлении данных на листе

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim RE
If ind = 0 Then Exit Sub
RE = Sheets("Лист2").Range("B3:B" & ind)

For n = 1 To ind - 2
  If Rez_M(n, 1) > RE(n, 1) Then
  Rez_M(n, 1) = RE(n, 1)

  End If

 If Rez_M(n, 2) < RE(n, 1) Then
  Rez_M(n, 2) = RE(n, 1)
  
  End If

Next

Sheets("Лист4").Range("C2:D" & ind - 1) = Rez_M

End Sub
У вас в таймере каждые 10 секунд идет сброс измерения мин макс.вызывая процедуру Inic_M()
Код:
Sub Mac1()
Static counter As Integer

      Call Mac2
      
      counter = counter + 1
      
      If counter = 30 Or counter > 30 Then ' 5 минут
      
     Call Rabota

     
    counter = 0
      End If
         Inic_M 'Мин Макс за 10 секунд cбрасывается
      Application.OnTime Now + TimeValue("00:00:10"), "Mac1"
End Sub
Код:
Sub Inic_M()

Dim RE
RE = Sheets("Лист2").Range("B3:B" & ind)

For n = 1 To ind - 2
   Rez_M(n, 1) = RE(n, 1)
Rez_M(n, 2) = RE(n, 1)


Next
Sheets("Лист4").Range("C2:D" & ind - 1) = Rez_M

End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 13.06.2010, 00:03   #10
fagot1892
 
Регистрация: 09.06.2010
Сообщений: 8
По умолчанию

Doober, извиняюсь.
Спасибо. еще раз проверил. Вроде верно по результату все у вас. Но в коде пока не могу до конца разобраться, поэтому и туплю наверное.
1. Сделайте, пожалуйста, код, чтобы Min и Max не в Листе4, а в Листе 2 были рядом с данными Last. Я потом ВПР в Лист 1 на места поставлю.
2. Можете более детально пояснения сделать.Например, Dim RE - почему так записано. Sub Rabota () и Mac 1 тоже не понял пока. Опишите пожалуйста логику и общий ход рассуждений.
3. столбцы E:J я так понял выполняют смещение, но его я планирую в Листе 1 делать - вертикально.
5. Как скопировать цвета ячеек в Листе 1 в другой лист ссылкой, чтобы обновление было равным обновлению исходника.
6. Я вот подумал, а ведь наверное можно и пользовательскую функцию сделать с аргументом Last или в данном случае процедурой лучше будет?

Если честно, пока тяжеловато дается VBA - много не знаю, поэтому извините за мое тугоумие.
fagot1892 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delhi+Access, работа со значениями -BlindGuardian- БД в Delphi 0 24.01.2010 21:00
Удаление строк с повторяющимися значениями satten Microsoft Office Excel 11 01.12.2009 07:50
работа с повторяющимися значениями в DBGrid-e GhostBZ БД в Delphi 6 01.09.2009 13:44
сумма между определенными значениями Zeon25 Microsoft Office Excel 8 12.08.2009 08:40
Заполнение значениями из сводной Branch Microsoft Office Excel 0 12.02.2009 16:20