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 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:

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:

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)
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?
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]
---
merhabalar, bu c# olarak ta yazmanız mümkün mü?
Bir kaç tane dotnet wrapper kütüphane var, fakat kullanmadım.
https://github.com/binance-exchange/BinanceDotNet
https://github.com/JKorf/Binance.Net
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
merhabalar, backtest için alış ve satış fiyatlarını ekrana nasıl yazdırabilirim ?
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’
bot.py ile ‘credentials.txt’ aynı klasörde mi? kontrol ettiniz mi?
merhaba. binance bağlantısını kuramadım. github.com da ki gibi dosyası varsa eposta adresime atabilir misiniz.
Kapanan mum mu dikkate alıcaz içinde olunan mı ? ilk yazınızda kapanan mum dediniz sonrakilerde son mum kavramlar karıştı
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.
Her dört saatte bir supertrend hesaplayıp, anlık mumun bir öncesini dikkate alacak şekilde kodlayabilirsiniz.
Bu kod sistemini her dk yenilyecek şekilde ekranda yapsanız daha güzel olmaz mı?
Bir while döngüsü içerisinde her dakika çağırarak son mumu ya da sondan bir önceki muma bakarak, yapabilirsiniz.
Ö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:
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
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.
arkadaşlar yapan varsa github a atabilir mi hazır halini rica etsem