R ile Kripto Paralar için Teknik Analiz Uygulamaları

Bu yazımızda, Poloniex kripto para borsasında işlem yapmak için oluşturulan PoloniexR kütüphanesini kullanarak kripto paralar ile teknik analiz incelemeleri yapacağız.

Tanımlamalar

Öncelikle sistemimizde gerekli kütüphaneler eksik ise kurulumu yapılmalıdır. Bu yazımızda ilk kez CRAN haricinde Github’dan bir kütüphane kullanacağız. Bunun için sistemimizde devtools kütüphanesinin yüklü olması gereklidir. Github üzerinden kütüphane yüklemeleri, devtools kütüphanesi içerisindeki install_github
fonksiyonu ile “kullanıcıadi/kütüphaneadi” biçiminde yapılmaktadır.

install.packages("devtools")
devtools::install_github("VermeirJellen/PoloniexR")

install.packages(c("quantmod"))

Ana kütüphaneleri aktif hale getirelim.

library(PoloniexR)
library(quantmod)

Genellikle borsalar 3 tip bağlantı kurmamızı sağlayan API (application programming interface) sunmaktadırlar. Bunlar, public (genel), private (özel), push (sürekli) API’lerdir. Public API’ler, istek (request) bazlı çalışır ve kripto paralar ile ilgili tarihsel fiyatları, hacim bilgileri, gerçekleşen işlem kayıtları gibi bilgileri gönderir. Private API’lerde public API’ler gibi istek bazlı çalışırlar ve sizin borsada işlem yapmanız için aracılık ederler. Bu nedenle bu API’lere trading API’ler de denmektedir. Trading API’ler için borsada hesabınız olmalı ve bu tür işlemler için hesabınızı yetkilendirmeniz gereklidir.

PoloniexR

Public API ile kullanabileceğimiz fonksiyonlar şunlardır:
ReturnTicker: Kripto paraların sorgu anındaki güncel fiyat bilgilerini getirmektedir.
Return24hVolume: son 24 saatlik hacim bilgilerini hem ikili bazında hem de toplam olarak getirmektedir.
ReturnTradeHistory: İlgilenilen kripto para için iki tarih arasında borsada gerçekleşen işlemleri getirmektedir.
ReturnChartData: İlgilenilen kripto para için iki tarih arasındaki tarihsel fiyatları getirmektedir.
ReturnCurrencies: Kripto paralar ile ilgili güncel bilgileri getirmektedir.

ReturnTicker

Fonksiyon ile ilgili yardım dokümanlarına ulaşmak için konsola ?ReturnTicker yazıp çalıştırabiliriz. Öncelikle API bağlantı fonksiyonumuzu çalıştırıyoruz. Ardından ReturnTicker fonksiyonu ile borsada işlem gören tüm kripto paralar için anlık fiyat bilgilerini alıyoruz.

API <- PoloniexPublicAPI()
kur.bilgileri <- ReturnTicker(API)
head(kur.bilgileri)
##          id       last  lowestAsk highestBid percentChange    baseVolume
## BTC_BCN   7 0.00000093 0.00000094 0.00000093   -0.04123711 1462.55167948
## BTC_BELA  8 0.00002807 0.00002806 0.00002800    0.04895366   30.03836595
## BTC_BLK  10 0.00006459 0.00006457 0.00006371    0.17287089   95.82165456
## BTC_BTCD 12 0.02210894 0.02249967 0.02210989    0.10887453   34.63337853
## BTC_BTM  13 0.00019616 0.00019615 0.00019382    0.07976000    7.13669381
## BTC_BTS  14 0.00004871 0.00004871 0.00004866    0.06423421  824.73815852
##                  quoteVolume isFrozen   high24hr    low24hr
## BTC_BCN  1544649043.93776155        0 0.00000105 0.00000081
## BTC_BELA    1051902.94244731        0 0.00003060 0.00002655
## BTC_BLK     1451417.15959250        0 0.00007657 0.00005483
## BTC_BTCD       1671.35465568        0 0.02341361 0.01815658
## BTC_BTM       36294.63616187        0 0.00021018 0.00018100
## BTC_BTS    16833914.60685821        0 0.00005320 0.00004552

ReturnChartData

Fonksiyon ile ilgili yardım dokümanlarına ulaşmak için konsola ?ReturnChartData yazıp çalıştırabiliriz. ReturnChartData fonksiyonu ile ilgilendiğimiz kripto para için açılış, kapanış, en düşük, en yüksek ve hacim bilgilerini; 5M, 15M, 30M, 2H, 4H ve D seçenekleri ile tarihsel olarak alınabilmektedir. Fonksiyon, tarihsel data olarak daha önceki yazılarımızda incelediğimiz xts zaman serisi objesini döndürmektedir.

Genellikle dış kaynaklar ile yapılan işlemlerde “zaman kavramı” bir karmaşaya neden olabilmektedir. Poloniex, kayıtlarını UTC’ye (eş güdümlü evrensel zaman) göre tutmaktadır. Bu nedenle R ile analizlerimizde saat dilimimizi (time zone) UTC olarak belirlememiz önemlidir.

Analizimizde özellikle son dönemde ciddi bir artış gösteren ve bankacılık sektörü ile yaptığı anlaşmalar ile gözleri üzerine çeken Ripple (USDT/XRP) kripto parasını inceleyelim.

Sys.setenv(tz="UTC")

kur <- "USDT_XRP"

baslangic <- as.POSIXct("2016-06-01 00:00:00 UTC")
bitis <- as.POSIXct("2019-01-01 00:00:00 UTC")

data <- ReturnChartData(theObject = API, 
                        pair      = kur, 
                        from      = baslangic, 
                        to        = bitis, 
                        period    = "D")
tail(data)
##                high      low     open    close    volume quotevolume
## 2018-01-02 2.199000 1.900000 2.040000 2.190000  49664153    23996634
## 2018-01-03 2.855000 2.145000 2.185000 2.717000  80545484    32139034
## 2018-01-04 3.283381 2.450000 2.725800 2.730000 130571805    44434663
## 2018-01-05 3.049000 2.200000 2.731695 2.499643  92015432    34748034
## 2018-01-06 2.850000 2.450000 2.499643 2.645000  30009260    11256455
## 2018-01-07 2.745800 2.561763 2.645000 2.677000   9242474     3478036
##            weightedaverage
## 2018-01-02        2.069630
## 2018-01-03        2.506158
## 2018-01-04        2.938512
## 2018-01-05        2.648076
## 2018-01-06        2.665960
## 2018-01-07        2.657383

quantmod ile Teknik Analiz

Teknik analiz ile yapılan incelemelerde sıklıkla tarihsel olarak açılış (open), en yüksek (high), en düşük (low), kapanış (close) fiyatları gereklidir. Bu nedenle data isimli xts tipindeki değişkenimizi istediğimiz biçime dönüştürelim.

ohlc <- data[, c("open","high","low","close")]

TTR kütüphanesi R içerisindeki en gelişmiş teknik analiz kütüphanesidir. Bunu detaylı olarak farklı bir yazımızda inceleyeceğiz. quantmod kütüphanesi, TTR kütüphanesi ile yaptığımız analizleri grafik olarak incelememizi sağlamaktadır.

chartSeries(ohlc,
            theme       = "white",
            major.ticks = "days",
            name        = kur,
            TA          = "addMACD();
                           addCCI(n=9);
                           addRSI(n=14, maType='SMA');
                           addBBands()",
            subset      = "201711/201802")

Aşağıdaki tabloda, TTR kütüphanesi içerisindeki bazı indikatörlerin chartSeries ile oluşturduğumuz grafiğe eklenmesi için eşdeğerleri quantmod fonksiyonları yer almaktadır.

İndikatör TTR quantmod
Welles Wilder’s Directional Movement Indicator ADX addADX
Average True Range ATR addATR
Bollinger Bands BBands addBBands
Bollinger Band Width N/A addBBands
Bollinger %b N/A addBBands
Commodity Channel Index CCI addCCI
Chaiken Money Flow CMF addCMF
Chande Momentum Oscillator CMO addCMO
Double Exponential Moving Average DEMA addDEMA
Detrended Price Oscillator DPO addDPO
Exponential Moving Average EMA addEMA
Price Envelope N/A addEnvelope
Exponential Volume Weigthed Moving Average EVWMA addEVWMA
Options and Futures Expiration N/A addExpiry
Moving Average Convergence Divergence MACD addMACD
Momentum momentum addMomentum
Rate of Change ROC addROC
Relative Strength Indicator RSI addRSI
Parabolic Stop and Reverse SAR addSAR
Simple Moving Average SMA addSMA
Stocastic Momentum Index SMI addSMI
Triple Smoothed Exponential Oscillator TRIX addTRIX
Volume N/A addVo
Weighted Moving Average WMA addWMA
Williams %R WPR addWPR
ZLEMA ZLEMA addZLEMA

addTA

Örneğin TTR kütüphanesi içerisinde TDI (trend direction index) fonksiyonunu grafik analizimizde kullanmak istiyoruz ancak yukarıdaki tabloda tanımlı değil. Bu gibi durumlar için quantmod bize yeni indikatör ekleyebileceğimiz bir fonksiyonlar sağlamış durumda.

chartSeries(ohlc,
            theme       = "white",
            major.ticks = "days",
            name        = kur,
            TA          = "addMACD();
                           addCCI(n=9);
                           addRSI(n=14, maType='SMA');
                           addBBands()",
            subset      = "201711/201802")

addTA(TDI(ohlc[,"close"]), col=c("red","blue"))