Installation of the Libraries

Libraries

If making the financial analysis of the stock exchange data, the following packages are needed:

  1. quantmod
  2. PerformanceAnalytics
  3. tidyquant
#install.packages("PerformanceAnalytics", repos = "http://cran.us.r-project.org")
#install.packages("dplyr", repos = "http://cran.us.r-project.org")
#install.packages("tidyquant", repos = "http://cran.us.r-project.org")
#install.packages("quantmod", repos = "http://cAs iran.us.r-project.org")
#install.packages("tseries", repos = "http://cran.us.r-project.org")
#install.packages("tidyverse", repos = "http://cran.us.r-project.org")

library(PerformanceAnalytics)  #useful package !!!
Loading required package: xts
Loading required package: zoo

Attaching package: ‘zoo’

The following objects are masked from ‘package:base’:

    as.Date, as.Date.numeric


Attaching package: ‘PerformanceAnalytics’

The following object is masked from ‘package:graphics’:

    legend
library(quantmod)              # useful package
Loading required package: TTR
Registered S3 method overwritten by 'quantmod':
  method            from
  as.zoo.data.frame zoo 
library(tidyquant)             # useful
Loading required package: lubridate

Attaching package: ‘lubridate’

The following objects are masked from ‘package:base’:

    date, intersect, setdiff, union
library(randtests)  # for runs test

# other libraries

library(ggplot2)
library(dplyr)

######################### Warning from 'xts' package ##########################
#                                                                             #
# The dplyr lag() function breaks how base R's lag() function is supposed to  #
# work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or       #
# source() into this session won't work correctly.                            #
#                                                                             #
# Use stats::lag() to make sure you're not using dplyr::lag(), or you can add #
# conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop           #
# dplyr from breaking base R's lag() function.                                #
#                                                                             #
# Code in packages is not affected. It's protected by R's namespace mechanism #
# Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning.  #
#                                                                             #
###############################################################################

Attaching package: ‘dplyr’

The following objects are masked from ‘package:xts’:

    first, last

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union
library(tseries)

    ‘tseries’ version: 0.10-55

    ‘tseries’ is a package for time series analysis and computational
    finance.

    See ‘library(help="tseries")’ for details.


Attaching package: ‘tseries’

The following object is masked from ‘package:randtests’:

    runs.test
library(tidyverse)
── Attaching core tidyverse packages ────────────────────── tidyverse 2.0.0 ──
✔ forcats 1.0.0     ✔ stringr 1.5.1
✔ purrr   1.0.2     ✔ tibble  3.2.1
✔ readr   2.1.5     ✔ tidyr   1.3.1── Conflicts ──────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::first()  masks xts::first()
✖ dplyr::lag()    masks stats::lag()
✖ dplyr::last()   masks xts::last()
ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
library(plotly)
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio

Attaching package: ‘plotly’

The following object is masked from ‘package:ggplot2’:

    last_plot

The following object is masked from ‘package:stats’:

    filter

The following object is masked from ‘package:graphics’:

    layout
library(hrbrthemes)
library(xts)
library(knitr)
library(kableExtra)

Attaching package: ‘kableExtra’

The following object is masked from ‘package:dplyr’:

    group_rows
library(car)
Loading required package: carData

Attaching package: ‘car’

The following object is masked from ‘package:purrr’:

    some

The following object is masked from ‘package:dplyr’:

    recode
library(mathjaxr)
library(zoo)
rm(list=ls())

Data download

If downloading the stock-exchange data, we use the quantmod package command “getSymbols”. COmmand “Ad” enables extraction of just Adjusted closing prices of the day.

# Load the required package
library(quantmod)

# Set dates for data retrieval
start_date <- "2010-01-01"
end_date <- "2022-12-31"
symbol <-"F"

# Download the data for Apple Inc (ticker symbol: AAPL)
getSymbols(symbol, src = "yahoo", from = start_date, to = end_date, auto.assign = TRUE)
[1] "F"
# Extract the adjusted close prices
adot.close <- Ad(getSymbols(symbol, src = "yahoo", from = start_date, to = end_date, auto.assign = FALSE))
title <- paste(symbol) 
plot(adot.close, col="red", main=title)


valtozas <- diff(adot.close)
median_valtozas <- median(valtozas, na.rm = TRUE)  # Compute median excluding NA
valtozas[is.na(valtozas)] <- median_valtozas # replacing missing returns by their estimates by median




acf(valtozas,main="Autocorrelations of Price differences")

The above given Autocorrelation function is a function, which assigns each lag a correlation between actual return and a lagged return by a specified number of periods (varying from 1 to 30 ). If the correlations would be within the band between two blue dotted lines, we could accept the hypothesis that price movements of the F are not information weakly efficient. On the other side, lags 7 and 15 seem to be statistically significant (at 5 percent significance level). Remember, it can by just demonstration of the Type 1 Error !!! There are just 2 cases of 30 - that is why we are prone to reject the alternative hypothesis. We do not have any information to reject \(H_0\), prices can be considered as weakly efficient.

To test the weak form of the efficiency, we can use Runs test. We are using the diferenced time series as in the previous example. Therafter, we substitute

I changed the ticker symbol for the Apple company, which is AAPL. The data for this can be seen in the document. The correlations are within the band between two blue dotted lines most of the time (cca 30 times)-then we could accept the hypothesis that price movements of the Apple Inc are not information weakly efficient. But sometimes (4times) the correlations are off the line.



# Load the required package
library(randtests)

# Perform the Runs Test
runs_test_result <- runs.test(as.vector(valtozas))
Error in runs.test(as.vector(valtozas)) : x is not a factor

\(H_0: \quad \text{Price movements reflect a weak form of the efficiency}\) \(H_1: \quad \text{Price movements deny the weak form of the efficiency}\)

In our case p-value is high, we reject the alternative, we deny the alternative hypothesis of absenting the weak form of the efficiency.

Semi-strong form of the efficiency

All public (but not inside) information is calculated into a stock’s current price. Neither fundamental nor technical analysis can be used to achieve superior gains.

Test Event Studies: These studies examine the stock price reaction to new public information, such as earnings announcements, to determine how quickly and accurately prices adjust.

Strong form of the efficiency

Both the public and inside information is calculated into a stock current price.

LS0tCnRpdGxlOiAiVGVzdGluZyBvZiB0aGUgV2VhayBGb3JtIG9mIEVmZmljaWVuY3kiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KIyMjIEluc3RhbGxhdGlvbiBvZiB0aGUgTGlicmFyaWVzCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KaW5zdGFsbC5wYWNrYWdlcyh0aW55dGV4KQpsaWJyYXJ5KHRpbnl0ZXgpCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgoKYGBge3IsIGVjaG89RkFMU0V9Cm9wdGlvbnModGlueXRleC5tYXRoamF4ID0gVFJVRSkKYGBgCgojIyBMaWJyYXJpZXMKCklmIG1ha2luZyB0aGUgZmluYW5jaWFsIGFuYWx5c2lzIG9mIHRoZSBzdG9jayBleGNoYW5nZSBkYXRhLCB0aGUgZm9sbG93aW5nIHBhY2thZ2VzIGFyZSBuZWVkZWQ6CgoxLiBxdWFudG1vZAoyLiBQZXJmb3JtYW5jZUFuYWx5dGljcwozLiB0aWR5cXVhbnQgIAoKYGBge3IgbGlicmFyaWVzfQojaW5zdGFsbC5wYWNrYWdlcygiUGVyZm9ybWFuY2VBbmFseXRpY3MiLCByZXBvcyA9ICJodHRwOi8vY3Jhbi51cy5yLXByb2plY3Qub3JnIikKI2luc3RhbGwucGFja2FnZXMoImRwbHlyIiwgcmVwb3MgPSAiaHR0cDovL2NyYW4udXMuci1wcm9qZWN0Lm9yZyIpCiNpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5cXVhbnQiLCByZXBvcyA9ICJodHRwOi8vY3Jhbi51cy5yLXByb2plY3Qub3JnIikKI2luc3RhbGwucGFja2FnZXMoInF1YW50bW9kIiwgcmVwb3MgPSAiaHR0cDovL2NBcyBpcmFuLnVzLnItcHJvamVjdC5vcmciKQojaW5zdGFsbC5wYWNrYWdlcygidHNlcmllcyIsIHJlcG9zID0gImh0dHA6Ly9jcmFuLnVzLnItcHJvamVjdC5vcmciKQojaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIiwgcmVwb3MgPSAiaHR0cDovL2NyYW4udXMuci1wcm9qZWN0Lm9yZyIpCgpsaWJyYXJ5KFBlcmZvcm1hbmNlQW5hbHl0aWNzKSAgI3VzZWZ1bCBwYWNrYWdlICEhIQpsaWJyYXJ5KHF1YW50bW9kKSAgICAgICAgICAgICAgIyB1c2VmdWwgcGFja2FnZQpsaWJyYXJ5KHRpZHlxdWFudCkgICAgICAgICAgICAgIyB1c2VmdWwKbGlicmFyeShyYW5kdGVzdHMpICAjIGZvciBydW5zIHRlc3QKCiMgb3RoZXIgbGlicmFyaWVzCgpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkodHNlcmllcykKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocGxvdGx5KQpsaWJyYXJ5KGhyYnJ0aGVtZXMpCmxpYnJhcnkoeHRzKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KGthYmxlRXh0cmEpCmxpYnJhcnkoY2FyKQpsaWJyYXJ5KG1hdGhqYXhyKQpsaWJyYXJ5KHpvbykKcm0obGlzdD1scygpKQpgYGAKCiMjIERhdGEgZG93bmxvYWQKCklmIGRvd25sb2FkaW5nIHRoZSBzdG9jay1leGNoYW5nZSBkYXRhLCB3ZSB1c2UgdGhlIHF1YW50bW9kIHBhY2thZ2UgY29tbWFuZCAiZ2V0U3ltYm9scyIuIENPbW1hbmQgIkFkIiBlbmFibGVzIGV4dHJhY3Rpb24gb2YganVzdCBBZGp1c3RlZCBjbG9zaW5nIHByaWNlcyBvZiB0aGUgZGF5LgoKCgpgYGB7cn0KIyBMb2FkIHRoZSByZXF1aXJlZCBwYWNrYWdlCmxpYnJhcnkocXVhbnRtb2QpCgojIFNldCBkYXRlcyBmb3IgZGF0YSByZXRyaWV2YWwKc3RhcnRfZGF0ZSA8LSAiMjAxMC0wMS0wMSIKZW5kX2RhdGUgPC0gIjIwMjItMTItMzEiCnN5bWJvbCA8LSJGIgoKIyBEb3dubG9hZCB0aGUgZGF0YSBmb3IgQXBwbGUgSW5jICh0aWNrZXIgc3ltYm9sOiBBQVBMKQpnZXRTeW1ib2xzKHN5bWJvbCwgc3JjID0gInlhaG9vIiwgZnJvbSA9IHN0YXJ0X2RhdGUsIHRvID0gZW5kX2RhdGUsIGF1dG8uYXNzaWduID0gVFJVRSkKCiMgRXh0cmFjdCB0aGUgYWRqdXN0ZWQgY2xvc2UgcHJpY2VzCmFkb3QuY2xvc2UgPC0gQWQoZ2V0U3ltYm9scyhzeW1ib2wsIHNyYyA9ICJ5YWhvbyIsIGZyb20gPSBzdGFydF9kYXRlLCB0byA9IGVuZF9kYXRlLCBhdXRvLmFzc2lnbiA9IEZBTFNFKSkKCmBgYAoKCgoKCgpgYGB7cn0KdGl0bGUgPC0gcGFzdGUoc3ltYm9sKSAKcGxvdChhZG90LmNsb3NlLCBjb2w9InJlZCIsIG1haW49dGl0bGUpCmBgYAoKYGBge3J9Cgp2YWx0b3phcyA8LSBkaWZmKGFkb3QuY2xvc2UpCm1lZGlhbl92YWx0b3phcyA8LSBtZWRpYW4odmFsdG96YXMsIG5hLnJtID0gVFJVRSkgICMgQ29tcHV0ZSBtZWRpYW4gZXhjbHVkaW5nIE5BCnZhbHRvemFzW2lzLm5hKHZhbHRvemFzKV0gPC0gbWVkaWFuX3ZhbHRvemFzICMgcmVwbGFjaW5nIG1pc3NpbmcgcmV0dXJucyBieSB0aGVpciBlc3RpbWF0ZXMgYnkgbWVkaWFuCgoKCgphY2YodmFsdG96YXMsbWFpbj0iQXV0b2NvcnJlbGF0aW9ucyBvZiBQcmljZSBkaWZmZXJlbmNlcyIpCmBgYApUaGUgYWJvdmUgZ2l2ZW4gQXV0b2NvcnJlbGF0aW9uIGZ1bmN0aW9uIGlzIGEgZnVuY3Rpb24sIHdoaWNoIGFzc2lnbnMgZWFjaCBsYWcgYSBjb3JyZWxhdGlvbiBiZXR3ZWVuIGFjdHVhbCByZXR1cm4gYW5kIGEgbGFnZ2VkIHJldHVybiBieSBhIHNwZWNpZmllZCBudW1iZXIgb2YgcGVyaW9kcyAodmFyeWluZyBmcm9tIDEgdG8gMzAgKS4gSWYgdGhlIGNvcnJlbGF0aW9ucyB3b3VsZCBiZSB3aXRoaW4gdGhlIGJhbmQgYmV0d2VlbiB0d28gYmx1ZSBkb3R0ZWQgbGluZXMsIHdlIGNvdWxkIGFjY2VwdCB0aGUgaHlwb3RoZXNpcyB0aGF0IHByaWNlIG1vdmVtZW50cyBvZiB0aGUgRiAgYXJlIG5vdCBpbmZvcm1hdGlvbiB3ZWFrbHkgZWZmaWNpZW50LiBPbiB0aGUgb3RoZXIgc2lkZSwgbGFncyA3IGFuZCAxNSBzZWVtIHRvIGJlIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgKGF0IDUgcGVyY2VudCBzaWduaWZpY2FuY2UgbGV2ZWwpLiBSZW1lbWJlciwgaXQgY2FuIGJ5IGp1c3QgZGVtb25zdHJhdGlvbiBvZiB0aGUgVHlwZSAxIEVycm9yICEhISBUaGVyZSBhcmUganVzdCAyIGNhc2VzIG9mIDMwIC0gdGhhdCBpcyB3aHkgd2UgYXJlIHByb25lIHRvIHJlamVjdCB0aGUgYWx0ZXJuYXRpdmUgaHlwb3RoZXNpcy4gV2UgZG8gbm90IGhhdmUgYW55IGluZm9ybWF0aW9uIHRvIHJlamVjdCAkSF8wJCwgcHJpY2VzIGNhbiBiZSBjb25zaWRlcmVkIGFzIHdlYWtseSBlZmZpY2llbnQuCgpUbyB0ZXN0IHRoZSB3ZWFrIGZvcm0gb2YgdGhlIGVmZmljaWVuY3ksIHdlIGNhbiB1c2UgUnVucyB0ZXN0LiBXZSBhcmUgdXNpbmcgdGhlIGRpZmVyZW5jZWQgdGltZSBzZXJpZXMgYXMgaW4gdGhlIHByZXZpb3VzIGV4YW1wbGUuIFRoZXJhZnRlciwgd2Ugc3Vic3RpdHV0ZQoKSSBjaGFuZ2VkIHRoZSB0aWNrZXIgc3ltYm9sIGZvciB0aGUgQXBwbGUgY29tcGFueSwgd2hpY2ggaXMgQUFQTC4gVGhlIGRhdGEgZm9yIHRoaXMgY2FuIGJlIHNlZW4gaW4gdGhlIGRvY3VtZW50LiBUaGUgY29ycmVsYXRpb25zIGFyZSB3aXRoaW4gdGhlIGJhbmQgYmV0d2VlbiB0d28gYmx1ZSBkb3R0ZWQgbGluZXMgbW9zdCBvZiB0aGUgdGltZSAoY2NhIDMwIHRpbWVzKS10aGVuIHdlIGNvdWxkIGFjY2VwdCB0aGUgaHlwb3RoZXNpcyB0aGF0IHByaWNlIG1vdmVtZW50cyBvZiB0aGUgQXBwbGUgSW5jIGFyZSBub3QgaW5mb3JtYXRpb24gd2Vha2x5IGVmZmljaWVudC4gQnV0IHNvbWV0aW1lcyAoNHRpbWVzKSB0aGUgY29ycmVsYXRpb25zIGFyZSBvZmYgdGhlIGxpbmUuCgoKCmBgYHtyfQoKCiMgTG9hZCB0aGUgcmVxdWlyZWQgcGFja2FnZQpsaWJyYXJ5KHJhbmR0ZXN0cykKCiMgUGVyZm9ybSB0aGUgUnVucyBUZXN0CnJ1bnNfdGVzdF9yZXN1bHQgPC0gcnVucy50ZXN0KGFzLnZlY3Rvcih2YWx0b3phcykpCgojIFByaW50IHRoZSByZXN1bHQKcHJpbnQocnVuc190ZXN0X3Jlc3VsdCkKCmBgYAoKJEhfMDogXHF1YWQgXHRleHR7UHJpY2UgbW92ZW1lbnRzIHJlZmxlY3QgYSB3ZWFrIGZvcm0gb2YgdGhlIGVmZmljaWVuY3l9JAokSF8xOiBccXVhZCBcdGV4dHtQcmljZSBtb3ZlbWVudHMgZGVueSB0aGUgd2VhayBmb3JtIG9mIHRoZSBlZmZpY2llbmN5fSQKCgpJbiBvdXIgY2FzZSBwLXZhbHVlIGlzIGhpZ2gsIHdlIHJlamVjdCB0aGUgYWx0ZXJuYXRpdmUsIHdlIGRlbnkgdGhlIGFsdGVybmF0aXZlIGh5cG90aGVzaXMgb2YgYWJzZW50aW5nIHRoZSB3ZWFrIGZvcm0gb2YgdGhlIGVmZmljaWVuY3kuCgojIyBTZW1pLXN0cm9uZyBmb3JtIG9mIHRoZSBlZmZpY2llbmN5CgoKCkFsbCBwdWJsaWMgKGJ1dCBub3QgaW5zaWRlKSBpbmZvcm1hdGlvbiBpcyBjYWxjdWxhdGVkIGludG8gYSBzdG9jaydzIGN1cnJlbnQgIHByaWNlLiBOZWl0aGVyIGZ1bmRhbWVudGFsIG5vciB0ZWNobmljYWwgYW5hbHlzaXMgY2FuIGJlIHVzZWQgdG8gYWNoaWV2ZSBzdXBlcmlvciBnYWlucy4KClRlc3QgRXZlbnQgU3R1ZGllczogVGhlc2Ugc3R1ZGllcyBleGFtaW5lIHRoZSBzdG9jayBwcmljZSByZWFjdGlvbiB0byBuZXcgcHVibGljIGluZm9ybWF0aW9uLCBzdWNoIGFzIGVhcm5pbmdzIGFubm91bmNlbWVudHMsIHRvIGRldGVybWluZSBob3cgcXVpY2tseSBhbmQgYWNjdXJhdGVseSBwcmljZXMgYWRqdXN0LgoKIyMgU3Ryb25nIGZvcm0gb2YgdGhlIGVmZmljaWVuY3kKCkJvdGggdGhlIHB1YmxpYyBhbmQgaW5zaWRlIGluZm9ybWF0aW9uIGlzIGNhbGN1bGF0ZWQgaW50byBhIHN0b2NrIGN1cnJlbnQgcHJpY2UuCgo=