Advertisement
mjaniec

DDE data collecting from Statica Notowania 3

Apr 6th, 2012
436
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 3.88 KB | None | 0 0
  1. # zbieranie danych z Statica Notowania 3
  2. # see more: http://www.reakkt.com/2012/04/using-dde-to-collect-market-data-from.html
  3.  
  4. library(tcltk2)
  5.  
  6. # nazwa serwisu DDE zwiazanego z Statica Notowania
  7. DDE.service <- "notowania"
  8.  
  9. # nazwy (wybranych) tematow udostepnianych przez Statica Notowania poprzez DDE:
  10. DDE.topic.price <- "kurs"
  11. DDE.topic.vol   <- "wolumen"
  12. DDE.topic.time  <- "czas"
  13.  
  14. DDE.topic.lop   <- "lop"
  15.  
  16. DDE.topic.ask1  <- "sprzeda"
  17. DDE.topic.ask1v <- "isprzeda"
  18. DDE.topic.bid1  <- "kupi"
  19. DDE.topic.bid1v <- "ikupi"
  20. DDE.topic.ask2  <- "sprzeda2"
  21. DDE.topic.ask2v <- "isprzeda2"
  22. DDE.topic.bid2  <- "kupi2"
  23. DDE.topic.bid2v <- "ikupi2"
  24.  
  25. # lista tematow udostepnianych przez Statica Notowania
  26. # UWAGA: zawiera 'System'
  27. notowaniaTopics <- function(removeSystem=TRUE) {
  28.  
  29.   DDEservices <- tk2dde.services()
  30.  
  31.   DDEtopics <- gsub("Notowania ","",DDEservices[grep("Notowania ",DDEservices)])
  32.  
  33.   if (removeSystem) DDEtopics <- DDEtopics[-which(DDEtopics=="System")]
  34.  
  35.   DDEtopics
  36.  
  37. }
  38.  
  39. # zawezenie liczby tematow do rozpoczynajacych sie od 'topic_prefix'
  40. selectTopics <- function(topic_prefix,topics) {
  41.  
  42.   topics[grep(topic_prefix,topics)]
  43.  
  44. }
  45.  
  46. notowaniaGet <- function(asset,topic) {
  47.  
  48.   tk2dde.request(DDE.service,asset,topic)
  49.  
  50. }
  51.  
  52. data_topics <- c("price","vol","time","pos",
  53.                  "ask1","ask1v","bid1","bid1v",
  54.                  "ask2","ask2v","bid2","bid2v")
  55.  
  56. getDDEasset <- function(asset) {
  57.  
  58.   asset_data <- numeric(length(data_topics))
  59.  
  60.   asset_data <- c(notowaniaGet(asset,DDE.topic.price),
  61.                   notowaniaGet(asset,DDE.topic.vol),
  62.                   notowaniaGet(asset,DDE.topic.time),
  63.                   notowaniaGet(asset,DDE.topic.lop),                  
  64.                   notowaniaGet(asset,DDE.topic.ask1),
  65.                   notowaniaGet(asset,DDE.topic.ask1v),                  
  66.                   notowaniaGet(asset,DDE.topic.bid1),
  67.                   notowaniaGet(asset,DDE.topic.bid1v),                  
  68.                   notowaniaGet(asset,DDE.topic.ask2),
  69.                   notowaniaGet(asset,DDE.topic.ask2v),                  
  70.                   notowaniaGet(asset,DDE.topic.bid2),                          
  71.                   notowaniaGet(asset,DDE.topic.bid2v))
  72.  
  73.   asset_data
  74.  
  75. }
  76.  
  77. # ciagle pobieranie danych z DDE Notowan do 'stop_time', np. "1740"
  78. monitorNotowania <- function(assets,stop_time) {
  79.  
  80.   quotes <- list()
  81.  
  82.   for (asset in assets) quotes[[asset]] <- matrix(0,1,length(data_topics))
  83.    
  84.   # petla do momentu miniecia wyznaczonego czasu
  85.   while (format(Sys.time(), "%H%M")<stop_time) {
  86.    
  87.     for (i in 1:length(assets)) {
  88.    
  89.         asset_curr <- getDDEasset(assets[i])
  90.        
  91.         # czy ktores dane sie zmienily w stodunku do poprzednio pobranych?
  92.         if ( sum( asset_curr != quotes[[ assets[i] ]][ nrow(quotes[[ assets[i] ]]), ] ) > 0 )          
  93.           quotes[[ assets[i] ]] <- rbind(quotes[[ assets[i] ]],asset_curr)
  94.      
  95.     }
  96.    
  97.    
  98.   }
  99.  
  100.   # czyszczenie danych
  101.   lapply(quotes,
  102.          function(x) {
  103.            
  104.            colnames(x) <- data_topics # nazwy kolumn
  105.            x <- x[-1,]                # usuwanie pierwszego inicjalizujacego rekordu
  106.            
  107.           }
  108.   )      
  109.  
  110. }
  111.  
  112. ###
  113.  
  114. # getDDEasset("mWIG40") # test
  115.  
  116. assets.all <- notowaniaTopics()
  117.  
  118. assets.indexes       <- c("WIG20","mWIG40","MW20")
  119. assets.index_futures <- c(selectTopics("FW20",assets.all),
  120.                           selectTopics("FW40",assets.all))
  121. assets.index_options <- selectTopics("OW20",assets.all)
  122.  
  123. assets <- c(assets.indexes,
  124.             assets.index_futures,
  125.             assets.index_options)
  126.  
  127. ###
  128.  
  129. # kontrola dostepnosci aktywow:
  130. for (asset in assets) {
  131.  
  132.   cat(asset,"\n")
  133.   x <- getDDEasset(asset)
  134.  
  135. }
  136.  
  137. ###
  138.  
  139. stop_collecting_time <- "0822"
  140.  
  141. collected_data <- monitorNotowania(assets,stop_collecting_time)
  142.  
  143. summary(collected_data)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement