Tillson T3 İndikatörünü Python ile Yazalım

Arkadaşlar bugün sizlere söz etmek istediğim indikatörlerden biriside Tillson T3 indikatörüdür. TradingView sitesinde de Kıvanç Özbilgiç tarafından hazırlanmış versiyonunu kullanabilirsiniz.

Hareketli ortalamalar baz alınarak hesaplanan bir değerdir. Tillson T3 indikatörü hareketli ortalamaları biraz daha yumuşatarak, fiyatlar hakkında bize daha net bir bakış açısı kazandırmaktadır.

Aşağıdaki resimde görüldüğü üzere çizgi yeşil olduğunda fiyatlar yükseliyor, kırmızı olduğunda fiyatlar düşme eğiliminde anlamında gelmektedir.

tillson t3 tradingview

Tillson T3 indikatörü Tim Tillson tarafından geliştirilmiştir.

Formülü yaklaşık olarak aşağıdaki gibidir:

a değeri hacim çarpanıdır. Varsayılan değer 0.7 fakat 0.618 değeri de kullanılır.

– e1 = EMA (Close, Periyot)
– e2 = EMA (e1, Periyot)
– e3 = EMA (e2, Periyot)
– e4 = EMA (e3, Periyot)
– e5 = EMA (e4, Periyot)
– e6 = EMA (e5, Periyot)


– c1 = – a^3
– c2 = 3*a^2 + 3*a^3
– c3 = – 6*a^2 – 3*a – 3*a^3
– c4 = 1 + 3*a + a^3 + 3*a^2

T3 = c1*e6 + c2*e5 + c3*e4 + c4*e3

Görüldüğü üzere kapanış değerleri üzerinden EMA (exponential moving average) hesaplanıyor. Silsile halinde hesaplanan değerlerin tekrar ema’sı hesaplanarak sonuca ulaşılıyor.

Al/Sat Sinyalini Nasıl Üretiriz

Basitçe rengi kırmızıdan yeşile döndüğünde al sinyali, yeşilden kırmızıya döndüğünde sat sinyali olarak değerlendirebiliriz.

Genelde de olduğu gibi zaman aralığı daha büyük olduğunda daha net sinyaller verecektir; Örneğin 4 saatlik ve günlük grafikleri için güzel sinyaller üretecektir.

Tabi ki tek bir indikatöre bakarak al/sat yapmak her zaman doğru olmayacaktır. Fakat Tillson T3 indikatörünü de destekleyici bir parametre olarak düşünebilirsin.

Python ile Tillson T3 İndikatörünü Yazalım

Daha önce Supertrend indikatörünü python ile nasıl yazdığımızı anlattığım blog yazısında izlediğim yöntemi tekrar izleyeceğim.

Fiyat hareketlerini çekmek için Binance borsasına bağlanacağım. Nasıl bağlandığımı burada tekrar anlatmayacağım. Binance Api ayarlarının nasıl yapılacağını yine bir başka yazımdan bakarak öğrenebilirsin.

from binance.client import Client
import talib as ta
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime
import sys
import math

class BinanceConnection:
    def __init__(self, file):
        self.connect(file)

    """ Creates Binance client """

    def connect(self, file):
        lines = [line.rstrip('\n') for line in open(file)]
        key = lines[0]
        secret = lines[1]
        self.client = Client(key, secret)

def generateTillsonT3(close_array, high_array, low_array, volume_factor, t3Length):

    ema_first_input = (high_array + low_array + 2 * close_array) / 4

    e1 = ta.EMA(ema_first_input, t3Length)

    e2 = ta.EMA(e1, t3Length)

    e3 = ta.EMA(e2, t3Length)

    e4 = ta.EMA(e3, t3Length)

    e5 = ta.EMA(e4, t3Length)

    e6 = ta.EMA(e5, t3Length)

    c1 = -1 * volume_factor * volume_factor * volume_factor

    c2 = 3 * volume_factor * volume_factor + 3 * volume_factor * volume_factor * volume_factor

    c3 = -6 * volume_factor * volume_factor - 3 * volume_factor - 3 * volume_factor * volume_factor * volume_factor

    c4 = 1 + 3 * volume_factor + volume_factor * volume_factor * volume_factor + 3 * volume_factor * volume_factor

    T3 = c1 * e6 + c2 * e5 + c3 * e4 + c4 * e3

    return T3

if __name__ == '__main__':
    filename = 'credentials.txt'

    connection = BinanceConnection(filename)

    interval = '1d'

    pair = 'BTCUSDT'

    limit = 500

    klines = connection.client.get_klines(symbol=pair, interval=interval, limit=limit)

    open_time = [int(entry[0]) for entry in klines]

    open = [float(entry[1]) for entry in klines]
    high = [float(entry[2]) for entry in klines]
    low = [float(entry[3]) for entry in klines]
    close = [float(entry[4]) for entry in klines]

    close_array = np.asarray(close)
    high_array = np.asarray(high)
    low_array = np.asarray(low)

    new_time = [datetime.fromtimestamp(time / 1000) for time in open_time]

    new_time_x = [date.strftime("%y-%m-%d") for date in new_time]

    volume_factor = 0.7

    t3length = 8

    tillsont3 = generateTillsonT3(close_array, high_array, low_array, volume_factor=volume_factor, t3Length=t3length)

    plt.figure(figsize=(11, 6))
    plt.plot(new_time_x[400:], close_array[400:], label='Price')
    plt.plot(new_time_x[400:], tillsont3[400:], label='Tillson T3')
    plt.xticks(rotation=90, fontsize=5)
    plt.title("Tillson T3 Plot for BTC/USDT")
    plt.xlabel("Open Time")
    plt.ylabel("Value")
    plt.legend()
    plt.show()

Kodu PyCharm içerisinden çalıştırdığımızda üretilen grafiği görelim:

tillson t3 plot

Grafiğimizde renk değişimini yapmadım. Yani yükselirken, yeşile dönmesi ve düşerken kırmızı renge dönmesi.

İşin bu kısmını alıştırma olarak yapmanızı öneriyorum.

Bu grafiği trading view çizgi grafiği ile karşılaştırırsak doğru hesapladığımızı görmüş oluruz:

tillson t3 tradingview line graph

Al/Sat Sinyali Üretelim

Al/Sat sinyali üretmek için şöyle bir kod ekleyebiliriz arkadaşlar:

t3_last = tillsont3[-1]
t3_previous = tillsont3[-2]
t3_prev_previous = tillsont3[-3]

# kırmızıdan yeşile dönüyor
if t3_last > t3_previous and t3_previous < t3_prev_previous:
     print('tillson t3 buy signal, from red to green')

# yeşilden kırmızıya dönüyor
elif t3_last < t3_previous and t3_previous > t3_prev_previous:
     print('tillson t3 sell signal, from green to red)   
	

Faydalandığım Kaynaklar

T3 Moving Average (technicalindicators.net)

T3 (T3) | Trading Technologies

T3 Moving Average Indicator (tradingpedia.com)

22 thoughts on “Tillson T3 İndikatörünü Python ile Yazalım”

  1. selahattin kayacan

    Gerçekten harika! elinize sağlık.
    interval = 1day olduğunda tradingview daki 1gün grafiği ile birebir aynı. ancak bu uygulamada 3dk yapınca (yani 3m) bir türlü grafiği çalıştıramıyorum. boş görünüyor. limit ile de oynadım olmuyor. farklı bişey daha mı yapmam lazım?

    1. Aşağıdaki şekilde ilgili satırları değiştirin, çalışacaktır.


      ---
      if __name__ == '__main__':
      ---
      interval = '3m'
      ---
      new_time_x = [date.strftime("%H:%M:%S") for date in new_time]
      ---

      1. hocam bu vermiş olduğunuz linkler binance ticareti yapmak için kullanılan uygulamalar. Bunların içerisinde tilson t3 kodları bulunmuyor. Keşke bu indikatörün c# versiyonunu yazsanız ne güzel olurdu

  2. merhaba çalıştırmak istediğimde boyle bir hata aliyorum ne yapmaliyim

    File “c:\Users\yahya\Desktop\New folder\binance-tutorials-master\rsibot\bot.py”, line 91, in
    connection = BinanceConnection(filename)
    File “c:\Users\yahya\Desktop\New folder\binance-tutorials-master\rsibot\bot.py”, line 11, in __init__
    self.connect(file)
    File “c:\Users\yahya\Desktop\New folder\binance-tutorials-master\rsibot\bot.py”, line 16, in connect
    lines = [line.rstrip(‘\n’) for line in open(file)]
    FileNotFoundError: [Errno 2] No such file or directory: ‘credentials.txt’

  3. Kapanan mum mu dikkate alıcaz içinde olunan mı ? ilk yazınızda kapanan mum dediniz sonrakilerde son mum kavramlar karıştı

  4. 4 saatlikte yaklaşık 3-4 saat sonra sinyal geliyor iş işten geçmiş oluyor, 4h sinyali nasıl daha erken alabilir, kapanan muma göre yapıyorum.

  5. Öncelikle elinize sağlık,

    buy / sell için aşağıdakiler yeterli oluyor mu?
    Buy:
    if t3_last > t3_previous:
    Sell:
    if t3_last < t3_previous:

  6. Buradaki T3 değerleri ile TradingView daki bir şekilde farklı oluyor bu fark talib ema hesaplamasından mı oluyor başka bir şeyden mi bilemedim ama bu büyük bir sorun

    1. Farklı olmadığını göstermek için hem tradingview hem de matplotlib grafiğini yazımda paylaştım.
      Aynı olduğunu görebilirsin. Parametrelerden herhangi birisinin ya da zaman aralığının farklı olması durumunda tabi ki sonuçlar da farklı olacaktır.

  7. Üstad öncelikle eline sağlık;

    Anlamadığım birkaç konu var müsaadenle;
    1.si ema hesaplamasında 1. parametre olarak data serisi alması gerekiyor ancak burada tek bir değer var,
    2.si python bilmediğim için belki normaldir ancak
    ema_first_input = (high_array + low_array + 2 * close_array) / 4
    satırında gizli bir for loop mu var? burası nasıl çalışıyor anlayamadım.

    Tillsonu java da yazmaya çalışıyorum o yüzden bazı detayları anlamaya çalışıyorum. Teşekkürler.

    1. Zaten bir data serisi gönderiyorum.

      İkinci soruna gelirsek, python mantığıyla ilgili bir şey. Aritmetik işlemi arrayin her elemanı için yapıp, sonuc arrayine ekliyor.

      Java da array operasyonları için işini görecek illaki bir paket vardır.

Yorum bırakın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Scroll to Top