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

Tillson T3 indikatörü, T3, Tillson hareketli ortalamaları olarak da bilinir. Bu teknik göstergenin geliştirilmesinin ardındaki düşünce hareketli ortalamalarda bulunabilecek gecikme ve yanlış sinyalleri iyileştirmekti. T3, diğer ortalama alan (SMA, EMA vb) trend indikatörlerine göre daha yumuşak (daha pürüzsüz) ve duyarlı sonuçlar üretir. T3 kullanılarak trend dönüşleri hissedilebilir.

Orjinali TA-Lib‘de yer alan trader_t3 trend indikatörünün bir PHP implementasyonu PHP trader PECL kütüphanesinde mevcut. Tradingview ile karşılaştıracak olursak PECL, volume factor’u ($vFactor) 0-1 aralığına yerleştirmiş. Sanırım bundan kaynaklı olarak T3’ün ürettiği değerler tradingview ile uyum göstermiyor. Diğer taraftan TA-Lib ve PHP trader’da T3 (Triple Exponential Moving Average) ismiyle yer alan indikatör Tim Tillson’ın 1998’de yayınladığı makalede anlattığı hesaplamayı referans almıyor olabilir. Birkaç gün uğraşarak Tim Tillson’ın T3 indikatörünü PHP ile implemente ettim ve tradingview ile aynı sonucları almayı başardım. Aşağıda yazdığım fonksiyonu görebilirsiniz. Umarım faydası olur.

	function add_tillson_t3($frames, $time_frame, $indicator_config = null) {
		
		$close = $frames[$time_frame]['c'];
		# Check insufficient conditions
		$warning_str = 'Indicator configuration error: ';
		if (count($close) < $time_period * $time_period) {
			log_error($warning_str." Source candles count (".count($high).") smaller then time_period^2 (time_period=$time_period).");
			$frames['indicator_init'] = false;
			return $frames;
		}
		
		$open = $frames[$time_frame]['o'];
		$high = $frames[$time_frame]['h'];
		$low = $frames[$time_frame]['l'];
		$time_period = $indicator_config['period'];
		$volume_factor = $indicator_config['volume_factor'];
		$end = count($close);
		for ($i=0; $i < $end; $i++)
			$ema_first_input[] = ($high[$i] + $low[$i] + 2 * $close[$i])/4;
		ini_set('trader.real_precision', '8');				
		$e1 = trader_ema($ema_first_input, $time_period);
		$e1 = array_merge(array_fill(0, $time_period - 1, 0), $e1);
		$e2 = trader_ema($e1, $time_period);
		$e2 = array_merge(array_fill(0, $time_period - 1, 0), $e2);
		$e3 = trader_ema($e2, $time_period);		
		$e3 = array_merge(array_fill(0, $time_period - 1, 0), $e3);
		$e4 = trader_ema($e3, $time_period);
		$e4 = array_merge(array_fill(0, $time_period - 1, 0), $e4);		
		$e5 = trader_ema($e4, $time_period);		
		$e5 = array_merge(array_fill(0, $time_period - 1, 0), $e5);
		$e6 = trader_ema($e5, $time_period); 
		$e6 = array_merge(array_fill(0, $time_period - 1, 0), $e6);
				
		$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;				
		for ($i = 0; $i < $end; $i++)
			$t3[$i] = round($c1 * $e6[$i] + $c2 * $e5[$i] + $c3 * $e4[$i] + $c4 * $e3[$i], 2);
		
		$frames[$time_frame]['t3'] = $t3;
		
		return $frames;

Yazar: Özgür Koca

Yazar - Tankado.com

Bir cevap yazın

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.