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)

2 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]
      ---

Yorum bırakın

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

Scroll to Top