Finansal Verileri Almak ve Bir Şamdan  Grafiği Çizmek İçin R ve Python’u Bağlamak

R ile Python’dan çok daha fazla deneyimim var ve mümkün olduğunda bu dilde kodlamayı tercih ediyorum. Bu, özellikle görselleştirmelerle ilgili olduğunda geçerlidir. Plotly ve ggplot2, çok fazla esneklik sağlayan harika paketlerdir. Bununla birlikte, her dilin sınırlamaları vardır ve en iyi sonuçlar, bunların verimli kombinasyonlarından kaynaklanır. 

Bu hafta, aşağıdaki şamdanı oluşturdum ve birkaç şeyi göstermek için mükemmel bir örnek olay incelemesi olduğunu düşünüyorum: 

Python’daInvestpy paketini kullanarak Investing.com’dan finansal veriler nasıl indirilir 

Reticulate paketini dağıtarak Python ve R’nin yetenekleri nasıl verimli bir şekilde birleştirilir? 

ggplot2, ggthemes ve iki basit özel işlevle güzel biçimlendirilmiş bir mum grafiği nasıl oluşturulur 

Sonuç, yüksek çözünürlüklü Ölçeklenebilir Vektör Grafikleri (SVG) dahil olmak üzere farklı görüntü formatlarında nasıl dışa aktarılır? 

Python kısmı 

Gerekli Python koduyla başlayalım. İlk olarak, aşağıdaki basit işlevi çalıştırmak için investitpy paketini pip kullanarak kurmamız gerekiyor. Investpy, Investing.com sayfasının genel API’sini çevreleyen harika ve çok güçlü bir sarmalayıcıdır. Hisse senetleri, tahviller, ETF’ler, yatırım fonları, endeksler, para birimleri, emtialar ve kripto para birimleri dahil olmak üzere çok çeşitli finansal araçlar için gün sonu fiyat verilerinin alınmasına ve ayrıca seçilen meta verilerin indirilmesine olanak tanır. Ayrıntılı belgeler burada veya pdf formatında bu bağlantı altında bulunabilir. Aşağıda tanımlanan işlevi bir python betiğine kaydedin. 

#pip install investpy

def get_fx_cross_investpy(currency_cross,st_date,ed_date):    
    import investpy
    data = investpy.get_currency_cross_historical_data(currency_cross=currency_cross, from_date=st_date, to_date=ed_date)
    return(data)

R Kısmı

install.packages("reticulate")
install.packages("ggplot2")
install.packages("ggthemes")
install.packages("scales")

Güzel Bir Tema Tanımlama 

Ggthemes paketi, ggplot2 grafikleri için birkaç güzel varsayılan tema ile birlikte gelir. Örneğin, Economist’in ünlü tasarımını veya tipik Stata çizelgelerinin görünümünü kopyalayabilirsiniz. Ancak, bu temaları uyarlamak ve benzersiz varsayılan düzeninizi oluşturmak da mümkündür. Bunu standart biçimlendirmem için aşağıda gösteriyorum. Burada tanımlanan işlev daha sonra mum çubuğu işlevinde kullanılır. 

theme_aq_black_default_font<-
  function (base_size = 12, base_family = "") 
  {
    library(ggplot2)
    library(ggthemes)
    library(scales)
    col_aq2<-as.character(c("#04103b","#dd0400","#3b5171","#5777a7","#969696","#BDBDBD","#D9D9D9","#F0F0F0"))
    
    theme_hc(base_size = base_size, base_family = base_family) %+replace% 

Şamdan Grafiği Fonksiyonu 

Şamdan grafiği, fiyat verilerinin görselleştirilmesinde ve teknik analizlerde yaygın olarak kullanılmaktadır. İzleyicilerin piyasa hareketlerinin önemini hızlı bir şekilde ölçmesine ve gelecekte geri döndürülebilecek potansiyel direnç seviyelerini veya olağanüstü fiyat sıçramalarını analiz etmesine olanak tanır. Yukarıda gösterilen günlük mum çubuğunu oluşturmak için günlük açılış ve kapanış fiyatlarının yanı sıra gün içi en yüksek ve en düşük fiyatlara ihtiyacımız var. Neyse ki, bunların hepsi Investing.com’da mevcut ve yukarıda tanımlanan fonksiyonumuzla kullanışlı bir veri çerçevesi olarak alınabilir. 

ggplot_candlestick<-function(df,width=0.9,chart_title,chart_subtitle)
{
    library(ggplot2)
  df$Date<-row.names(df)
  df$Date<-as.Date(df$Date,"%Y-%m-%d")
  df$chg  df$Open, "dn", "up")
  cols<-as.character(c("#04103b","#dd0400","#3b5171","#5777a7","#969696","#BDBDBD","#D9D9D9","#F0F0F0"))
  
  p<-
    ggplot(data=df,aes(x=as.Date(Date), y=High))+
    geom_linerange(aes(ymin=Low, ymax=High)) +
    geom_rect(aes(xmin = Date - width/2 * 0.9, xmax = Date + width/2 * 0.9, ymin = pmin(Open, Close), ymax = pmax(Open, Close), fill = df$chg)) + 
    scale_fill_manual(values = c("up" = "darkred", "dn" = "darkgreen"))+
    scale_colour_manual(values = cols)+
    theme_aq_black_default_font(base_size=18)+
    labs(color='')+
    labs(title=chart_title,subtitle=chart_subtitle,x ="")+
    labs(caption = paste0('Source: DataScience+, Investing.com  ', Sys.Date()))+
    guides(colour = guide_legend(nrow = 1))+
    scale_x_date(labels = date_format("%y/%m"))+
    theme(legend.position = "none",legend.margin=margin(-20,-20,-20,-20),legend.box.margin=margin(0,0,30,0))+
    ylab("")+
    theme(plot.margin=margin(l=5,r=20,b=5,t=5))

  return(p)
}

Verileri Çizin ve Grafiği Dışa Aktarın 

Son olarak, tüm bu modülleri birleştirelim ve adım adım uygulayalım. Reticulate paketini kullanarak Python fonksiyonumuzu yükledikten sonra, bunu R’de yatırımdan finansal verileri almak için kullanabiliriz. Daha sonra mum grafiğini oluşturmak için önceden tanımlanmış R fonksiyonlarımızı kullanabiliriz. Ardından çizim, ggsave kullanılarak PNG veya SVG grafiği olarak kolayca dışa aktarılabilir. 

# Load the python function and retrieve the financial data
library(reticulate)
source_python("C:/Users/Fabian/Desktop/get_rates_investing.com.py")
df<-get_fx_cross_investpy("USD/RUB",'01/01/2022','01/05/2022')   

# Use the R functions and plot the data
p<-ggplot_candlestick(df,chart_title="Following its crash, the Russian Ruble rebounded sharply",chart_subtitle="USD/RUB exchange rate")
p

# Save the plot
target_folder<-"C:/Users/Fabian/Desktop/"
ggsave(file=paste0(target_folder,"candlestick_usd_rub.svg"), plot=p, width=9, height=5)
ggsave(file=paste0(target_folder,"candlestick_usd_rub.png"), plot=p, width=9, height=5)

Kaynak: https://www.r-bloggers.com/2022/04/linking-r-and-python-to-retrieve-financial-data-and-plot-a-candlestick/

Çeviren: Emre Gök