Scape short sales data from the ASIC website1

Read URL:

# Scape short sales data from the ASIC website
url <- "http://asic.gov.au/regulatory-resources/markets/short-selling/short-position-reports-table/"
links <- getHTMLLinks(url)
head(links)
## [1] "/"                                                   
## [2] "/for-business/"                                      
## [3] "/for-business/"                                      
## [4] "/for-business/your-business/"                        
## [5] "/for-business/your-business/your-business-structure/"
## [6] "/for-business/your-business/protecting-yourself/"
# extract only links containing csv files
links_csv <- links[str_detect(links, ".csv")]
head(links_csv)
## [1] "/Reports/YTD/2018/RR20180220-001-SSDailyYTD.csv"             
## [2] "/Reports/Daily/2018/02/RR20180220-001-SSDailyAggShortPos.csv"
## [3] "/Reports/Daily/2010/06/RR20100616-001-SSDailyAggShortPos.csv"
## [4] "/Reports/Daily/2010/06/RR20100617-001-SSDailyAggShortPos.csv"
## [5] "/Reports/Daily/2010/06/RR20100618-001-SSDailyAggShortPos.csv"
## [6] "/Reports/Daily/2010/06/RR20100621-001-SSDailyAggShortPos.csv"

Get the latest csv file:

latest <- links_csv[[2]] # latest daily report is 2nd row. 

# Concatenate url 
url_begin <- "http://asic.gov.au"
latest_csv <- paste0(url_begin, latest, sep = "")

# Read csv
shortsales_latest <- read.csv(latest_csv, 
                              header = TRUE, 
                              sep = '\t', 
                              fileEncoding = "utf-16")
head(shortsales_latest)

Rename columns:

colnames(shortsales_latest) <- c("company", 
                               "ticker", 
                               "short_positions", 
                               "shares_on_issue", 
                               "short_ratio")
head(shortsales_latest)

Filter top 10 stocks based on short sales to total shares outstanding

Rank all stocks and filter top 10:

top_10 <- shortsales_latest %>% 
  filter(rank(desc(short_ratio)) <= 10)
top_10

Plot of top 10 most shorted stocks:

 top_10 %>%
   ggplot(aes(reorder(ticker, short_ratio), short_ratio, fill = short_ratio)) +
   geom_bar(stat = "identity", width = 0.7) +
   scale_y_continuous(expand = c(0,0),
                      limits = c(0,NA)) +
   coord_flip() +
   scale_fill_gradient(trans = "reverse") +
   labs(title = "Top 10 most shorted ASX stocks", 
        x = "",
        y = "Short Positions / Shares Outstanding (%)") +
   guides(fill = FALSE) +
   theme_bw()


  1. Link to ASIC webpage