[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [GT] New EMA
Weigert, Thomas wrote:
I think most indicators in GT work like this:
maybe most, but not all ...
1. if you evaluate the indicator via "calculate", they skip until legal
data is encountered, possible generating loads of error message.
2. if you evaluate the indicator via "calculate_interval", they abort if
you request times out of range.
sma for example has a "calculate_interval", doesn't abort.
zigzag, the prior version of ema ;-), HilbertPeriod, don't abort
(ah just because the method is the doesn't mean it's actually invoked!)
also these all operated very cleanly, without annoying messages. i should
also state that they are in my operating environment, not the repository.
This is due to that the latter use
return if ! $self->check_dependencies_interval (...)
which stops all evaluation, while in the former we just return from the
evaluation of a single data point...
i'm thinking we can (re)code them to operate 'appropriately' regardless of prior
practice/art/convention/happenstance.
since i'm primarily a visual kind of user, i'd like to see an ipos' chart
that starts off without my usual sma 20, 50, 200 and have them automagically
appear on the chart at the appointed time period. same goes for bollingerbands,
aroon, and the cmo.
i think the prior version of ema is much faster than the old one. it appears
that macd has had a marked speedup. not easily evaluated, but not impossible either.
i like what is happening
aloha
ras
So the one's that don't abort are the one's that do not have
calculate_interval defined, but those are much slower, unless there are
not many series involved in computing the indicator.
Th.
-----Original Message-----
From: Robert A. Schmied [mailto:ras
AT
acm.org]
Sent: Thursday, February 28, 2008 11:20 PM
To: devel
AT
geniustrader.org
Subject: Re: [GT] New EMA
Weigert, Thomas wrote:
Yes, as usual in GT, when you try to get the value of an indicator
before the dependencies are satisfied, it will complain. This
indicator
is available only from 1993-1-29 on for EMA(20).
I put an additional test in that causes the indicator to abort in
these
cases. Thus data will only be returned if the dependencies are
satisfied.
That raises the interesting question: How should one handle requests
for
data where dependencies are not satisfied.
In GT in general the series is aborted (if calculate_interval is
used)
or the data is skipped until legal data is found (if calculate is
used).
Of course, often one could make calculate_interval be more
forgiving, as
in this case, but we should decide on a consistent pattern.
seems to me that skipping until output can be found is the best
approach
at least for graphic use. on the other hand if the series aborts and
outputs nothing some sort of indication (possibly multiple) should be
presented to the user other than just 'nothing'.
the possibly multiple means set the return code as well as any other
text message output to one of stdout or stderr. the return code to
indicate an error return condition, but that is beyond the control
of indicator class modules i think, besides none of the gt scripts
do anything like that.
ras
Th.
-----Original Message-----
From: Robert A. Schmied [mailto:ras
AT
acm.org]
Sent: Thursday, February 28, 2008 9:14 PM
To: devel
AT
geniustrader.org
Subject: Re: [GT] New EMA
when operating at the start of data it complained:
ras [ 5148 ] % ./display_indicator.pl --start 1993-01-04 --end
1993-07-
01 I:EMA 13000
Indicator I:EMA has 1 value ... all values selected
I:EMA/1 <=> EMA[20,{I:Prices CLOSE}]
timeframe day, time periods 0 .. 123
Calculating indicator ...
Use of uninitialized value in subtraction (-) at
../GT/Indicators/EMA.pm
line 126.
Use of uninitialized value in addition (+) at
../GT/Indicators/EMA.pm
line
126.
EMA[20,{I:Prices CLOSE}][1993-01-05 00:00:00] = 1.9978
EMA[20,{I:Prices CLOSE}][1993-01-06 00:00:00] = 3.7676
EMA[20,{I:Prices CLOSE}][1993-01-07 00:00:00] = 5.3456
so i hacked around and came up with
my $ema;
for (my $i = $first+1; $i <= $last; $i++) {
my $oldema = $indic->get($name, $i - 1);
( defined($oldema) )
? $ema = $alpha * ($self->{'args'}->get_arg_values($calc,
$i, 2)
- $oldema) + $oldema
: $ema = $alpha * ($self->{'args'}->get_arg_values($calc,
$i,
2));
$indic->set($name, $i, $ema);
}
you may have a better option, but it solves the issue noted above
and
i
think
the answers remain the same.