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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
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; |
