Pine Script nedir ve ne işe yarar?Sıfırdan yüze

Python nedir?
PineScript, “TradingView” tarafından geliştirilen ve ticaret stratejilerini test etmek, incelemek ve özel göstergeler oluşturmak için kullanılan bir programlama dilidir. Bu dil küçük bir hacimle oluşturulmuştur ve çoğu zaman diğer programlama dillerine göre daha az kod yazarak çalışır.
Python’un başka herhangi bir programlama diline dayanmadığını unutmayın. Ancak daha önce Python ile çalıştıysanız muhtemelen Python’u daha hızlı öğrenecek ve ikisi arasındaki benzerlikleri bulabileceksiniz. TradingView çevrimiçi grafik oluşturma platformunun bir parçası olarak PineScript kodlarının Pine düzenleyicinin içinde yazılabileceğini bilmek de güzel.
PHP’nin faydaları nelerdir?
Pine Script’in ne olduğunu ve ne için kullanıldığını inceledikten sonra bu programlama dilinin kullanılma sebeplerinden ve avantajlarından biraz bahsetmekte fayda var. Aşağıda PHP’nin faydalarından bazılarını bulabilirsiniz.
hazır veriler
Hazır verinin (Bult-in) varlığı Pine Script’in en önemli ve en büyük avantajlarından biridir. Çünkü stratejileri test etmek ve diğer dillerde göstergeler oluşturmak için bunun için harici bir veri kaynağı belirtmeniz gerekir. Bu nedenle diğer programlama dilleri ile çalışabilmek için sadece uygun ve zengin bir kaynağa sahip olmanız gerekmeyecek, aynı zamanda formatı dönüştürüp uyarlama zahmeti de üzerinize düşecektir. Bütün bunlar, veri hazırlığına çok daha fazla zaman ayırmanız gerektiğini gösteriyor. Bu arada TradingView, kullanıcıya yalnızca bir satırdan daha az bir yazı yazarak erişilebilen birçok farklı veri sağlar.
Öğrenme ve kullanma kolaylığı
Öte yandan Python betiğinin formülünü okumak oldukça kolaydır ve diğer birçok programlama diline göre basit sayılmaktadır. Ayrıca, bu dille çalışırken sorun gidermeye çok fazla zaman harcamanıza gerek kalmaz ve TradingView tam da bunu yapar.
Kapsamlı kullanıcı tabanı ve kütüphane
Her kullanıcıyı Python kullanmaya teşvik eden bir diğer neden de güçlü kütüphaneleridir. Tüm TradingView kullanıcıları kendi göstergelerini ve stratejilerini programın kütüphanesinde yayınlama seçeneğine sahip olduğundan, her kullanıcı farklı fikirlerden oluşan geniş bir koleksiyona erişebilecektir. Açık kaynak koduna erişim, diğer programcılardan öğrenmenin harika bir yoludur. Ayrıca bazen başka bir kullanıcının ihtiyacınız olan kodu yazmış olması da mümkündür.
PHP’nin dezavantajları nelerdir?
Kullanıcıları PineScript kullanmaktan vazgeçirebilecek en önemli neden, bunun TradingView dünyasıyla sınırlı olmasıdır. Aşağıda bu sınırlamalardan bazıları hakkında daha fazla bilgi edineceğiz:
Komut dosyasının veri alanındaki sınırlamaları
Sorun şu ki, eğer TradingView istediğiniz verileri sağlamıyorsa yapabileceğiniz hiçbir şey yoktur. Elbette TradingView’in çok kapsamlı bir veri akışı veritabanı vardır. Ancak stratejiniz anonim piyasalarda işlem yapmayı içeriyorsa fiyat verilerinin mevcut olmama olasılığı artar.
Ancak sorun fiyat verilerinin ötesine geçiyor. Bazı stratejilerin ekonomik veya istatistiksel veriler içerdiğini unutmamak gerekir. TradingView bu alanda bazı veriler (çoğunlukla Quandl verileri) sağlar ancak bu veriler şu anda sınırlıdır. Bu durumda alternatif verileri kullanmanız gerekir.
Python’daki dış kütüphanelerin sorunu nedir?
Makine öğrenimi gibi şeyler yapmak için harici kütüphaneler arıyorsanız Python size göre değil. Yönteminiz veri biliminin veya çeşitli harici kitaplıkların kullanımını gerektiriyorsa diğer seçenekleri kontrol etmek daha iyidir.
Python ile çalışmaya nasıl başlayacağınızı öğrenmek
Bu bölümde Pine Script’in ne olduğunu, avantaj ve dezavantajlarının neler olduğunu öğreneceğiz. Bu dili kullanmaya karar verdiyseniz, onunla çalışmanın çok basit olduğunu ve herhangi bir program veya dosya indirip yüklemeyi gerektirmediğini bilmelisiniz. Bu platformla çalışmak için bir TradingView hesabınızın olması gerekir. Zaten bir hesap oluşturduysanız siteye girin ve geri kalan adımları izleyin. Kayıt olmak istiyorsanız önce TradingView ( + ) sitesine gidin.
Daha sonra ekranın sağ üst köşesindeki “Oturum Aç” veya “Başlayın” seçeneğine tıklayın ve gerekli bilgileri yazın. Bu bölümde ayrıca siteye giriş yapmak için diğer kullanıcı hesaplarınızın bilgilerini kullanmanıza olanak tanıyan tek tıklamayla kayıt için çeşitli seçenekler bulacaksınız.
Bir kullanıcı hesabıyla oturum açmanın, komut dosyalarınızı TradingView bulutuna kaydedebileceğiniz ve grafiklere özel göstergeler ekleyebileceğiniz anlamına geldiğini unutmayın. Kullanıcı hesabına kayıt olup giriş yaptıktan sonra Grafik ( + ) menüsüne tıklayarak grafik ortamına giriniz.
Pine editörüne temel giriş
Pine editörü kod yazma yeridir. Bu ortama girmek için yeni sayfanın alt kısmında yer alan “Pine Editor” butonuna tıklayın.

Son olarak aşağıdaki görsele benzeyen editör penceresi açılacaktır.

Pine Script’te aşağıda aralarındaki farkı inceleyeceğimiz bir gösterge veya strateji oluşturmanız mümkün.
Editör sayfasını ilk açtığınızda, varsayılan olarak bir gösterge oluşturmak için betiğin başlangıç kodunu göreceksiniz. Aşağıda bu kodu satır satır anlatacağız.
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
İlk satır, istenen işlemi açıklamak için kullanılan basit bir nottur ve PineScript’te yazımı iki “eğik çizgi” işaretiyle (/) başlar.
// © author
İkinci satır, TradingView sitesindeki kullanıcı adına göre otomatik olarak oluşturulacak bir nottur.
//@version=5
Dördüncü satırda da bir notla uğraştığımızı düşünebilirsiniz ama öyle değil ve bu kod satırı biraz farklı. Bu kod “Derleyici yönergesi” olarak bilinir ve derleyiciye kullanıcının hangi PHP sürümünü kullanmak istediğini bildirir.
Yeni bir script yazarken notların ilk iki satırını göz ardı edebilirsiniz ancak tüm scriptlerde Compiler direktifi kodunun yazılması gereklidir.
indicator("My Script")
Beşinci satır bir “Beyanname”dir ve bir gösterge oluşturduğunuzu belirtirsiniz. Elbette dediğimiz gibi bu editörde strateji oluşturmak da mümkün ancak bu örnekte bir gösterge oluşturacağız.
Bu kodun çift tırnak (“”) içindeki ikinci kısmı, göstergeye atanacak addır ve varsayılan durumu “Komut Dosyam” olarak adlandırılır.
plot(close)
Altıncı satırda Plot kodunu görebilirsiniz. Adından da anlaşılacağı gibi bu kod satırı belirli bir değişkeni çizmek için kullanılır. Bu örnekte dahili bir değişken olan ve son sütunun kapanış fiyatını tutmak için kullanılan “Kapanış” değişkeni çizilmiştir. Kod tamamlandıktan sonra, başlamak için düzenleyicinin sağ üst köşesindeki “Grafiğe Ekle” düğmesine tıklayın.

Daha sonra kaydetme işlemi bittiğinde aşağıdaki görselde mavi çizgi ile işaretlenmiş olan “Veri Penceresi” adı verilen ana grafiğin son fiyat grafiğini içeren yeni bir pencereyle karşılaşacaksınız.

Dikkat ederseniz bu pencerenin sol üst köşesinde My Script kelimesini göreceksiniz. Bu ad, gösterge adının tanımlandığı kodun beşinci satırından alınmıştır. Bu basit yöntemle Pine Script’te yeni bir gösterge oluşturup onu kullanabildik.
Diğer grafiklerden fiyat nasıl alınır?
Önceki örnekte kapanış fiyatına ilişkin bir grafik çizmiştik. Elbette PineScript bunu programda açılan tüm grafikler için otomatik olarak yapıyor. Bu örnekte Bitcoin’in günlük grafiğini kullandık.
Peki ya diğer varlıklar hakkında veri istiyorsak? Yeni örnekte, Apple’ın fiyatını alacağız, ancak ilgili grafik editörde yok. Başlangıç olarak, tüm komut dosyalarının talimatları ayarlamak için birkaç satır kodla başladığını unutmayın. Ayrıca bir gösterge veya strateji oluşturacağınızı belirtmeli ve ona bir isim yazmalısınız. Son olarak, başlangıç kodları aşağıdaki örneğe benzer:
//@version=5
indicator("price of Apple")
Bu örnekte “Apple’ın Fiyatı” adında yeni bir gösterge oluşturuyoruz. Şimdi senaryoya grafikteki mevcut varlık dışında başka bir varlık istediğimizi söylememiz gerekiyor. Bunun için de “Request.security” fonksiyonunu kullanıp kodu şu şekilde yazıyoruz:
request.security()
PHP’nin iyi yanlarından biri kullanıcılara kolay rehberlik ve yardım sağlamasıdır. Bu nedenle alışkın olmadığınız bir formülle çalışıyorsanız endişelenmenize gerek yok. Örneğin fareyi bu koddaki fonksiyonun üzerine getirdiğinizde onunla ilgili kısa bir açıklama gösterilecektir.

Daha fazla bilgiye ihtiyaç duyarsanız Yardım penceresini görebilirsiniz. Bunu yapmak için Windows’ta “Ctrl” düğmesine ve Mac’te “CMD” düğmesine basın ve ardından ilgili işleve tıklayın.
Bir sonraki adımda bir önceki kodun benzeri olan aşağıdaki kodu yazıyoruz. Ancak bu kodda Güvenlik fonksiyonunun ilk değeri hisse senedi sembolüdür.
request.security("AAPL", "D", close)
Daha sonra zaman dilimini “D” ile sembolize edilen “Günlük” moduna ayarlıyoruz. Kodun sonunda Python scriptine son fiyatı aradığımızı da söylüyoruz.
Değişkenin içine bir önceki fonksiyonun dönüş değerine aşağıdaki kodu yazıyoruz. apple_price kurtulmak
apple_price = request.security("AAPL", "D", close)
Artık yeni değişken Apple hisselerinin günlük kapanış fiyatını içeriyor. PineScript’te yapılan çalışmaların en az bir çıktıya sahip olması gerektiğini unutmayın, aksi takdirde komut dosyası bir derleyici hatası görüntüleyecektir. Bu nedenle bu hatayı önlemek için değişkenimizi aşağıdaki kodla çiziyoruz.
plot(apple_price)
Grafiği kaydedip ekledikten sonraki nihai sonuç aşağıdaki resme benzer olacaktır.

Gördüğünüz gibi ana sayfada Bitcoin mum grafiği gösterilse de Apple’ın kapanış fiyat grafiğini çizmeyi başardık .
//@version=5
indicator("price of Apple")
apple_price = request.security("AAPL", "D", close)
plot(apple_price)
Pine Script’teki basit hareketli ortalama kurtarma yöntemi nedir?
Bu noktada elimizde Apple hissesinin günlük fiyat grafiği var ve 20 “hareketli ortalamasını” (SMA) nasıl elde edebileceğimize yeni bir örnekle bakmak istiyoruz. Başka herhangi bir göstergeyi uygulamak için bu yöntemi kullanabilirsiniz.
Basitçe ilk bildirimi yazarak ve önceki örnekte oluşturduğumuz Güvenlik fonksiyonunu kullanarak işe başlıyoruz.
//@version=5
indicator("Get 20 SMA of Apple")
// Get price of Apple
apple_price = request.security("AAPL", "D", close) // 1 Day
AAPL için özel olarak 20 hareketli ortalamaya ihtiyacınız yoksa Güvenlik fonksiyonunu yazmak yerine Close dahili değişkenini kullanabilirsiniz. Bunu yaparak aslında ana sayfada gösterilen grafiğin kapanış fiyatını elde edeceksiniz.
PineScript’te SMA göstergesi için işlevden erişilebilen bir yardımcı işlev vardır. ta.sma() Aşağıdaki örnekteki gibi kullanıyoruz.
ta.sma(apple_price, 20)
Girmemiz gereken ilk argüman fiyat değeridir. Bu örnekte Apple’ın son fiyatı şu şekildedir: apple_price Kurtardık, yardım alıyoruz. İkinci argüman SMA’nın uzunluğudur, yani bu kodda 20 hareketli ortalama talep ettik. Son olarak SMA ile ilgili verileri başka bir değişkene koyup çiziyoruz.
apple_sma = ta.sma(apple_price, 20)
plot(apple_sma)
Apple fiyatının hareketli ortalamasının nihai sonucunu aşağıdaki görselde görebilirsiniz.

Hareketli ortalamaların genellikle ana grafikte çizildiğini unutmayın. Bunun için kodu biraz değiştirip aşağıdaki örnekteki gibi yazmamız gerekiyor:
indicator("Get 20 SMA of Apple", overlay=true)
Bir argüman ekleyerek yer paylaşımı=Doğru Gösterge bildiriminde, verileri Veri penceresi yerine doğrudan ana grafik penceresinde çizebiliriz.

Aşağıda genel kodu görebilirsiniz:
//@version=5
indicator("Get 20 SMA of Apple", overlay=true)
// Get price of Apple
apple_price = request.security("AAPL", "D", close) // 1 Day
// Calculate 20 SMA of Apple
apple_sma = ta.sma(apple_price, 20)
plot(apple_sma)
Pine komut dosyasıyla hareketli ortalama geçiş stratejisi nasıl test edilir?
Önceki adımlarda Pine Script Nedir makalesinden göstergelerle nasıl çalışılacağını tam olarak öğrendik ve bundan sonra strateji hakkında biraz bilgi vereceğiz. Aşağıdaki örnekte birkaç ek argümanla hareketli ortalama geçiş stratejisi yaratıyoruz. Daha sonra bunu pine betiğinin içinde test edeceğiz.
Bir strateji oluşturmak için gösterge bildirimini silip yerine strateji bildirimini koymamız gerekir.
//@version=5
strategy("My Strategy", overlay=true)
Bir sonraki adım iki hareketli ortalama oluşturmak ve verilerini değişkenlere koymaktır.
rsi = ta.rsi(close, 14)
Ayrıca giriş ve çıkışları onaylamak için kullanılan bir ” Göreceli Güç Göstergesi” veya “RSI ” oluşturuyoruz. Bu strateji ana grafik üzerinde yürütüleceğinden Güvenlik fonksiyonunu yazmaya gerek yoktur.
rsi = ta.rsi(close, 14)
Bir sonraki adımda kesişim koşullarını belirtmemiz gerekiyor. Neyse ki TradingView’in bunu yapmak için yerleşik bir işlevi vardır ve kodu manuel olarak yazmamıza gerek yoktur.
// Specify crossover conditions
longCondition = ta.crossover(shortSMA, longSMA)
shortCondition = ta.crossunder(shortSMA, longSMA)
Bu örnekte iki koşulumuz var, ilk koşul daha küçük veya 10 dönemlik hareketli ortalamanın daha büyük veya 30 dönemlik hareketli ortalamayı geçmesidir ve bunun için “Çaprazlama” fonksiyonunu yazıyoruz. İkinci koşul bir öncekinin tam tersidir ve bunun için “Crossunder” fonksiyonunu kullandık. Her iki koşul da ayrı değişkenlerde saklanır. Bu nedenle, Çaprazlama veya Çaprazlama koşullarından biri yerine getirildiğinde değerleri güncellenir ve “True” Boolean durumuna ayarlanır.
Bir koşulun True olarak değişip değişmediğini kontrol etmek için “If” fonksiyonunu kullanırız ve gerekirse buna dayalı bir işlem yaratırız.
if (longCondition)
strategy.entry("long", strategy.long, 100, when = rsi > 50)
Dahili fonksiyon strateji.giriş İşlem girmek için kullanılır. Aşağıda bu fonksiyonun argümanları hakkında bilgi sahibi olacağız:
- Uzun : Bu argüman , bu örnekte kullanmadığımız işlemin tanımlayıcısı veya “ID”sidir. Ancak işlemi kapatmanız veya iptal etmeniz gerekirse, buradan yardım alabilirsiniz.
- strateji.uzun : Long argümanını almak için kullanılan dahili bir değişkendir.
- 100 : İşlem görecek hisse sayısını gösterir.
- ne zaman = rsi > 50 : ek bir argümandır ve RSI 50’nin üzerindeyse işlemi gerçekleştirir.
Kısa girişler için formül çok basit bir formata sahiptir ve şu şekilde yazılmıştır:
if (shortCondition)
strategy.entry("short", strategy.short, 100, when = rsi < 50)
Bir strateji uyguladığımız için grafik çizmeye veya çıktıyı belirtmeye gerek olmadığını unutmayın. Ancak bu örnekte bunu yapıyoruz. İşlemin doğru zamanda yapıldığından emin olmak için grafikte SMA’yı görmek daha iyidir . Bu nedenle aşağıdaki kodu da ekliyoruz:
// Plot Moving Average's to chart
plot(shortSMA)
plot(longSMA, color=color.black)
Kodu kaydedip grafiğe ekledikten sonra strateji yürütülür ve önemli testleri görüntülemek için “Strateji Test Cihazı” penceresi açılır. Son olarak sonuç aşağıdaki görsele benzer olacaktır.

Varsayılan olarak yeni bir sekme de açılır ve stratejinin genel istatistiklerini gösterir. Diğer olasılıkları görmek için, performans özetini görmek üzere “Performans Özeti” veya işlem listesini görmek için “İşlem Listesi” seçeneklerinden birine tıklayabilirsiniz.
Son olarak strateji, grafikte belirtilen zaman diliminde uygulanacaktır. Ayrıca üst menüdeki zaman çerçevesi seçeneğini kullanarak diğer zaman dilimlerini de seçebilirsiniz .

Son olarak kodun tamamı şu şekilde olacaktır:
//@version=5
strategy("My Strategy", overlay=true)
// Create Indicator's
shortSMA = ta.sma(close, 10)
longSMA = ta.sma(close, 30)
rsi = ta.rsi(close, 14)
// Specify crossover conditions
longCondition = ta.crossover(shortSMA, longSMA)
shortCondition = ta.crossunder(shortSMA, longSMA)
// Execute trade if condition is True
if (longCondition)
strategy.entry("long", strategy.long, 100, when = rsi > 50)
if (shortCondition)
strategy.entry("short", strategy.short, 100, when = rsi < 50)
// Plot Moving Average's to chart
plot(shortSMA)
plot(longSMA, color=color.black)
PHP’de kar ve zarar sınırı nedir ve nasıl ayarlanır?
Önceki örnekte, işlemin gerçekleşme süresi hareketli ortalamaların Crossover ve Crossunder koşulları aracılığıyla belirleniyordu. Şimdi bu senaryoyu biraz değiştirip kâr ve zarara yönelik belirli limitler eklemek istiyoruz . Bu iki öğenin değerlerini hesaplamak için “Ortalama Gerçek Aralık” veya “ATR” göstergesini kullanacağız.
ATR göstergesi, belirtilen sütunların son rakamlarının hareketli ortalamasını hesaplar ve bunu kullanmak volatilitedeki değişiklikleri hesaplamanın ve piyasa eğilimlerini belirlemenin harika bir yoludur . Daha önce diğer bazı göstergeleri yaptığımız gibi ATR göstergesini de aşağıdaki kodla listeye ekleyeceğiz.
// Create Indicator's
shortSMA = ta.sma(close, 10)
longSMA = ta.sma(close, 30)
rsi = ta.rsi(close, 14)
atr = ta.atr(14)
Bir sonraki adımda işlem koşulları bölümünde kar ve zarar limitleri için gerekli hesaplamaları gerçekleştiriyoruz:
if (longCondition)
stopLoss = low - atr * 2
takeProfit = high + atr * 2
strategy.entry("long", strategy.long, 100, when = rsi > 50)
strategy.exit("exit", "long", stop=stopLoss, limit=takeProfit)
Yukarıdaki kodda, giriş anındaki sütunun alt değerini alıp ortalama gerçek aralığı (ATR) ikiyle çarparak çıkararak zararı durdurmayı hesapladık. Bu şekilde hisse senedi sütun başına ortalama 5$ hareket ederse, en düşük seviyenin 10$ altına kar limiti koyarız. Kâr limitini hesaplamak için de aynı şeyi yaptık.
Son olarak işlevi kullanma strateji.exit() Çıkış koşullarını belirliyoruz. Bu fonksiyonun argümanları aşağıdaki gibidir:
- çıkış : Bu argüman, işlemden çıkmak için kullanılan işlem tanımlayıcısı veya İşlem Kimliğidir.
- uzun : Daha önce işleme girdiğimizde belirlediğimiz bir özelliktir. Bu argüman betiğe hangi pozisyondan çıkmak istediğimizi söyler.
- dur=durdurKayıp : Değişkendeki düzeyi belirtir daha az dur Ticaretten çıkmak için bir durdurma emri olarak değerlendirilmelidir.
- limit=kar al : Bu bölümde değişkendeki seviyeyi belirtiyoruz. kar almak işlemden çıkmak için limit emri olarak değerlendirilmelidir.
Kısa koşul formülü öncekilere benzer ancak bazı hesaplamaları biraz değiştirilerek son kod şu şekilde yazılmıştır:
if (shortCondition)
stopLoss = high + atr * 2
takeProfit = low - atr * 2
strategy.entry("short", strategy.short, 100, when = rsi < 50)
strategy.exit("exit", "short", stop=stopLoss, limit=takeProfit)
Kodun diğer kısımları önceki örnekte değişmeden kalır. Aşağıdaki resimde yeni stratejinin nasıl çalıştığını görebilirsiniz.

Gördüğünüz gibi çıkışlar düzgün çalışıyor ve kısa ve uzun girişler gibi ana grafikte işaretleniyor. Aşağıda bu işlemi gerçekleştirmek için gereken kodun tamamını görebilirsiniz:
//@version=5
strategy("Take profits & stop losses", overlay=true)
// Create Indicator's
shortSMA = ta.sma(close, 10)
longSMA = ta.sma(close, 30)
rsi = ta.rsi(close, 14)
atr = ta.atr(14)
// Specify crossover conditions
longCondition = ta.crossover(shortSMA, longSMA)
shortCondition = ta.crossunder(shortSMA, longSMA)
// Execute trade if condition is True
if (longCondition)
stopLoss = low - atr * 2
takeProfit = high + atr * 2
strategy.entry("long", strategy.long, 100, when = rsi > 50)
strategy.exit("exit", "long", stop=stopLoss, limit=takeProfit)
if (shortCondition)
stopLoss = high + atr * 2
takeProfit = low - atr * 2
strategy.entry("short", strategy.short, 100, when = rsi < 50)
strategy.exit("exit", "short", stop=stopLoss, limit=takeProfit)
// Plot Moving Average's to chart
plot(shortSMA)
plot(longSMA, color=color.black)
Google %5 hisseyi taşıdığında Apple anlaşmasının nasıl yapılacağını öğretmek
Faradars dergisindeki bu yazımızın önceki aşamalarında Güvenlik fonksiyonunun ana sayfada olmayan hisse senetlerine ait verileri gösterebildiğini görmüştük. Şimdi bunu, Google hisselerinin yüzde beş oranında artması koşuluyla Apple anlaşmasını hayata geçirecek bir strateji oluşturmak için kullanacağız. Bu ortalama bir geri dönüş stratejisidir; yani Google hisseleri yüzde beşten fazla artarsa Apple’a açık veririz, Apple yüzde beş düşerse Apple’ı satın alabiliriz.
Yapmamız gereken ilk şey Google’ın başlangıç ve bitiş fiyatlarını aşağıdaki kodu kullanarak bir değişkene depolamak.
//@version=5
strategy("Pair Trade: Apple & Google")
google_close = request.security("GOOG", "D", close)
google_open = request.security("GOOG", "D", open)
Aşağıda uygun hesaplamaları yaparak fiyat değişim yüzdesini belirliyoruz.
price_change = google_close / google_open
Değişmez hesaplamalar fiyat_değişimi Yerleştirildi. Örneğin Google hisse senedi 100$’dan başlayıp %5 artarak 105$’da bitiyorsa bu değişkene “1,05” ile aynı sayı olan “105/100” değeri yerleştirilecektir. Ancak Google 100 Dolardan başlayıp %5 düşüp 95 Dolara biterse değişkene “95/100” veya “0,95” değeri konur.
Google hisselerinin %5 düşüp düşmediğini bu şekilde anlıyoruz, değişken fiyat_değişimi Değeri “0,95” ve altında olacak ve satın alma işlemi gerçekleştirebileceğiz. Bunun için gerekli formül aşağıdaki örnek formda yazılmıştır:
if price_change < 0.95
strategy.entry("long", strategy.long, 100)
Ayrıca Google’ın %5’lik bir artış yaşaması durumunda hisse açığa çıkarmak için gereken formül de aşağıdaki örnekteki gibi yazılır:
if price_change > 1.05
strategy.entry("short", strategy.short, 100)
Dikkat ederseniz bu kodda Apple’ın hisse senedi fiyatını kullanmadığımızı göreceksiniz . Tek yapmamız gereken bir AAPL grafiği açmak ve işlem Apple için otomatik olarak yapılıyor.
Son olarak değişken fiyat_değişimi Veri penceresinde çizim yapıyoruz. Elbette bunu yapmak gerekli değil ancak ilgili tabloyu görmek güzel ve işlemlerin doğru zamanda yapıldığından emin olabiliriz.
plot(price_change)
Nihai sonucu aşağıdaki resimde görebilirsiniz.

Tabii ki, yüzde beş hamle karşılığında yalnızca dört işlem yapmak oldukça nadir ve daha az yaygındır. Stratejinin uygun olup olmadığını belirlemek için daha fazla işlemi dikkate almamız gerekiyor.
Son kod aşağıdaki örnek gibidir:
//@version=5
strategy("Pair Trade: Apple & Google")
google_close = request.security("GOOG", "D", close)
google_open = request.security("GOOG", "D", open)
price_change = google_close / google_open
if price_change < 0.95
strategy.entry("long", strategy.long, 100)
if price_change > 1.05
strategy.entry("short", strategy.short, 100)
plot(price_change)
Kodlama olmadan komut dosyaları nasıl değiştirilir?
PHP’nin ilginç faydalarından birinin ne olduğunu bilmek istiyorsanız bu bölümü okumaya devam edin. PineScript, özel girdiler oluşturarak stratejilerimizin ve göstergelerimizin argümanlarını değiştirmemize olanak tanır.
Bunu daha iyi anlamak için TradingView tarafından sağlanan yerleşik ATR göstergesini kontrol edebilirsiniz. Gördüğünüz gibi uzunluğu ve hatta renkleri değiştirmek “Stil” sekmesinden kolaydır.

“Input” fonksiyonunu kullanarak Python’da oluşturulmuş çalışmalar ve stratejiler için de aynısını yapabiliriz. Aşağıda, önceki örneğin stratejisindeki değişiklik yüzdesini değiştirmek için bu fonksiyonun nasıl çalıştığını görüyoruz:
longTrigger = input(title="% Change for short entries", defval=5)
shortTrigger = input(title="% Change for long entries", defval=5)
Bu fonksiyonun argümanları aşağıdaki gibidir:
- başlık: Bu seçenekle kullanıcının bu argümanın değerini değiştirmeye çalıştığında göreceği metni belirtiriz .
- varsayılan : Bu argüman varsayılan değerdir.
Artık değerleri kullanıcıdan alabiliriz. Tabi ki kullanıcının “%5” gibi istediği değeri girdiğini ve If koşulunda kullanmak için bu sayıyı “1,05”e dönüştürmemiz gerektiğini unutmayın. Bunu yapmak için aşağıdaki kodu kullanıyoruz:
longTrigger := 1 - longTrigger/100
shortTrigger := 1 + shortTrigger/100
If fonksiyonunu da değerleri almak için yeni değişkenlere gidecek ve kodla önceden yazılmış değerleri kullanmayacak şekilde değiştirmeliyiz.
if price_change < longTrigger
strategy.entry("long", strategy.long, 100)
if price_change > shortTrigger
strategy.entry("short", strategy.short, 100)
Son olarak, giriş seçeneklerine erişmek için veri penceresinde strateji adının yanındaki dişli çark simgesini tıklayın.

Artık ilgili stratejideki değişim yüzdesini değiştirmek için özel değerler girme olanağınız var.

Ayrıca stratejinin diğer bölümleri için özel seçenekleri kullanmanıza olanak tanıyan “Özellikler” adı verilen başka bir pencere de vardır.

Stil penceresi aynı zamanda çizim seçeneklerini özelleştirmek için de kullanılır.

Kodun tamamı aşağıdaki örnekteki gibidir:
//@version=5
strategy("Pair Trade: Inputs")
longTrigger = input(title="% Change for short entries", defval=5)
shortTrigger = input(title="% Change for long entries", defval=5)
longTrigger := 1 - longTrigger/100
shortTrigger := 1 + shortTrigger/100
google_close = request.security("GOOG", "D", close)
google_open = request.security("GOOG", "D", open)
price_change = google_close / google_open
if price_change < longTrigger
strategy.entry("long", strategy.long, 100)
if price_change > shortTrigger
strategy.entry("short", strategy.short, 100)
plot(price_change)
Pine Script’te çizim nedir ve nasıl yapılır?
Pine Script Nedir makalesinin bu adımından önce, belirli öğeleri çizmek için standart Plot fonksiyonunu kullandık. Ancak PHP’de çıktılar için kullanabileceğimiz, aşağıda tartışacağımız çeşitli başka komutlar da vardır.
Forex piyasasının çizim saatleri
Finansal piyasaların açılış ve kapanış saatlerini bilmek dikkat etmeniz gereken önemli hususlardan biridir. Ancak Forex yatırımcılarının bunu öğrenmesi biraz daha zor olabilir . Forex günde 24 saat ve haftanın beş günü işlem görmektedir . Dünya çapında farklı piyasalar da döviz dalgalanmalarını etkileyen zamanlarda açılıp kapanıyor.
Daha sonra, grafiğe kısa bir bakışla piyasaların ne zaman daha kalabalık olduğunu anlamanıza yardımcı olacak bir gösterge oluşturmayı planlıyoruz. Çoğu Forex piyasası yatırımcısı Londra ve New York seanslarına dikkat ediyor ve bu örnekte de bu iki şehrin saatlerini ayarlayacağız. Bunu yapmak için uygun kod şu şekilde yazılmıştır:
//@version=5
indicator("Forex Sessions", overlay=true)
London = time(timeframe.period, "0700-1500")
NY = time(timeframe.period, "1200-2000")
Bu örnekte nokta oluşturmak için “Zaman” fonksiyonunu kullandık. Ayrıca argümanlar arasında seçenekler 0700 UTC Londra oturumunun başlangıç zamanı ve 1500UTC Bu toplantının tamamlanma süresi boyunca kullanılırlar.
Şimdi ilgili sütunun zamanı bu dönemde ise değişkendeki bu sütunun değeri Londra yerleştirilmiş Aksi halde çıktıda ” NaN ” ifadesi değer yok olarak gösterilecektir. Bu değişkenin çıktısını görüntülemek ve kontrol etmek için aşağıdaki gibi If fonksiyonunu kullanabiliriz:
val = if (na(London))
1
else
0
Yukarıdaki kodda, adı verilen dahili bir işlevden hayır() Bir değişkende Nan ifadesinin varlığını kontrol etmek için kullandık. Eğer fonksiyon Londra NaN değerini döndürün, yani karşılık gelen sütun Londra işlem saatlerinin dışındadır.
Bu durumda “Val” değişkenine “1” tamsayısı yerleştirilir, aksi takdirde Val değişkeni “0” sayısına set edilir. Son olarak yeni Val fonksiyonunu çiziyoruz.
plot(val)
Göstergeyi kaydettikten sonra grafiğin nihai sonucu aşağıdaki gibidir.

Bu sorunu çözmek için Veri penceresinde çizim yapabiliriz ancak bu durumda piyasanın açık mı kapalı mı olduğunu görmek pek uygun değildir. Kod bile yeterince iyi değil. Bu nedenle sadece bir satır ve If koşulunu kullanarak daha iyi hale getiriyoruz:
na(London) ? 1 : 0
Bu kod tıpkı önceki örnekteki If işlevi gibi çalışır ancak bu durumda Val değişkenine gerek yoktur. Aşağıda, daha iyi anlaşılması için kodun farklı bölümlerini açıklıyoruz:
na(London)
Kodun bu kısmı değişkende NaN değerinin bulunmasıLondra içine bak.
? 1 : 0
Kodun bu bölümündeki soru işareti If ve Elce koşullarının kısa biçimidir. Önemli olan soru işaretinden sonra gelen kısımdır. Bu bölümde “:” işaretiyle ayrılmış iki sayı göreceksiniz. Bu örnekte ilk sayı veya “1”, koşulun yerine getirilmesi durumunda çıktıda gösterilecek değerdir. Koşul yerine getirilmediğinde ikinci sayı veya “0” da gösterilir.
Artık son formülün tamamını bir Plot fonksiyonunun içine yerleştirebilir ve grafiğini çizebiliriz:
plot(na(London) ? 1 : 0)
Gördüğünüz gibi If koşulunun tamamını tek bir kod satırına koyuyoruz.
Pine Script’te çizim arka planının rengini nasıl değiştireceğinizi öğrenme
Grafiğin görülmesini ve okunmasını kolaylaştırmak için Londra piyasası açıkken grafiği farklı bir arka plan rengiyle de gösterebiliriz. Bunu yapmak için Plot fonksiyonunu arka plan rengini değiştirmek için kullanılan bgcolor fonksiyonuyla değiştiriyoruz.
bgcolor(na(London) ? 1 : 0)
Ayrıca marketin açık olduğu zamanlar için başka bir renk belirleyip onun için de aşağıdaki kodu yazıyoruz:
bgcolor(na(London) ? na : color.blue)
Bu noktada grafik çok daha iyi görünüyor.

Son görev, New York pazarının açık olup olmadığını kontrol etmek ve bunun için yeşil rengi ayarlamak için bir kod yazmaktır:
bgcolor(na(NY) ? na : color.green)

Yukarıdaki görselde son grafiğin üç farklı renk içerdiğini görebilirsiniz. Bu durum Londra ve New York seansları arasında örtüşme olmasından, aslında günün en volatil zamanının bu şekilde görülmesinden kaynaklanmaktadır. Ancak son seanslara kolaylıkla bakabilir ve Avrupa’daki yüksek işlem hacmi veya çakışma sırasındaki en düşük fiyat gibi şeyleri kolaylıkla ayırt edebiliriz. Genel kod aşağıdaki örnekteki gibi olacaktır:
//@version=5
indicator("Forex Sessions", overlay=true)
Tokyo = time(timeframe.period, "0000-0800")
London = time(timeframe.period, "0700-1500")
NY = time(timeframe.period, "1200-2000")
bgcolor(na(Tokyo) ? na : color.fuchsia)
bgcolor(na(London) ? na : color.blue)
bgcolor(na(NY) ? na : color.green)
Ek açıklamalar nasıl çizilir
Ek açıklamaları yazdırmanın birkaç yolu vardır. Örneğin grafikte yatay bir çizgi çizmek için “Hline” fonksiyonunu kullanabiliriz. Grafik üzerinde kayak harflerinin çizilmesini sağlayan “Plotchar” adı verilen başka bir fonksiyon da bulunmaktadır. Bu işlev genellikle fiyat sütununun üstüne veya altına not çizmek için kullanılır.
Bir diğer popüler çizim fonksiyonu ise farklı şekiller çizmemize olanak sağlayan “Plotshape” olarak adlandırılıyor. Bu işlev çok popülerdir çünkü kullanıcılar, alım veya satım sinyallerini göstermek için oku sütunların üstüne veya altına sürüklemek için kullanırlar.
PHP’de özel bir gösterge nasıl yapılır?
Pine Script Nedir yazımızın bu bölümünde çok zamanlı gösterge oluşturma adımlarını inceliyoruz. Bu gösterge, ölçeklendirme stratejisine dayanmaktadır ve aynı zamanda, işlerin sakin olduğu erken Asya forex seanslarında ortalamaya geri dönüş stratejisi olarak da işe yarar. Bu stratejide “5” dakikalık grafikte Bollinger bantları, “1” dakikalık grafikte ise RSI kullanılır.
Genel olarak, beş dakikalık grafikte fiyat Bollinger Bantlarında en yüksek veya en düşük seviyeye ulaştığında, bir dakikalık piyasada bir RSI farklılığı aramak istiyoruz . Potansiyel bir hedef, beş dakikalık Bollinger Bandının orta çizgisi veya bir dakikalık Bollinger Bandının alt çizgisi olabilir.
Aşağıdaki resimde bu stratejinin bir örneği gösterilmektedir. Ayrıca önceki adımlarda yaptığımız forex göstergesini bu örnekte Asya piyasalarının açılış saatini göstermek için kullandık.

Bu strateji ilk yarıda en iyi sonucu verir, ancak bundan sonra kırılma veya yön değiştirme riski artar.
//@version=5
indicator(title="Higher TF BBands", shorttitle="TF BBands", overlay=true)
Betik için bir ad bildirerek ve bunun ne tür bir gösterge olduğunu belirterek başlıyoruz. Bu adın grafikte gösterileceğini ve bunun için daha kısa bir başlık kullanmanın mümkün olduğunu unutmayın.

Bir sonraki adımda bazı girdileri belirliyoruz. Bunu yapmak için, aşağıdaki örnekte gösterildiği gibi özel göstergemiz için standart Bollinger Bantları göstergesinden bazı girişleri kopyalayabiliriz.
// Get user input
tf = input(title="BBands Timeframe", defval="5")
len = input(title="Length", defval=20)
stddev = input(title='StdDev', defval=2)
Bollinger Band göstergesini, kodu aşağıdaki örneğe benzeyen bir yardımcı dahili fonksiyon aracılığıyla oluşturmak da mümkündür:
[middle, upper, lower] = ta.bb(close, len, stddev)
Bu fonksiyondan en düşük, orta ve en yüksek bantları içeren üç farklı değer elde edilir. Bu değerler farklı değişkenlerde ayrı ayrı saklanır. Artık bunların farklı bir zaman diliminde hesaplanması gerekiyor. Bunu yapmak için Güvenlik fonksiyonunu kullanabilir ve kullanıcının zaman aralığını seçmesine izin verebiliriz. Bu öğe değişkenin içindedir TF önceki giriş tarafından oluşturulan yerleştirilecektir.
hbbandsMid = request.security(syminfo.tickerid, tf, middle, barmerge.gaps_on, barmerge.lookahead_off)
hbbandsUpper = request.security(syminfo.tickerid, tf, upper, barmerge.gaps_on, barmerge.lookahead_off)
hbbandsLower = request.security(syminfo.tickerid, tf, lower, barmerge.gaps_on, barmerge.lookahead_off)
Hisse senedi sembolü aynı kalır, dolayısıyla syminfo.tickerid Ana ekranda hangi simgenin gösterildiğini gösteren yardımımız var. Bundan sonra geriye sadece göstergeyi çizmek kalıyor.
plot(hbbandsMid)
plot(hbbandsUpper)
plot(hbbandsLower)
Bu noktada beş dakikalık bir grafiğin Bollinger Bantlarının bir dakikalık bir grafikte görüntülendiğini görebiliriz. Kullanıcının girdisini belirleme yeteneği, Bollinger Bandı özelleştirmesini basitleştirir ve göstergenin herhangi bir zaman dilimi kombinasyonuyla çalışmasına olanak tanır. Ayrıca bu göstergeyi kullanarak piyasa trendini tanımak çok daha kolay hale geliyor .
Genel kod aşağıdaki örnek gibidir:
//@version=5
indicator(title="Higher TF BBands", shorttitle="TF BBands", overlay=true)
// Get user input
tf = input(title="BBands Timeframe", defval="60")
len = input(title="Length", defval=20)
stddev = input(title='StdDev', defval=2)
[middle, upper, lower] = ta.bb(close, len, stddev)
hbbandsMid = request.security(syminfo.tickerid, tf, middle, barmerge.gaps_on, barmerge.lookahead_off)
hbbandsUpper = request.security(syminfo.tickerid, tf, upper, barmerge.gaps_on, barmerge.lookahead_off)
hbbandsLower = request.security(syminfo.tickerid, tf, lower, barmerge.gaps_on, barmerge.lookahead_off)
plot(hbbandsMid)
plot(hbbandsUpper)
plot(hbbandsLower)
Python’a alternatifler
- TD Ameritrade’in Thinkorswim’i : Bu platformun PineScript ile pek çok benzerliği var ve fiyat verilerini PineScript benzeri bir şekilde dizilerde depolamak için Thinkorswim adlı bir dil kullanıyor. Veriler bu dilde dahili olarak mevcuttur ve genel amacı özelleştirilmiş göstergeler ve stratejiler oluşturmaya odaklanmıştır.
- Ninjatrader : Bu seçenek aynı zamanda Ninjatrader adı verilen özel bir dil kullanır. Elbette Ninjatrader dili o kadar da özel ve benzersiz değil ve C# programlama dilini temel alıyor. Ninjatrader ayrıca özel veri akışlarıyla iletişime izin verdiği için oldukça esnektir. Zaten C, C# veya C++ dillerine aşina iseniz sizin için iyi bir seçim olacaktır.
son söz
Faradres Dergisi’nin bu makalesindeki örnekleri takip ederseniz PHP’nin ne olduğu hakkında oldukça iyi bir fikre sahip olacak ve hatta işlemleriniz için basit kodlar yazabileceksiniz. Python’un birçok farklı kullanımı vardır ancak aynı zamanda size sınırlamalar da getirebilir.
Bu makalede, bu sınırlamalardan bazılarını ve kodları yeni bir açıdan nasıl kaldıracağınızı göreceksiniz. Örnek olarak farklı çizim yöntemlerinin tanıtıldığı bölümde birden fazla grafiğin üst üste binmesi sorununu çözmek için mantıklı ve ilginç çözümleri inceledik. Genel olarak PHP ile çalışmak kolaydır ve onu bir profesyonel gibi çok hızlı bir şekilde kullanabilirsiniz.