Pages:
Author

Topic: Pine ile Tradingview'de kendi göstergelerinizi çizdirin - page 2. (Read 658 times)

sr. member
Activity: 340
Merit: 278
Bildiğiniz üzere Tradingview'in ücretsiz versiyonu belirli bir sayıdan fazla gösterge eklemenize izin vermiyor. Üstelik hazır olarak sunulan göstergeler her zaman dişimize göre olmuyor. Bu sınırlamanın kısmen de olsa etrafından dolanmanın basit ve eğlenceli bir yolu var. Tradingview öğrenmesi gayet kolay ve bir o kadar da kullanışlı olan Pine adlı bir betik dili içeriyor. Bu dili kullanarak hemen her türlü göstergeyi kendi meşrebinize göre ayarlayıp grafiğe ekleyebilir, sürekli kullandığınız birkaç indikatörü bir başlık altında bir araya getirerek başka indikatörlere yer açabilirsiniz.

Mesela bir zamanlar benim de yaptığım gibi, 3-5 tane hareketli ortalama ve Ichimoku bulutunu sürekli kullanıyorsanız, bütün bunları tek bir başlık altında toplayabilirsiniz:

Code:
//@version=4
study(title="Ichimoku Bulutu ve Beşli Hareketli Ortalama", shorttitle="Crypto Ichimoku + Beşli-MA ", overlay=true)

//Hareketli Ortalama Girdileri
drawsma = input(true, title = "SMA Çizilsin mi?")
ma_1p =  input(9, title="MA1")
ma_2p =  input(21, title="MA2")
ma_3p =  input(55, title="MA3")
ma_4p =  input(100, title="MA4")
ma_5p =  input(150, title="MA5")
ma_6p =  input(200, title="MA6")

//Ichimoku Girdileri
drawichimoku = input(true, "Ichimoku Çizilsin mi?")
conversionPeriods = input(20, minval=1, title="Tenkan-Sen Devir Sayısı"),
basePeriods = input(60, minval=1, title="Kijun-Sen Devir Sayısı")
laggingSpan2Periods = input(120, minval=1, title="Chikou Span Devir Sayısı"),
displacement = input(30, minval=1, title="Öteleme")

//Hesaplar
ma_1 = sma(close, ma_1p)
ma_2 = sma(close, ma_2p)
ma_3 = sma(close, ma_3p)
ma_4 = sma(close, ma_4p)
ma_5 = sma(close, ma_5p)
ma_6 = sma(close, ma_6p)

donchian(len) => avg(lowest(len), highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)

//Ichimoku çizimi
plot(conversionLine, color=drawichimoku ? #0496ff : na, title="Tenkan-Sen")
plot(baseLine, color=drawichimoku ? #991515 : na, title="Kijun-Sen")
plot(close, offset = -displacement, color=drawichimoku ? #459915 : na, title="Chikou-Span")
p1 = plot(leadLine1, offset = displacement, color=drawichimoku ? color.green : na, title="Senkou A")
p2 = plot(leadLine2, offset = displacement, color=drawichimoku ? color.red : na,  title="Senkou B")
fill(p1, p2, color = leadLine1 > leadLine2 ? color.green : color.red, transp = drawichimoku ? 70:100)

//SMA Çizimi
plot(ma_1, color=drawsma ? color.yellow : na, title="MA1")
plot(ma_2, color=drawsma ? color.orange : na, title="MA2")
plot(ma_3, color=drawsma ? color.fuchsia : na, title="MA3")
plot(ma_4, color=drawsma ? color.red : na, title="MA4")
plot(ma_5, color=drawsma ? color.blue : na, title="MA5")
plot(ma_6, color=drawsma ? color.purple : na, title="MA6")


Kodu kısaca özetleyecek olursak:

  • ikinci satırda koda bir isim veriyoruz. Tabloda görünecek olan isim shorttitle kısmı.
  • ardından SMA eğrilerinin tümünün çizimini devre dışı bırakmak veya açmak için kullanabileceğimiz drawsma adlı bir değişken oluşturuyoruz.
  • ardından ma_1p ile başlayan altı farklı değişken oluşturup, bunlara 9 ile başlayıp 200 ile biten farklı varsayılan değerler atıyoruz. Bunlar hareketli ortalama hesaplanırken kullanılan devir (mum) sayıları olacak.
  • aynı prosedürü Ichimoku bulutunu çizmek için gereken değişkenler için uyguluyoruz.
  • atadığımız bu değişkenler input fonskiyonuna verildiği için kullanıcılar indikatörün ayarlar kısmından bu varsayılan değerleri kolayca değiştirebilecekler.
  • ardından SMA ve Ichimoku için gerekli hesaplamaları yaparak çıkan sonuçları değişkenlere depoluyoruz.
  • son olarak da plot fonksiyonu kullanarak elde ettiğimiz verileri tablo üzerine çizdiriyoruz.

6 değil 7 tane hareketli ortalama çizdirmek istiyorsanız yukarıdaki patterni kullanarak önce girdi kısmına ma_7p, sonra hesap kısmına ma_7, sonra da çizim kısmına plot(ma_7) eklemeniz yeterli olacaktır. Ayarlar kısmı karmakarışık olmasın diye her hareketli ortalama için ayrı bir aç kapa düğmesi koymadım ama eğer bunu eklemek isterseniz önce bunun için bir değişken oluşturmanız gerekir. Mesela girdiler kısmına şunu ekleyebilirsiniz:

Code:
drawsma1 = input(true, title = "SMA1 Çizilsin mi?")

Ardından ma_1 adlı değişkeni grafiğe ekleyen plot fonksiyonunu şu şekilde değiştirebilirsiniz:

Code:
plot(ma_1, color=(drawsma and drawsma1) ? color.yellow : na, title="MA1")

Burada kullandığımız soru işareti sayesinde plot fonksiyonuna renk ataması yapmadan önce drawsma ve drawsma1 değişkenlerinin her ikisinin birden değerine bakmasını ve her ikisi birden sıfırdan farklı ise yani boolean true değerini içeriyorsa sarı renk kullanmasını, aksi takdirde renk kullanmamasını söylemiş oluyoruz, böylece SMA çizimini toptan kapatırsak ya da yalnızca SMA1 çizimini kapatırsak pratikte çizim yaptırmamış oluyoruz. Benzer bir tekniği alttaki satırda da kullanıyoruz, burada ise renk ile değil, şeffaflık ayarı ile oynuyoruz:

Code:
fill(p1, p2, color = leadLine1 > leadLine2 ? color.green : color.red, transp = drawichimoku ? 70:100)

Eğer kullanıcı drawichimoku değişkenine depolanmış olan varsayılan değeri değiştirirse, yani kutudaki tiki kaldırırsa bulutun çizimi %70 değil %100 şeffaflık ile yapılıyor, dolayısıyla bulut görünmez oluyor. Bu parametreyi kullanarak plot ile yapılan tüm çizimlerdeki varsayılan değerleri kendi tercihlerinize göre değiştirebilirsiniz ya da indikatörün ayarlar kısmındaki style tabını açarak aynı sonucu elde edebilirsiniz. Mesela %30 şeffaflıkta çizim yapmak istiyorsanız:

Code:
plot(ma_1, color=drawsma ? color.yellow : na, title="MA1", transp=30)

Pine ile daha birçok şey yapmak mümkün. Öğrenmek de hem basit, hem de gayet eğlenceli. Hepinize tavsiye ederim. Bu arada... İnceleyince zaten fark edersiniz ama olur da ilk görüşte bu ne biçim Ichimoku diye şaşırırsanız; varsayılan değerleri değil, kripto için genellikle tercih edilen değerleri kullandım.


EDIT:

İşi iyice abartıp, çoklu indikatörümüze Bollinger Bands, Parabolic SAR ve EMA gibi önümüze gelen her şeyi eklemek istersek aşağıdaki gibi bir script elde edebiliriz. Bu scriptte varsayılan olarak hiçbir çizim açık değil, görmek istediklerinizi ayarlar kısmına girip açmanız gerekecek.

Code:
// © niko_83
//@version=4
study(title="Ichimoku + BB + Beşli Hareketli Ortalama + SAR", shorttitle="Ichimoku + BB + Beşli-MA + SAR", overlay=true)

//Hareketli Ortalama Girdileri
drawma = input(false, title = "MA Çizilsin mi?")
ma_tipi = input(defval="SMA", title='Hareketli Ortalama Türü', options=["SMA","EMA"])

ma_1p =  input(9, title="MA1")
ma_2p =  input(21, title="MA2")
ma_3p =  input(55, title="MA3")
ma_4p =  input(100, title="MA4")
ma_5p =  input(150, title="MA5")
ma_6p =  input(200, title="MA6")

//Ichimoku Girdileri
drawichimoku = input(false, "Ichimoku Çizilsin mi?")

conversionPeriods = input(20, minval=1, title="Tenkan-Sen Devir Sayısı"),
basePeriods = input(60, minval=1, title="Kijun-Sen Devir Sayısı")
laggingSpan2Periods = input(120, minval=1, title="Chikou Span Devir Sayısı"),
displacement = input(30, minval=1, title="Öteleme")

//BB Girdileri
drawBB = input(false, title = "BB Çizilsin mi?")

BBD = input(20, minval=1, title="BB Devri")
BBSS = input(2.0, minval=0.001, title="BB Standart Sapma")

// SAR girdileri
drawsar=input(false, title = "SAR Çizilsin mi?")

baslangic = input(title="Başlangıç", type=input.float, step=0.001, defval=0.02)
artis = input(title="Artış", type=input.float, step=0.001, defval=0.02)
maksimum = input(title="Maksimum", type=input.float, step=0.01, defval=0.2)

//SMA Hesapları
ma_1 = ma_tipi=="EMA" ? ema(close, ma_1p) : sma(close, ma_1p)
ma_2 = ma_tipi=="EMA" ? ema(close, ma_2p) : sma(close, ma_2p)
ma_3 = ma_tipi=="EMA" ? ema(close, ma_3p) : sma(close, ma_3p)
ma_4 = ma_tipi=="EMA" ? ema(close, ma_4p) : sma(close, ma_4p)
ma_5 = ma_tipi=="EMA" ? ema(close, ma_5p) : sma(close, ma_5p)
ma_6 = ma_tipi=="EMA" ? ema(close, ma_6p) : sma(close, ma_6p)

 //Ichimoku Hesapları
donchian(len) => avg(lowest(len), highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)

 //Bollinger Band Hesapları
ssapma = BBSS * stdev(close, BBD)
alt = sma(close, BBD) - ssapma
orta = sma(close, BBD)
ust = sma(close, BBD) + ssapma

// SAR Hesaplama
sarplot = sar(baslangic, artis, maksimum)

//Ichimoku çizimi
plot(conversionLine, color=drawichimoku ? #0496ff : na, title="Tenkan-Sen")
plot(baseLine, color=drawichimoku ? #991515 : na, title="Kijun-Sen")
plot(close, offset = -displacement, color=drawichimoku ? #459915 : na, title="Chikou-Span")
p1 = plot(leadLine1, offset = displacement, color=drawichimoku ? color.green : na, title="Senkou A")
p2 = plot(leadLine2, offset = displacement, color=drawichimoku ? color.red : na,  title="Senkou B")
fill(p1, p2, color = leadLine1 > leadLine2 ? color.green : color.red, transp = drawichimoku ? 70:100)

//SMA Çizimi
plot(ma_1, color=drawma ? color.yellow : na, title="MA1")
plot(ma_2, color=drawma ? color.orange : na, title="MA2")
plot(ma_3, color=drawma ? color.fuchsia : na, title="MA3")
plot(ma_4, color=drawma ? color.red : na, title="MA4")
plot(ma_5, color=drawma ? color.blue : na, title="MA5")
plot(ma_6, color=drawma ? color.purple : na, title="MA6")

// BB Çizimi
plot(alt, title="Alt", color=drawBB ? color.blue:na)
plot(orta, title="Orta", color=drawBB ? color.lime:na)
plot(ust, title="Üst", color=drawBB ? color.blue:na)

// SAR Çizimi
plot(sarplot, style = plot.style_cross, color=drawsar ? color.orange:na)
Pages:
Jump to: