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"))