Блог им. Tyam
На днях начинающие алготрейдеры просили подсказать, каким классом в .net можно воспользоваться для прорисовки свечного графика. Вот здесь: smart-lab.ru/blog/225333.php
Растрогался, вспоминая как выл над кодом и не мог нормально прорисовать свечки.))
Короче сделал пример вывода свечек из файла на График. Visual Studio 2013, WPF, а для графика System.Windows.Forms.DataVisualization.Charting.Chart.
Пример хорошо закомментирован. Хоть и не совсем прям для второго курса получился. Пару левых потоков пришлось вызвать, чтоб не зависала форма.
Будете в свои проекты WPF переносить, не забывайте добавлять пространства имён Windows Forms в references и using:
Всё. Скачать можно от сюда: sib-algo.ru/open-source/выгрузка-свечей-на-chart.html
Чисто из любопытства решил посмотреть на Ваш пример)
1) Установите Решарпер и узнаете много интересного о Вашем коде.
2) Выводите данные пачками (если на стандартных контролах такое возможно). Это значительно увеличит скорость отрисовки.
3) Для производительности рекомендую «замораживать» график при отрисовке, а то на каждой новой свечке у Вас все отрисовывается по-новому.
Серьезно задумайтесь над производительностью. Потому что если надумаете выводить маленькие таймфреймы или, что еще страшнее, тики (а Вы рано или поздно захотите это сделать), то успеете посидеть и состариться пока график отрисуется. В Вашем примере 1 год на часовых свечках строиться ~15-20 сек, у меня это график строится за ~0,1-0,4 сек. Сразу оговорюсь, что использую сторонние контролы, но в любом случае даже на стандартных эти процессы должны быть много быстрее.
Добрый.
Там есть кнопка перемотки (большая такая ">>>"), которая «замораживает» график, пряча его. После чего любые данные отрисовываются мгновенно.
Мой Stock Pattern Viewer проводит тесты десятилетий за секунды. Не видел ничего быстрее пока. Т.ч. не надо тут про оптимизацию.
upd: да, конечно можно было всё сразу и быстро прорисовать. Но мне показалось правильным вынести логику в отдельный поток и подгружать всё по одной свечке, как это в жизни происходит. Большие задержки создаёт именно процесс прорисовки (по этапный, пачкой — мгновенно), поэтому выход — спрятать чарт или нужные элементы на время динамической прорисовки. Можно ещё отключить принудительную прорисовку(Refresh) у чарта, но тогда будет не ровно выходить.
Ну, да, ладно, это не так важно. Быстрее и лучше решения, конечно, есть. Главное, что Вы в курсе нюансов построения графиков в WPF.
Удачи!
Можно было прорисовать всё пачкой, формируя её прям в StreamReader и минуя массив свечей и потом за раз прорисовать. Было бы охрененно быстро, но в плане обучающего примера это бы было не хорошо. т.к из моего примера, сейчас уже и тестер собрать можно потихоньку, а из «быстрого» нет.
upd: убрал гадости из коммента
Кстати, было бы реально круто, если бы Вы смогли выложить пример производительной отрисовки! Новички бы оценили.
Двадцать человек скачали, ни один спасибо не сказал. Расстроился и обидел мимо проходивщего товарища. Явно не образец для подражания.
Да. Оптимизирую пример, прорисую свечки, объёмы и выложу через пару недель. Может даже страничку отдельную для примеров сделаю. Тоже парился с этим делом когда-то.
Так что советую Вам набраться терпения. Все еще только впереди!
Ваш подход в чем-то уникален. Я даже не знаю какие классические системы ТА могут предложить аналогичные решения. Развивайте идею, пусть это будет Вашей фишкой! ;)
А Генератор скриптов разбираю (как обучение C#).
Говорю спасибо и без этого примера. Поскольку уже использую вьюер результативно.