Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # zbieranie danych z Statica Notowania 3
- # see more: http://www.reakkt.com/2012/04/using-dde-to-collect-market-data-from.html
- library(tcltk2)
- # nazwa serwisu DDE zwiazanego z Statica Notowania
- DDE.service <- "notowania"
- # nazwy (wybranych) tematow udostepnianych przez Statica Notowania poprzez DDE:
- DDE.topic.price <- "kurs"
- DDE.topic.vol <- "wolumen"
- DDE.topic.time <- "czas"
- DDE.topic.lop <- "lop"
- DDE.topic.ask1 <- "sprzeda"
- DDE.topic.ask1v <- "isprzeda"
- DDE.topic.bid1 <- "kupi"
- DDE.topic.bid1v <- "ikupi"
- DDE.topic.ask2 <- "sprzeda2"
- DDE.topic.ask2v <- "isprzeda2"
- DDE.topic.bid2 <- "kupi2"
- DDE.topic.bid2v <- "ikupi2"
- # lista tematow udostepnianych przez Statica Notowania
- # UWAGA: zawiera 'System'
- notowaniaTopics <- function(removeSystem=TRUE) {
- DDEservices <- tk2dde.services()
- DDEtopics <- gsub("Notowania ","",DDEservices[grep("Notowania ",DDEservices)])
- if (removeSystem) DDEtopics <- DDEtopics[-which(DDEtopics=="System")]
- DDEtopics
- }
- # zawezenie liczby tematow do rozpoczynajacych sie od 'topic_prefix'
- selectTopics <- function(topic_prefix,topics) {
- topics[grep(topic_prefix,topics)]
- }
- notowaniaGet <- function(asset,topic) {
- tk2dde.request(DDE.service,asset,topic)
- }
- data_topics <- c("price","vol","time","pos",
- "ask1","ask1v","bid1","bid1v",
- "ask2","ask2v","bid2","bid2v")
- getDDEasset <- function(asset) {
- asset_data <- numeric(length(data_topics))
- asset_data <- c(notowaniaGet(asset,DDE.topic.price),
- notowaniaGet(asset,DDE.topic.vol),
- notowaniaGet(asset,DDE.topic.time),
- notowaniaGet(asset,DDE.topic.lop),
- notowaniaGet(asset,DDE.topic.ask1),
- notowaniaGet(asset,DDE.topic.ask1v),
- notowaniaGet(asset,DDE.topic.bid1),
- notowaniaGet(asset,DDE.topic.bid1v),
- notowaniaGet(asset,DDE.topic.ask2),
- notowaniaGet(asset,DDE.topic.ask2v),
- notowaniaGet(asset,DDE.topic.bid2),
- notowaniaGet(asset,DDE.topic.bid2v))
- asset_data
- }
- # ciagle pobieranie danych z DDE Notowan do 'stop_time', np. "1740"
- monitorNotowania <- function(assets,stop_time) {
- quotes <- list()
- for (asset in assets) quotes[[asset]] <- matrix(0,1,length(data_topics))
- # petla do momentu miniecia wyznaczonego czasu
- while (format(Sys.time(), "%H%M")<stop_time) {
- for (i in 1:length(assets)) {
- asset_curr <- getDDEasset(assets[i])
- # czy ktores dane sie zmienily w stodunku do poprzednio pobranych?
- if ( sum( asset_curr != quotes[[ assets[i] ]][ nrow(quotes[[ assets[i] ]]), ] ) > 0 )
- quotes[[ assets[i] ]] <- rbind(quotes[[ assets[i] ]],asset_curr)
- }
- }
- # czyszczenie danych
- lapply(quotes,
- function(x) {
- colnames(x) <- data_topics # nazwy kolumn
- x <- x[-1,] # usuwanie pierwszego inicjalizujacego rekordu
- }
- )
- }
- ###
- # getDDEasset("mWIG40") # test
- assets.all <- notowaniaTopics()
- assets.indexes <- c("WIG20","mWIG40","MW20")
- assets.index_futures <- c(selectTopics("FW20",assets.all),
- selectTopics("FW40",assets.all))
- assets.index_options <- selectTopics("OW20",assets.all)
- assets <- c(assets.indexes,
- assets.index_futures,
- assets.index_options)
- ###
- # kontrola dostepnosci aktywow:
- for (asset in assets) {
- cat(asset,"\n")
- x <- getDDEasset(asset)
- }
- ###
- stop_collecting_time <- "0822"
- collected_data <- monitorNotowania(assets,stop_collecting_time)
- summary(collected_data)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement