trader_ema
(PECL trader >= 0.2.0)
trader_ema — Exponential Moving Average
Description
array trader_ema
( array
$real
[, integer $timePeriod
] )
Parameters
-
real
-
Array of real values.
-
timePeriod
-
Number of period. Valid range from 2 to 100000.
Return Values
Returns an array with calculated data or false on failure.
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Математические расширения
- Technical Analysis for Traders
- trader_acos
- trader_ad
- trader_add
- trader_adosc
- trader_adx
- trader_adxr
- trader_apo
- trader_aroon
- trader_aroonosc
- trader_asin
- trader_atan
- trader_atr
- trader_avgprice
- trader_bbands
- trader_beta
- trader_bop
- trader_cci
- trader_cdl2crows
- trader_cdl3blackcrows
- trader_cdl3inside
- trader_cdl3linestrike
- trader_cdl3outside
- trader_cdl3starsinsouth
- trader_cdl3whitesoldiers
- trader_cdlabandonedbaby
- trader_cdladvanceblock
- trader_cdlbelthold
- trader_cdlbreakaway
- trader_cdlclosingmarubozu
- trader_cdlconcealbabyswall
- trader_cdlcounterattack
- trader_cdldarkcloudcover
- trader_cdldoji
- trader_cdldojistar
- trader_cdldragonflydoji
- trader_cdlengulfing
- trader_cdleveningdojistar
- trader_cdleveningstar
- trader_cdlgapsidesidewhite
- trader_cdlgravestonedoji
- trader_cdlhammer
- trader_cdlhangingman
- trader_cdlharami
- trader_cdlharamicross
- trader_cdlhighwave
- trader_cdlhikkake
- trader_cdlhikkakemod
- trader_cdlhomingpigeon
- trader_cdlidentical3crows
- trader_cdlinneck
- trader_cdlinvertedhammer
- trader_cdlkicking
- trader_cdlkickingbylength
- trader_cdlladderbottom
- trader_cdllongleggeddoji
- trader_cdllongline
- trader_cdlmarubozu
- trader_cdlmatchinglow
- trader_cdlmathold
- trader_cdlmorningdojistar
- trader_cdlmorningstar
- trader_cdlonneck
- trader_cdlpiercing
- trader_cdlrickshawman
- trader_cdlrisefall3methods
- trader_cdlseparatinglines
- trader_cdlshootingstar
- trader_cdlshortline
- trader_cdlspinningtop
- trader_cdlstalledpattern
- trader_cdlsticksandwich
- trader_cdltakuri
- trader_cdltasukigap
- trader_cdlthrusting
- trader_cdltristar
- trader_cdlunique3river
- trader_cdlupsidegap2crows
- trader_cdlxsidegap3methods
- trader_ceil
- trader_cmo
- trader_correl
- trader_cos
- trader_cosh
- trader_dema
- trader_div
- trader_dx
- trader_ema
- trader_errno
- trader_exp
- trader_floor
- trader_get_compat
- trader_get_unstable_period
- trader_ht_dcperiod
- trader_ht_dcphase
- trader_ht_phasor
- trader_ht_sine
- trader_ht_trendline
- trader_ht_trendmode
- trader_kama
- trader_linearreg_angle
- trader_linearreg_intercept
- trader_linearreg_slope
- trader_linearreg
- trader_ln
- trader_log10
- trader_ma
- trader_macd
- trader_macdext
- trader_macdfix
- trader_mama
- trader_mavp
- trader_max
- trader_maxindex
- trader_medprice
- trader_mfi
- trader_midpoint
- trader_midprice
- trader_min
- trader_minindex
- trader_minmax
- trader_minmaxindex
- trader_minus_di
- trader_minus_dm
- trader_mom
- trader_mult
- trader_natr
- trader_obv
- trader_plus_di
- trader_plus_dm
- trader_ppo
- trader_roc
- trader_rocp
- trader_rocr100
- trader_rocr
- trader_rsi
- trader_sar
- trader_sarext
- trader_set_compat
- trader_set_unstable_period
- trader_sin
- trader_sinh
- trader_sma
- trader_sqrt
- trader_stddev
- trader_stoch
- trader_stochf
- trader_stochrsi
- trader_sub
- trader_sum
- trader_t3
- trader_tan
- trader_tanh
- trader_tema
- trader_trange
- trader_trima
- trader_trix
- trader_tsf
- trader_typprice
- trader_ultosc
- trader_var
- trader_wclprice
- trader_willr
- trader_wma
Коментарии
trader_ema in wrong calculate value
this return just simple moving avrage
for get ema correct use this code
$number is data array and $n is number of period
example:
$number[0] => last value
$number[n] =>first value
function exponentialMovingAverage(array $numbers, int $n): array
{
$numbers=array_reverse($numbers);
$m = count($numbers);
$α = 2 / ($n + 1);
$EMA = [];
// Start off by seeding with the first data point
$EMA[] = $numbers[0];
// Each day after: EMAtoday = α⋅xtoday + (1-α)EMAyesterday
for ($i = 1; $i < $m; $i++) {
$EMA[] = ($α * $numbers[$i]) + ((1 - $α) * $EMA[$i - 1]);
}
$EMA=array_reverse($EMA);
return $EMA;
}
This method works fine. If you're finding that the EMA and SMA results are the same, the precision setting might still be the default or not tuned to your use case. (For example floats with more than 3 levels, sathoshi's, etc)
# this is needed for 0.00XXXXZ levels
ini_set( 'trader.real_precision', '8' );
The trader_ema() function works correctly if you understand what the second argument is. The second argument is used to group the values into overlapping periods. Within the periods, the numbers undergo a simple average calculation.
So if you call trader_ema($array, 6), and your array only has six values, you're going to get back a simple average, because there is no previous data to weight the value.
If you call trader_ema($array, 3), then your six array values will be grouped into four overlapping groups of three, and you'll get back four values, each representing the EMA for that period.
Below is the output of trader_ema(array(1,2,2,1,3,4), 3) and trader_sma(array(1,2,2,1,3,4), 3). You can see the first value is the same for both the EMA and SMA calculations.
trader_ema(array(1,2,2,1,3,4), 3)
array(4) {
[2]=>
float(1.6666666667)
[3]=>
float(1.3333333333)
[4]=>
float(2.1666666667)
[5]=>
float(3.0833333333)
}
trader_sma(array(1,2,2,1,3,4), 3)
array(4) {
[2]=>
float(1.6666666667)
[3]=>
float(1.6666666667)
[4]=>
float(2)
[5]=>
float(2.6666666667)
}
As noted, this function simply doesnt work. It returns MA values.