# Gerekli Kütüphanele
##install.packages("readxl")
##install.packages("dplyr")
##install.packages("ggplot2")
##install.packages("lubridate")
##install.packages("purrr")
##install.packages("ggtext")


library(readxl)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
library(purrr)
library(ggtext)
tcmb_faiz_sozlugu <- data.frame(
  Tarih_Text = c(
    "22.06.2023", "20.07.2023", "24.08.2023", "21.09.2023", 
    "26.10.2023", "23.11.2023", "21.12.2023",
    "25.01.2024", "22.02.2024", "21.03.2024",
    "25.04.2024",
    "23.05.2024", "27.06.2024", "23.07.2024", "20.08.2024", "19.09.2024", "17.10.2024", 
    "21.11.2024", "26.12.2024", 
    "23.01.2025", "06.03.2025", "17.04.2025", 
    "19.06.2025", "24.07.2025", "11.09.2025", "23.10.2025", "11.12.2025", 
    "22.01.2026", "12.03.2026","22.04.2026"
  ),
  Eski_Faiz = c(
    8.5, 15.0, 17.5, 25.0, 
    30.0, 35.0, 40.0, 42.5, 45.0, 45.0, 
    50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 
    50.0, 50.0, 50.0, 47.5, 45.0, 42.5, 
    46.0, 46.0, 43.0, 40.5, 39.5, 38.0, 
    37.0, 37.0
  ),
  Yeni_Faiz = c(
    15.0, 17.5, 25.0, 30.0, 
    35.0, 40.0, 42.5, 45.0, 45.0, 50.0, 
    50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 
    50.0, 50.0, 47.5, 45.0, 42.5, 46.0, 
    46.0, 43.0, 40.5, 39.5, 38.0, 37.0, 
    37.0, 37.0
  )
) %>%
  mutate(
    # Tarih formatını R'ın anlayacağı şekle çeviriyoruz
    Tarih = dmy(Tarih_Text),
    # Grafiğin alt başlığına otomatik yazdırmak için etiket oluşturuyoruz
    Aksiyon = paste0("%", Eski_Faiz, " -> %", Yeni_Faiz)
  )

# Sonucu görelim
head(tcmb_faiz_sozlugu)
##   Tarih_Text Eski_Faiz Yeni_Faiz      Tarih      Aksiyon
## 1 22.06.2023       8.5      15.0 2023-06-22  %8.5 -> %15
## 2 20.07.2023      15.0      17.5 2023-07-20 %15 -> %17.5
## 3 24.08.2023      17.5      25.0 2023-08-24 %17.5 -> %25
## 4 21.09.2023      25.0      30.0 2023-09-21   %25 -> %30
## 5 26.10.2023      30.0      35.0 2023-10-26   %30 -> %35
## 6 23.11.2023      35.0      40.0 2023-11-23   %35 -> %40
dosya_adi <- "C:/Users/incet/Desktop/xu100_reaction/ppk_karar_gunu_xu100_tepki_yeni.xlsx"

sekme_isimleri <- excel_sheets(dosya_adi)
# 2.  GRAFIK MOTORU
grafik_motoru <- function(sekme) {
  
  
  raw_veri <- read_excel(dosya_adi, sheet = sekme) %>% 
    select(1:2) %>% 
    setNames(c("Zaman_Text", "Fiyat_Text"))
  
  analiz_verisi <- raw_veri %>%
    mutate(
      # Fiyati temizle
      Fiyat = as.numeric(gsub(",", ".", Fiyat_Text)),
      Zaman = parse_date_time(Zaman_Text, orders = c("ymd_HMS", "dmy_HMS", "ymd_HM", "dmy_HM")),
      Tarih_Saf = as.Date(Zaman)
    ) %>%
    # Hatali satirlari cikar
    filter(!is.na(Zaman) & !is.na(Fiyat))%>%
    arrange(Zaman)
  
  gunun_tarihi <- analiz_verisi$Tarih_Saf[1]
  faiz_bilgisi <- tcmb_faiz_sozlugu %>% filter(Tarih == gunun_tarihi)
  
  alt_baslik <- if(nrow(faiz_bilgisi) > 0) paste("1 Haftalık Repo Faizi:" , faiz_bilgisi$Aksiyon[1])  else "Olay Penceresi (13:00 - 15:00)" 
  
  karar_ani <- ymd_hms(paste(gunun_tarihi, "14:00:00"))
  
  p <- ggplot(analiz_verisi, aes(x = Zaman, y = Fiyat)) +
    geom_ribbon(aes(ymin = min(Fiyat) * 0.998, ymax = Fiyat), fill = "#1A237E", alpha = 0.08) + 
    geom_line(color = "#1A237E", linewidth = 1.2,lineend = "round",linejoin = "round") +
    
    geom_vline(xintercept = karar_ani, linetype = "dashed", color = "#D32F2F", linewidth = 1) +
    annotate("text", x = karar_ani - minutes(45), y = max(analiz_verisi$Fiyat) * 1.001, 
             label = "Karar", color = "#D32F2F", fontface = "bold", hjust = 0) +
    
    theme_minimal() +
    labs(
      title = paste("BIST 100 Reaksiyonu -", format(gunun_tarihi, "%d %b %Y")),
      subtitle = alt_baslik,
      x = "",
      y = ""
    ) +
    scale_x_datetime(date_labels = "%H:%M", date_breaks = "30 min") +
    coord_cartesian(ylim = c(min(analiz_verisi$Fiyat) * 0.998, max(analiz_verisi$Fiyat) * 1.002)) +
    theme(
      plot.title = element_text(face = "bold", size = 14),
      plot.subtitle = element_text(color = "#555555", face = "italic", size = 12),
      axis.text.x = element_text(angle = 45, hjust = 1),
      panel.grid.major = element_line(color = "gray90", linewidth = 0.5),
      panel.grid.minor = element_blank(), 
      panel.background = element_rect(fill = "white", color = NA) 
    )
  
  return(p)
}

# 3. BUTUN GRAFIKLERI CIZ
tum_grafikler <- map(sekme_isimleri, grafik_motoru)
tum_grafikler
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

## 
## [[5]]

## 
## [[6]]

## 
## [[7]]

## 
## [[8]]

## 
## [[9]]

## 
## [[10]]

## 
## [[11]]

## 
## [[12]]

## 
## [[13]]

## 
## [[14]]

## 
## [[15]]

## 
## [[16]]

## 
## [[17]]

## 
## [[18]]

## 
## [[19]]

## 
## [[20]]

## 
## [[21]]

## 
## [[22]]

## 
## [[23]]

## 
## [[24]]

## 
## [[25]]

## 
## [[26]]

## 
## [[27]]

## 
## [[28]]

## 
## [[29]]

## 
## [[30]]