You can subscribe to this list here.
| 2000 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(32) |
Oct
(144) |
Nov
(14) |
Dec
(44) |
| 2002 |
Jan
(16) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(2) |
Jul
|
Aug
|
Sep
|
Oct
(65) |
Nov
(4) |
Dec
(30) |
| 2003 |
Jan
(84) |
Feb
(101) |
Mar
(58) |
Apr
(30) |
May
(138) |
Jun
(336) |
Jul
(36) |
Aug
(12) |
Sep
(8) |
Oct
(4) |
Nov
(12) |
Dec
(12) |
| 2004 |
Jan
(186) |
Feb
(274) |
Mar
(248) |
Apr
(18) |
May
(104) |
Jun
(48) |
Jul
(144) |
Aug
(98) |
Sep
(60) |
Oct
(72) |
Nov
(32) |
Dec
(130) |
| 2005 |
Jan
(84) |
Feb
(130) |
Mar
(50) |
Apr
(106) |
May
(240) |
Jun
(154) |
Jul
(66) |
Aug
(82) |
Sep
(36) |
Oct
(18) |
Nov
(14) |
Dec
(4) |
| 2006 |
Jan
(68) |
Feb
(2) |
Mar
(14) |
Apr
(6) |
May
|
Jun
|
Jul
|
Aug
(2) |
Sep
|
Oct
|
Nov
(50) |
Dec
(4) |
| 2007 |
Jan
(14) |
Feb
(42) |
Mar
(70) |
Apr
(30) |
May
(8) |
Jun
|
Jul
(2) |
Aug
(2) |
Sep
|
Oct
(88) |
Nov
(168) |
Dec
(2) |
| 2008 |
Jan
(56) |
Feb
(372) |
Mar
(446) |
Apr
(112) |
May
(144) |
Jun
(94) |
Jul
(208) |
Aug
(90) |
Sep
(26) |
Oct
(10) |
Nov
(2) |
Dec
|
| 2009 |
Jan
|
Feb
(8) |
Mar
|
Apr
(46) |
May
(188) |
Jun
(120) |
Jul
(448) |
Aug
(202) |
Sep
(4) |
Oct
(72) |
Nov
(154) |
Dec
(2) |
| 2010 |
Jan
(58) |
Feb
|
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
(68) |
Aug
(24) |
Sep
|
Oct
|
Nov
|
Dec
(11) |
| 2011 |
Jan
(6) |
Feb
(11) |
Mar
(8) |
Apr
(10) |
May
(4) |
Jun
|
Jul
|
Aug
(8) |
Sep
|
Oct
(3) |
Nov
(2) |
Dec
|
| 2012 |
Jan
|
Feb
(13) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(31) |
Aug
(21) |
Sep
(2) |
Oct
(1) |
Nov
(29) |
Dec
(17) |
| 2013 |
Jan
(2) |
Feb
|
Mar
|
Apr
(25) |
May
(1) |
Jun
|
Jul
|
Aug
(1) |
Sep
(3) |
Oct
(4) |
Nov
(11) |
Dec
|
| 2016 |
Jan
(1) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2018 |
Jan
(3) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2019 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
| 2020 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2023 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
(1) |
Oct
|
Nov
|
Dec
|
|
From: GeniusTrader C. r. <ra...@ge...> - 2003-01-21 22:19:47
|
Update of /bourse/cvsroot/GT/Signals/Volatility
In directory arrakis:/scratch/tmp/cvs-serv20302/Signals/Volatility
Modified Files:
NR.pm
Log Message:
- Added I:Generic:MaxInPeriod and I:Generic:MinInPeriod as replacement
for I:MAX, I:MIN, I:MaxSince and I:MinSince (which have been removed).
- Updated all modules to use the new indicators.
- Added I:Generic:Max and I:Generic:Min to get the max and min of several
parameters (ex: I:Generic:Max {I:Prices OPEN} {I:Prices CLOSE}).
--- /bourse/cvsroot/GT/Signals/Volatility/NR.pm 2002/10/06 15:39:28 1.2
+++ /bourse/cvsroot/GT/Signals/Volatility/NR.pm 2003/01/21 21:15:25 1.3
@@ -10,7 +10,7 @@
use GT::Signals;
use GT::Prices;
use GT::Indicators::Range;
-use GT::Indicators::MIN;
+use GT::Indicators::Generic::MinInPeriod;
@ISA = qw(GT::Signals);
@NAMES = ("NR[#1]");
@@ -36,7 +36,7 @@
my ($self) = @_;
$self->{'range'} = GT::Indicators::Range->new;
- $self->{'min_range'} = GT::Indicators::MIN->new(
+ $self->{'min_range'} = GT::Indicators::Generic::MinInPeriod->new(
[ $self->{'args'}[0] ],
$self->{'range'}->get_name,
sub { $_[0]->indicators->get($self->{'range'}->get_name, $_[1]) }
|
|
From: GeniusTrader C. r. <ra...@ge...> - 2003-01-21 22:19:45
|
Update of /bourse/cvsroot/GT/Signals/Prices
In directory arrakis:/scratch/tmp/cvs-serv20302/Signals/Prices
Modified Files:
RecordPriceHigh.pm RecordPriceLow.pm
Log Message:
- Added I:Generic:MaxInPeriod and I:Generic:MinInPeriod as replacement
for I:MAX, I:MIN, I:MaxSince and I:MinSince (which have been removed).
- Updated all modules to use the new indicators.
- Added I:Generic:Max and I:Generic:Min to get the max and min of several
parameters (ex: I:Generic:Max {I:Prices OPEN} {I:Prices CLOSE}).
--- /bourse/cvsroot/GT/Signals/Prices/RecordPriceHigh.pm 2002/10/06 15:39:28 1.3
+++ /bourse/cvsroot/GT/Signals/Prices/RecordPriceHigh.pm 2003/01/21 21:15:25 1.4
@@ -9,7 +9,7 @@
use GT::Signals;
use GT::Prices;
-use GT::Indicators::MAX;
+use GT::Indicators::Generic::MaxInPeriod;
@ISA = qw(GT::Signals);
@NAMES = ("RecordPriceHigh");
@@ -27,10 +27,10 @@
sub initialize {
my ($self) = @_;
- $self->{'max'} = GT::Indicators::MAX->new([ $self->{'args'}[0] - 1 ]);
+ $self->{'max'} = GT::Indicators::Generic::MaxInPeriod->new([ $self->{'args'}[0] - 1 ], "HIGH", $GET_HIGH);
$self->add_indicator_dependency($self->{'max'}, 2);
- $self->add_prices_dependency(1);
+ $self->add_prices_dependency($self->{'args'}[0]);
}
sub detect {
--- /bourse/cvsroot/GT/Signals/Prices/RecordPriceLow.pm 2002/10/06 15:39:28 1.3
+++ /bourse/cvsroot/GT/Signals/Prices/RecordPriceLow.pm 2003/01/21 21:15:25 1.4
@@ -9,7 +9,7 @@
use GT::Signals;
use GT::Prices;
-use GT::Indicators::MIN;
+use GT::Indicators::Generic::MinInPeriod;
@ISA = qw(GT::Signals);
@NAMES = ("RecordPriceLow");
@@ -27,10 +27,10 @@
sub initialize {
my ($self) = @_;
- $self->{'min'} = GT::Indicators::MIN->new([ $self->{'args'}[0] - 1]);
+ $self->{'min'} = GT::Indicators::GeneircMinInPeriod->new([ $self->{'args'}[0] - 1 ], "LOW", $GET_LOW);
$self->add_indicator_dependency($self->{'min'}, 2);
- $self->add_prices_dependency(1);
+ $self->add_prices_dependency($self->{'args'}[0]);
}
sub detect {
|
|
From: GeniusTrader C. r. <ra...@ge...> - 2003-01-21 22:19:43
|
Update of /bourse/cvsroot/GT/Indicators
In directory arrakis:/scratch/tmp/cvs-serv20302/Indicators
Modified Files:
AROON.pm GAPO.pm SAR.pm STO.pm TETHER.pm VHF.pm WilliamsR.pm
Removed Files:
MAX.pm MIN.pm MaxSince.pm MinSince.pm
Log Message:
- Added I:Generic:MaxInPeriod and I:Generic:MinInPeriod as replacement
for I:MAX, I:MIN, I:MaxSince and I:MinSince (which have been removed).
- Updated all modules to use the new indicators.
- Added I:Generic:Max and I:Generic:Min to get the max and min of several
parameters (ex: I:Generic:Max {I:Prices OPEN} {I:Prices CLOSE}).
--- /bourse/cvsroot/GT/Indicators/AROON.pm 2002/10/06 15:39:26 1.4
+++ /bourse/cvsroot/GT/Indicators/AROON.pm 2003/01/21 21:15:25 1.5
@@ -8,8 +8,8 @@
use vars qw(@ISA @NAMES);
use GT::Indicators;
-use GT::Indicators::MIN;
-use GT::Indicators::MAX;
+use GT::Indicators::Generic::MinInPeriod;
+use GT::Indicators::Generic::MaxInPeriod;
use GT::Prices;
@ISA = qw(GT::Indicators);
@@ -53,8 +53,8 @@
sub initialize {
my $self = shift;
- $self->{'min'} = GT::Indicators::MIN->new([ $self->{'args'}[0] ]);
- $self->{'max'} = GT::Indicators::MAX->new([ $self->{'args'}[0] ]);
+ $self->{'min'} = GT::Indicators::Generic::MinInPeriod->new([ $self->{'args'}[0] ], "LOW", $GET_LOW);
+ $self->{'max'} = GT::Indicators::Generic::MaxInPeriod->new([ $self->{'args'}[0] ], "HIGH", $GET_HIGH);
$self->add_indicator_dependency($self->{'min'}, 1);
$self->add_indicator_dependency($self->{'max'}, 1);
--- /bourse/cvsroot/GT/Indicators/GAPO.pm 2002/10/06 15:39:26 1.3
+++ /bourse/cvsroot/GT/Indicators/GAPO.pm 2003/01/21 21:15:25 1.4
@@ -8,8 +8,8 @@
use vars qw(@ISA @NAMES);
use GT::Indicators;
-use GT::Indicators::MIN;
-use GT::Indicators::MAX;
+use GT::Indicators::Generic::MinInPeriod;
+use GT::Indicators::Generic::MaxInPeriod;
use GT::Prices;
@ISA = qw(GT::Indicators);
@@ -53,11 +53,12 @@
sub initialize {
my $self = shift;
- $self->{'min'} = GT::Indicators::MIN->new([ $self->{'args'}[0] ]);
- $self->{'max'} = GT::Indicators::MAX->new([ $self->{'args'}[0] ]);
+ $self->{'min'} = GT::Indicators::Generic::MinInPeriod->new([ $self->{'args'}[0] ], "LOW", $GET_LOW);
+ $self->{'max'} = GT::Indicators::Generic::MaxInPeriod->new([ $self->{'args'}[0] ], "HIGH", $GET_HIGH);
$self->add_indicator_dependency($self->{'min'}, 1);
$self->add_indicator_dependency($self->{'max'}, 1);
+ $self->add_prices_dependency($self->{'args'}[0]);
}
=head2 GT::Indicators::GAPO::calculate($calc, $day)
--- /bourse/cvsroot/GT/Indicators/SAR.pm 2002/10/06 15:39:26 1.4
+++ /bourse/cvsroot/GT/Indicators/SAR.pm 2003/01/21 21:15:25 1.5
@@ -8,8 +8,8 @@
use vars qw(@ISA @NAMES);
use GT::Indicators;
-use GT::Indicators::MIN;
-use GT::Indicators::MAX;
+use GT::Indicators::Generic::MinInPeriod;
+use GT::Indicators::Generic::MaxInPeriod;
use GT::Prices;
@ISA = qw(GT::Indicators);
@@ -89,12 +89,12 @@
sub initialize {
my $self = shift;
- $self->{'min'} = GT::Indicators::MIN->new([ 3 ], $self->{'key'}, sub { $self->{'_func'}(@_) });
- $self->{'max'} = GT::Indicators::MAX->new([ 3 ], $self->{'key'}, sub { $self->{'_func'}(@_) });
+ $self->{'min'} = GT::Indicators::Generic::MinInPeriod->new([ 3 ], $self->{'key'}, sub { $self->{'_func'}(@_) });
+ $self->{'max'} = GT::Indicators::Generic::MaxInPeriod->new([ 3 ], $self->{'key'}, sub { $self->{'_func'}(@_) });
$self->add_indicator_dependency($self->{'min'}, 3);
$self->add_indicator_dependency($self->{'max'}, 3);
- $self->add_prices_dependency(3);
+ $self->add_prices_dependency(5);
}
=head2 GT::Indicators::SAR::calculate($calc, $day)
--- /bourse/cvsroot/GT/Indicators/STO.pm 2002/10/06 15:39:26 1.4
+++ /bourse/cvsroot/GT/Indicators/STO.pm 2003/01/21 21:15:25 1.5
@@ -9,8 +9,8 @@
use GT::Indicators;
use GT::Indicators::SMA;
-use GT::Indicators::MIN;
-use GT::Indicators::MAX;
+use GT::Indicators::Generic::MinInPeriod;
+use GT::Indicators::Generic::MaxInPeriod;
use GT::Prices;
@ISA = qw(GT::Indicators);
@@ -62,8 +62,8 @@
my $self = shift;
# We need to call MIN and MAX first
- $self->{'min'} = GT::Indicators::MIN->new([ $self->{'args'}[0] ]);
- $self->{'max'} = GT::Indicators::MAX->new([ $self->{'args'}[0] ]);
+ $self->{'min'} = GT::Indicators::Generic::MinInPeriod->new([ $self->{'args'}[0] ], "LOW", $GET_LOW);
+ $self->{'max'} = GT::Indicators::Generic::MaxInPeriod->new([ $self->{'args'}[0] ], "HIGH", $GET_HIGH);
# Initialize %D Fast
$self->{'%d_fast'} = GT::Indicators::SMA->new([ $self->{'args'}[1] ], $self->get_name(0), sub { $_[0]->indicators->get($self->get_name(0), $_[1]) });
@@ -80,6 +80,7 @@
$self->add_indicator_dependency($self->{'min'}, $nb_days);
$self->add_indicator_dependency($self->{'max'}, $nb_days);
+ $self->add_prices_dependency($nb_days + $self->{'args'}[0] - 1);
}
=pod
--- /bourse/cvsroot/GT/Indicators/TETHER.pm 2002/10/06 15:39:27 1.4
+++ /bourse/cvsroot/GT/Indicators/TETHER.pm 2003/01/21 21:15:25 1.5
@@ -8,8 +8,8 @@
use vars qw(@ISA @NAMES);
use GT::Indicators;
-use GT::Indicators::MIN;
-use GT::Indicators::MAX;
+use GT::Indicators::Generic::MinInPeriod;
+use GT::Indicators::Generic::MaxInPeriod;
use GT::Prices;
@ISA = qw(GT::Indicators);
@@ -52,12 +52,12 @@
sub initialize {
my $self = shift;
- $self->{'min'} = GT::Indicators::MIN->new([ $self->{'args'}[0] ]);
- $self->{'max'} = GT::Indicators::MAX->new([ $self->{'args'}[0] ]);
+ $self->{'min'} = GT::Indicators::Generic::MinInPeriod->new([ $self->{'args'}[0] ], "LOW", $GET_LOW);
+ $self->{'max'} = GT::Indicators::Generic::MaxInPeriod->new([ $self->{'args'}[0] ], "HIGH", $GET_HIGH);
$self->add_indicator_dependency($self->{'min'}, 1);
$self->add_indicator_dependency($self->{'max'}, 1);
- $self->add_prices_dependency(1);
+ $self->add_prices_dependency($self->{'args'}[0]);
}
=pod
--- /bourse/cvsroot/GT/Indicators/VHF.pm 2002/10/06 15:39:27 1.4
+++ /bourse/cvsroot/GT/Indicators/VHF.pm 2003/01/21 21:15:25 1.5
@@ -8,8 +8,8 @@
use vars qw(@ISA @NAMES);
use GT::Indicators;
-use GT::Indicators::MIN;
-use GT::Indicators::MAX;
+use GT::Indicators::Generic::MinInPeriod;
+use GT::Indicators::Generic::MaxInPeriod;
use GT::Prices;
@ISA = qw(GT::Indicators);
@@ -54,8 +54,8 @@
sub initialize {
my $self = shift;
- $self->{'min'} = GT::Indicators::MIN->new([ $self->{'args'}[0] ], "LAST", $GET_LAST);
- $self->{'max'} = GT::Indicators::MAX->new([ $self->{'args'}[0] ], "LAST", $GET_LAST);
+ $self->{'min'} = GT::Indicators::Generic::MinInPeriod->new([ $self->{'args'}[0] ], "LAST", $GET_LAST);
+ $self->{'max'} = GT::Indicators::Generic::MaxInPeriod->new([ $self->{'args'}[0] ], "LAST", $GET_LAST);
$self->add_indicator_dependency($self->{'min'}, 1);
$self->add_indicator_dependency($self->{'max'}, 1);
--- /bourse/cvsroot/GT/Indicators/WilliamsR.pm 2002/10/06 15:39:27 1.2
+++ /bourse/cvsroot/GT/Indicators/WilliamsR.pm 2003/01/21 21:15:25 1.3
@@ -8,8 +8,8 @@
use vars qw(@ISA @NAMES);
use GT::Indicators;
-use GT::Indicators::MIN;
-use GT::Indicators::MAX;
+use GT::Indicators::Generic::MinInPeriod;
+use GT::Indicators::Generic::MaxInPeriod;
use GT::Prices;
@ISA = qw(GT::Indicators);
@@ -61,12 +61,12 @@
sub initialize {
my $self = shift;
- $self->{'min'} = GT::Indicators::MIN->new([ $self->{'args'}[0] ]);
- $self->{'max'} = GT::Indicators::MAX->new([ $self->{'args'}[0] ]);
+ $self->{'min'} = GT::Indicators::Generic::MinInPeriod->new([ $self->{'args'}[0] ], "LOW", $GET_LOW);
+ $self->{'max'} = GT::Indicators::Generic::MaxInPeriod->new([ $self->{'args'}[0] ], "HIGH", $GET_HIGH);
$self->add_indicator_dependency($self->{'min'}, 1);
$self->add_indicator_dependency($self->{'max'}, 1);
- $self->add_prices_dependency(1);
+ $self->add_prices_dependency($self->{'args'}[0]);
}
=head2 GT::Indicators::Williams%R::calculate($calc, $day)
|
|
From: GeniusTrader C. r. <ra...@ge...> - 2003-01-21 22:19:41
|
Update of /bourse/cvsroot/GT/CloseStrategy/Stop
In directory arrakis:/scratch/tmp/cvs-serv20302/CloseStrategy/Stop
Modified Files:
ExtremePrices.pm KeepRunUp.pm
Log Message:
- Added I:Generic:MaxInPeriod and I:Generic:MinInPeriod as replacement
for I:MAX, I:MIN, I:MaxSince and I:MinSince (which have been removed).
- Updated all modules to use the new indicators.
- Added I:Generic:Max and I:Generic:Min to get the max and min of several
parameters (ex: I:Generic:Max {I:Prices OPEN} {I:Prices CLOSE}).
--- /bourse/cvsroot/GT/CloseStrategy/Stop/ExtremePrices.pm 2002/10/06 15:39:25 1.3
+++ /bourse/cvsroot/GT/CloseStrategy/Stop/ExtremePrices.pm 2003/01/21 21:15:25 1.4
@@ -10,8 +10,8 @@
use GT::CloseStrategy;
use GT::Prices;
use Carp::Datum;
-use GT::Indicators::MIN;
-use GT::Indicators::MAX;
+use GT::Indicators::Generic::MinInPeriod;
+use GT::Indicators::Generic::MaxInPeriod;
@ISA = qw(GT::CloseStrategy);
@NAMES = ("ExtremePrices[#1,#2]");
@@ -40,12 +40,12 @@
sub initialize {
my ($self) = @_;
- $self->{'min'} = GT::Indicators::MIN->new([ $self->{'args'}[0] ]);
- $self->{'max'} = GT::Indicators::MAX->new([ $self->{'args'}[0] ]);
+ $self->{'min'} = GT::Indicators::Generic::MinInPeriod->new([ $self->{'args'}[0] ], "LOW", $GET_LOW);
+ $self->{'max'} = GT::Indicators::Generic::MaxInPeriod->new([ $self->{'args'}[0] ], "HIGH", $GET_HIGH);
$self->add_indicator_dependency($self->{'min'}, 1);
$self->add_indicator_dependency($self->{'max'}, 1);
- $self->add_prices_dependency(1);
+ $self->add_prices_dependency($self->{'args'}[0]);
}
sub get_indicative_long_stop {
--- /bourse/cvsroot/GT/CloseStrategy/Stop/KeepRunUp.pm 2002/10/06 15:39:25 1.3
+++ /bourse/cvsroot/GT/CloseStrategy/Stop/KeepRunUp.pm 2003/01/21 21:15:25 1.4
@@ -8,8 +8,8 @@
use vars qw(@ISA @NAMES);
use GT::CloseStrategy;
-use GT::Indicators::MaxSince;
-use GT::Indicators::MinSince;
+use GT::Indicators::Generic::MaxInPeriod;
+use GT::Indicators::Generic::MinInPeriod;
use GT::Prices;
use Carp::Datum;
@@ -80,7 +80,7 @@
if ($i >= $prices->date($date)) {
- my $max = GT::Indicators::MaxSince->new([$date]);
+ my $max = GT::Indicators::Generic::MaxInPeriod->new([$date], "HIGH", $GET_HIGH);
$max->calculate($calc, $i);
my $highest_high = $calc->indicators->get($max->get_name, $i);
@@ -100,7 +100,7 @@
if ($i >= $prices->date($date)) {
- my $min = GT::Indicators::MinSince->new([$date]);
+ my $min = GT::Indicators::Generic::MinInPeriod->new([$date], "LOW", $GET_LOW);
$min->calculate($calc, $i);
my $lowest_low = $calc->indicators->get($min->get_name, $i);
|
|
From: GeniusTrader C. r. <ra...@ge...> - 2003-01-21 22:19:39
|
Update of /bourse/cvsroot/GT/Indicators/Generic
In directory arrakis:/scratch/tmp/cvs-serv20302/Indicators/Generic
Modified Files:
If.pm
Added Files:
Max.pm MaxInPeriod.pm Min.pm MinInPeriod.pm
Log Message:
- Added I:Generic:MaxInPeriod and I:Generic:MinInPeriod as replacement
for I:MAX, I:MIN, I:MaxSince and I:MinSince (which have been removed).
- Updated all modules to use the new indicators.
- Added I:Generic:Max and I:Generic:Min to get the max and min of several
parameters (ex: I:Generic:Max {I:Prices OPEN} {I:Prices CLOSE}).
--- /bourse/cvsroot/GT/Indicators/Generic/If.pm 2003/01/19 22:14:40 1.1
+++ /bourse/cvsroot/GT/Indicators/Generic/If.pm 2003/01/21 21:15:25 1.2
@@ -27,9 +27,9 @@
=over
-=item {S:Prices:Advance} {I:Generic:MaxSince} {I:Generic:MinSince}
+=item {S:Prices:Advance} {I:Generic:MaxInPeriod 5} {I:Generic:MinInPeriod 5}
-=item {S:Generic:CrossOverUp {I:RSI} 80} {I:SAR} {I:Generic:MaxSince}
+=item {S:Generic:CrossOverUp {I:RSI} 80} {I:SAR} {I:Generic:MaxInPeriod 10}
=back
|
|
From: GeniusTrader C. r. <ra...@ge...> - 2003-01-21 22:19:36
|
Update of /bourse/cvsroot/GT
In directory arrakis:/scratch/tmp/cvs-serv20302
Modified Files:
Eval.pm Tools.pm
Log Message:
- Added I:Generic:MaxInPeriod and I:Generic:MinInPeriod as replacement
for I:MAX, I:MIN, I:MaxSince and I:MinSince (which have been removed).
- Updated all modules to use the new indicators.
- Added I:Generic:Max and I:Generic:Min to get the max and min of several
parameters (ex: I:Generic:Max {I:Prices OPEN} {I:Prices CLOSE}).
--- /bourse/cvsroot/GT/Eval.pm 2003/01/19 22:14:40 1.10
+++ /bourse/cvsroot/GT/Eval.pm 2003/01/21 21:15:25 1.11
@@ -86,7 +86,7 @@
{
$n = short_name($n);
}
- if (defined($number)) {
+ if (defined($number) && $number) {
$n .= "/" . ($number + 1);
}
if (ref($object->{'args'}) =~ /GT::ArgsTree/) {
--- /bourse/cvsroot/GT/Tools.pm 2003/01/19 22:14:40 1.15
+++ /bourse/cvsroot/GT/Tools.pm 2003/01/21 21:15:25 1.16
@@ -300,7 +300,7 @@
$name =~ s/Indicators::?/I:/g;
$name =~ s/Systems::?/SY:/g;
- $name =~ s/Siginals::?/S:/g;
+ $name =~ s/Signals::?/S:/g;
$name =~ s/TradeFilters::?/TF:/g;
$name =~ s/CloseStrategy::?/CS:/g;
$name =~ s/MoneyManagement::?/MM:/g;
|
|
From: GeniusTrader C. r. <ra...@ge...> - 2003-01-19 23:15:46
|
Update of /bourse/cvsroot/GT/Indicators/Generic In directory arrakis:/scratch/tmp/cvs-serv15174/Indicators/Generic Added Files: If.pm Log Message: - New Prices indicator. - New Generic:If indicator. - Remove now obsolete Volume indicator. - Misc fixes (inclusion of the "/number" in the standard name to identify a value within an indicator). |
|
From: GeniusTrader C. r. <ra...@ge...> - 2003-01-19 23:15:44
|
Update of /bourse/cvsroot/GT/Indicators In directory arrakis:/scratch/tmp/cvs-serv15174/Indicators Added Files: Prices.pm Removed Files: Volume.pm Log Message: - New Prices indicator. - New Generic:If indicator. - Remove now obsolete Volume indicator. - Misc fixes (inclusion of the "/number" in the standard name to identify a value within an indicator). |
|
From: GeniusTrader C. r. <ra...@ge...> - 2003-01-19 23:15:42
|
Update of /bourse/cvsroot/GT
In directory arrakis:/scratch/tmp/cvs-serv15174
Modified Files:
ArgsTree.pm Eval.pm Tools.pm
Log Message:
- New Prices indicator.
- New Generic:If indicator.
- Remove now obsolete Volume indicator.
- Misc fixes (inclusion of the "/number" in the standard name to identify a
value within an indicator).
--- /bourse/cvsroot/GT/ArgsTree.pm 2003/01/02 22:25:19 1.9
+++ /bourse/cvsroot/GT/ArgsTree.pm 2003/01/19 22:14:40 1.10
@@ -87,7 +87,7 @@
my $object = GT::Eval::create_standard_object($self->[$i][0]{"name"}, @args);
my $number = extract_object_number($self->[$i][0]{"name"});
$self->[$i][0]{"object"} = $object;
- $self->[$i][0]{"standard_name"} = "{" . GT::Eval::get_standard_name($object) . "}";
+ $self->[$i][0]{"standard_name"} = "{" . GT::Eval::get_standard_name($object, 1, $number) . "}";
$self->[$i][0]{"number"} = $number;
}
return DVOID;
--- /bourse/cvsroot/GT/Eval.pm 2002/12/28 20:16:10 1.9
+++ /bourse/cvsroot/GT/Eval.pm 2003/01/19 22:14:40 1.10
@@ -70,7 +70,7 @@
return DVAL $object;
}
-=item C<< get_standard_name($object) >>
+=item C<< get_standard_name($object, $shorten, $number) >>
Return the standard name of an object that can be later used to
create it again.
@@ -78,13 +78,16 @@
=cut
sub get_standard_name {
DFEATURE my $f;
- my ($object, $shorten) = @_;
+ my ($object, $shorten, $number) = @_;
$shorten = 1 if (! defined($shorten));
my $n = ref($object);
$n =~ s/GT:://g;
if ($shorten)
{
$n = short_name($n);
+ }
+ if (defined($number)) {
+ $n .= "/" . ($number + 1);
}
if (ref($object->{'args'}) =~ /GT::ArgsTree/) {
$n .= " " . join(" ", $object->{'args'}->get_arg_names());
--- /bourse/cvsroot/GT/Tools.pm 2002/12/28 20:16:10 1.14
+++ /bourse/cvsroot/GT/Tools.pm 2003/01/19 22:14:40 1.15
@@ -298,13 +298,13 @@
sub short_name {
my ($name) = @_;
- $name =~ s/Iname dicators::/I:/g;
- $name =~ s/Systems::/SY:/g;
- $name =~ s/Signame als::/S:/g;
- $name =~ s/TradeFilters::/TF:/g;
- $name =~ s/CloseStrategy::/CS:/g;
- $name =~ s/Moname eyManame agemename t::/MM:/g;
- $name =~ s/OrderFactory::/OF:/g;
+ $name =~ s/Indicators::?/I:/g;
+ $name =~ s/Systems::?/SY:/g;
+ $name =~ s/Siginals::?/S:/g;
+ $name =~ s/TradeFilters::?/TF:/g;
+ $name =~ s/CloseStrategy::?/CS:/g;
+ $name =~ s/MoneyManagement::?/MM:/g;
+ $name =~ s/OrderFactory::?/OF:/g;
$name =~ s/::/:/g;
return $name;
|
|
From: GeniusTrader C. r. <ra...@ge...> - 2003-01-19 23:15:39
|
Update of /bourse/cvsroot/Scripts
In directory arrakis:/scratch/tmp/cvs-serv15073
Modified Files:
display_indicator.pl
Log Message:
- Be able to display non-numeric values for indicators too.
--- /bourse/cvsroot/Scripts/display_indicator.pl 2002/12/28 20:34:05 1.9
+++ /bourse/cvsroot/Scripts/display_indicator.pl 2003/01/19 22:12:09 1.10
@@ -79,8 +79,13 @@
my $name = $indicator->get_name($n);
if ($calc->indicators->is_available($name, $i)) {
- printf "%-20s[%s] = %.4f\n", $name, $q->at($i)->[$DATE],
- $calc->indicators->get($name, $i);
+ my $value = $calc->indicators->get($name, $i);
+ if ($value =~ /^\d+(?:\.\d+)?$/) {
+ printf "%-20s[%s] = %.4f\n", $name, $q->at($i)->[$DATE], $value;
+ } else {
+ printf "%-20s[%s] = %s\n", $name, $q->at($i)->[$DATE], $value;
+ }
+
}
}
}
|
|
From: Raphael H. <ra...@ge...> - 2003-01-17 18:34:06
|
Hi, Le Fri, Jan 17, 2003 at 05:43:44PM +0100, Oliver Bossert écrivait: > > BTW, I'd like to provide "standard aliases" bundled with GeniusTrader > > so that some common indicators can be provided by default without > > duplicating needless code. > > This would be a good idea. It would be handy to provide in such a way > e.g. a Divide, Add, or whatsowever indicator. Like that it is not > necessary to implement them and it makes the code easier to read if > one can use them in contrast to the Eval. The required code is already in GeniusTrader (cf GT/Tools.pm). We just need to provide the files with the global aliases ... /usr/share/geniustrader/aliases/signals /usr/share/geniustrader/aliases/indicators You can override the location of those files with some configuration items like Path::Aliases::Signals, etc. > This makes sence. In general an Indicators::Generic::IfThenElse- > Object would be very useful. Sure. > > I agree that this is not nice. I'm in favor of completely removing > > this code ... we can create a special indicator called "Prices" which > > would return the prices. > > This would be nice - especially if the indicator would also provide > the posibillity to display an other stock/index. I didn't thought of that but it's a great idea ! It's not so trivial as it looks because I have to map the "dates" ... we have no guaranty that both series of prices have prices for the same days ... but it's still worth it. > > * MaxSince/MinSince > > > > I'm ok for these. We just need to find a better name since I already > > have MaxSince and MinSince but they use other parameters (a fixed > > date) as input. Maybe PeriodMax/PeriodMin ? > > Ok. We could also modify the indicators in a way that it > automagically recognizes if the parameter is an integer or a date -- Right, I like that solution. Cheers, -- Raphaël Hertzog -+- http://www.ouaza.com Formation Linux et logiciel libre : http://www.logidee.com |
|
From: Oliver B. <ol...@ol...> - 2003-01-17 17:45:58
|
Hi, > Sure, but if the web frontend needs to offer the same flexibility as > the script, it's going to get complicated ... If we would use e.g. the HTML::Mason module the implementation should be realtive simple because the perl code is reusable and can be included in the HTML-files. The frontend must not provide the 100%- flexibility. It would be sufficient if the frontend would provide a charting module where indicators and buy/sell-signals can be added. In a second module the system can be backtested. I'm also not very interested in programming such a frontend because I don't need it. But it would be a good advertisement. :) CU, Olf |
|
From: Oliver B. <ol...@ol...> - 2003-01-17 17:45:53
|
Hi,
> > could be completely designed as an alias. The problem hereby is that
> > some of them need two parameters (e.g. Divide).
> Why is that a problem ?
This makes IMO the creation of a new indicator unaesthetic because
using the Indicators.pm new-function it is not possible without using
a String-argument. I think it would be nice if the two parameters
could be created by their new-function and then handled to the new-
function of the indicator. But this problem is solved if we use the
Eval and the Price-Indicator.
> BTW, I'd like to provide "standard aliases" bundled with GeniusTrader
> so that some common indicators can be provided by default without
> duplicating needless code.
This would be a good idea. It would be handy to provide in such a way
e.g. a Divide, Add, or whatsowever indicator. Like that it is not
necessary to implement them and it makes the code easier to read if
one can use them in contrast to the Eval.
> Take for example your Generic:SumUp and Generic:SumDown. I don't like
> them. But I'd be in favor of a "Generic:SumIf <period> {S:ASignal}
> {I:Something}"... it would return the sum of I:Something for all days
> in the last <period> days where S:ASignal was true.
This makes sence. In general an Indicators::Generic::IfThenElse-
Object would be very useful.
> I agree that this is not nice. I'm in favor of completely removing
> this code ... we can create a special indicator called "Prices" which
> would return the prices.
This would be nice - especially if the indicator would also provide
the posibillity to display an other stock/index.
> * Divide/Multiply/Minus/Plus
> I really don't see the need for those indicators. I:Generic:Eval does
> already everything needed ... once we have the I:Prices suggested
> above.
I agree.
> * MaxSince/MinSince
>
> I'm ok for these. We just need to find a better name since I already
> have MaxSince and MinSince but they use other parameters (a fixed
> date) as input. Maybe PeriodMax/PeriodMin ?
Ok. We could also modify the indicators in a way that it
automagically recognizes if the parameter is an integer or a date --
but this would maybe lead to confusion.
CU, Olf
|
|
From: Raphael H. <ra...@ge...> - 2003-01-16 23:49:20
|
Le Wed, Jan 15, 2003 at 06:17:32PM +0100, Oliver Bossert écrivait:
> Hi Raphael,
Hi,
> today I had a little time to work out the two Indicators VIDYA and
> TRIX. I validated them "optically" by comparing the graphical output
> with a website. Unfortunately I don't have a sotware to compare the
> exact values. The indicators both work very well and they sopport the
> ArgsTree-architecture. If you find them useful, you can include them
> in the repository.
I'm adding TRIX right now.
I'm ok to add VIDYA and DSS but they depend on new Generic indicators
that I'd like to discuss first.
> I tried to create small, generic indicators which are reusable, so
> that their combination to new indicators is very easy. the DSS e.g.
> could be completely designed as an alias. The problem hereby is that
> some of them need two parameters (e.g. Divide).
Why is that a problem ?
BTW, I'd like to provide "standard aliases" bundled with GeniusTrader
so that some common indicators can be provided by default without
duplicating needless code.
Take for example your Generic:SumUp and Generic:SumDown. I don't like
them. But I'd be in favor of a "Generic:SumIf <period> {S:ASignal}
{I:Something}"... it would return the sum of I:Something for all
days in the last <period> days where S:ASignal was true.
Then you can provide Generic:SumUp and Generic:SumDown with SumIf using
S:Prices:Advance or S:Prices:Decline as signal ...
> Therefore I would like to ask you if it is possible, to modify the
> Indictors:new-sub in a way that further arguments are pushed on a
> $self->{'func'}-Hash or Array. This would avoid the ugly
> String-concatenation you see in the DSS. :-)
How do you define "further arguments" ?
> My second problem is the use of the "OPEN", "LOW", etc. parameters.
> It's not nice to cut and paste everytime the initalize-function, so
> it would be usefull to handle this an other way. One option would be
> to include a subroutine in GT::Indicators.pm doing this work or (more
> a hack than a solution) to create GT::Indicators::Generic::Open-,
> etc. Objects.
I agree that this is not nice. I'm in favor of completely removing
this code ... we can create a special indicator called "Prices" which
would return the prices.
That way, we don't need anything like that. If we want something else
than the standard input stream, then we can give an indicator (and the
indicator can be the prices ...).
> Maybe you can tell me what you think about this.
Looking at the other Generic indicators :
* Divide/Multiply/Minus/Plus
I really don't see the need for those indicators. I:Generic:Eval does
already everything needed ... once we have the I:Prices suggested
above.
* SumUp/SumDown
I don't want them as is. I'd much prefer the SumIf indicator that I
explained above.
[ And you should change VIDYA.pm to use the new SumIf also at the same
time ]
* MaxSince/MinSince
I'm ok for these. We just need to find a better name since I already
have MaxSince and MinSince but they use other parameters (a fixed date)
as input. Maybe PeriodMax/PeriodMin ?
Cheers,
--
Raphaël Hertzog -+- http://www.ouaza.com
Formation Linux et logiciel libre : http://www.logidee.com
|
|
From: GeniusTrader C. r. <ra...@ge...> - 2003-01-16 23:44:07
|
Update of /bourse/cvsroot/GT/Indicators
In directory arrakis:/scratch/tmp/cvs-serv9665/Indicators
Modified Files:
ADL.pm
Added Files:
TRIX.pm
Log Message:
- New TRIX indicator thanks to Oliver Bossert.
- Little fix in I:ADL
- Updated todo list
--- /bourse/cvsroot/GT/Indicators/ADL.pm 2002/10/06 15:39:26 1.4
+++ /bourse/cvsroot/GT/Indicators/ADL.pm 2003/01/16 22:42:21 1.5
@@ -48,10 +48,12 @@
my $prices = $calc->prices;
if ($calc->indicators->is_available($name, $i - 1)) {
- $adl = $calc->indicators->get($name, $i - 1);
- $ad = ((($prices->at($i)->[$LAST] - $prices->at($i)->[$LOW]) - ($prices->at($i)->[$HIGH] - $prices->at($i)->[$LAST])) / ($prices->at($i)->[$HIGH] - $prices->at($i)->[$LOW])) * $prices->at($i)->[$VOLUME];
- $adl += $ad;
- $calc->indicators->set($name, $i, $adl);
+ $adl = $calc->indicators->get($name, $i - 1);
+ if ($prices->at($i)->[$HIGH] != $prices->at($i)->[$LOW]) {
+ $ad = ((($prices->at($i)->[$LAST] - $prices->at($i)->[$LOW]) - ($prices->at($i)->[$HIGH] - $prices->at($i)->[$LAST])) / ($prices->at($i)->[$HIGH] - $prices->at($i)->[$LOW])) * $prices->at($i)->[$VOLUME];
+ }
+ $adl += $ad;
+ $calc->indicators->set($name, $i, $adl);
} else {
for(my $n = 0; $n <= $i; $n++)
{
|
|
From: GeniusTrader C. r. <ra...@ge...> - 2003-01-16 23:44:05
|
Update of /bourse/cvsroot/GT
In directory arrakis:/scratch/tmp/cvs-serv9665
Modified Files:
TODO
Log Message:
- New TRIX indicator thanks to Oliver Bossert.
- Little fix in I:ADL
- Updated todo list
--- /bourse/cvsroot/GT/TODO 2002/12/28 18:30:23 1.45
+++ /bourse/cvsroot/GT/TODO 2003/01/16 22:42:21 1.46
@@ -3,9 +3,9 @@
- Finish the graphical part. cf Graphics/TODO
- Use everywhere GT::ArgsTree.
- - reproduce the changes made for Indicators to Signals/Systems
+ - reproduce the changes made for Indicators & Signals to Systems
- update all indicators/signals for GT::ArgsTree support
- (add "standards-version: 1.0" header when done to remember
+ (add "Standards-Version: 1.0" header when done to remember
that it has been done)
- Add a system of alias for Indicators/Signals/Systems/etc. and not
@@ -29,7 +29,7 @@
max perf and final performance).
- The equity curve should be a price serie of its own so that it can be
- used in calculations (ax: max draw down, sharpe ratio, ...)
+ used in calculations (ex: max draw down, sharpe ratio, ...)
- Calculate the Sharpe ratio (annual return / annual risk (=standard
deviation)).
@@ -96,4 +96,4 @@
- Redesign the portfolio analysis functions so that we can analyse
the portfolio on a given period and on a given share.
-
+
|
|
From: Raphael H. <ra...@ge...> - 2003-01-16 21:36:04
|
Le Mon, Jan 13, 2003 at 09:34:41PM +0100, Oliver Bossert écrivait: > You can send a project-description to Georg Greve (http://brave-gnu- > world.org/scout.fr.html). I think if he would publish a short summary > of GT this would help us very much. Done. > Maybe it is also possible to write to some related software projects > (e.g. www.gnucash.org) if they could include GT in their linklist. They already have a link to GeniusTrader but it is outdated and not working. I mailed them to inform them of the new URL. > I think you are right, that GT is not "packaged" enough. > At the moment GT is manly a solution for a geek, able to write perl > very well (at least better than I do :-) ), interested in the > fundamentals of trading systems and without a commercial software he > is used to and which works well for him ... well this is a very > special customer profile :-) Exactly ... > IMHO it would help a lot to create a small web-frontend and a Sure, but if the web frontend needs to offer the same flexibility as the script, it's going to get complicated ... > To produce a frontend would have three major effects: First it would > give poeple without knowledge about perl-programming the opportunity > to participate (and to talk to other poeple about GT), second it > would be possible to write articels in magazines or websites (I think > at the moment an article which is useful for the reader would be too > long) and third it would be a good advertisement to place the > frontend on the web, so poeple can try it out without the > installation (and if they use the charts elsewhere, a small > www.geniustrader.org in the corner could give poeple hint where to > look for excellent software). :-) You're right of course, I like this idea of web frontend but I'm not very interested in that right now... other things have higher priority for me. > BTW: Is it possible to combine several buy/sell-signals on different > codes to one portfolio? What exactly do you mean ? It's technically possible with the architecture but not implemented in a script right now. We have to create a MoneyManagement module that is clever enough to allocate the money between the several possible positions. And we need a new backtest script (or an update to the existing one) to be able to use the same portfolio for several backtest that should run in parallel. Cheers, -- Raphaël Hertzog -+- http://www.ouaza.com Formation Linux et logiciel libre : http://www.logidee.com |
|
From: Oliver B. <ol...@ol...> - 2003-01-15 18:20:24
|
Hi Raphael,
today I had a little time to work out the two Indicators VIDYA and
TRIX. I validated them "optically" by comparing the graphical output
with a website. Unfortunately I don't have a sotware to compare the
exact values. The indicators both work very well and they sopport the
ArgsTree-architecture. If you find them useful, you can include them
in the repository.
The third indicator, the DSS (double smoothed stochastic) is also
working well and validated but is mainly to illustrate my question:
I tried to create small, generic indicators which are reusable, so
that their combination to new indicators is very easy. the DSS e.g.
could be completely designed as an alias. The problem hereby is that
some of them need two parameters (e.g. Divide). Therefore I would
like to ask you if it is possible, to modify the Indictors:new-sub in
a way that further arguments are pushed on a $self->{'func'}-Hash or
Array. This would avoid the ugly String-concatenation you see in the
DSS. :-)
My second problem is the use of the "OPEN", "LOW", etc. parameters.
It's not nice to cut and paste everytime the initalize-function, so
it would be usefull to handle this an other way. One option would be
to include a subroutine in GT::Indicators.pm doing this work or (more
a hack than a solution) to create GT::Indicators::Generic::Open-,
etc. Objects.
Maybe you can tell me what you think about this.
CU, Olf
PS: P&F is coming soon... :-)
|
|
From: Oliver B. <ol...@ol...> - 2003-01-13 21:36:50
|
Hi, > If you have ideas to attract more contributors, just let me know. I > should make announces on freshmeat more regularly too... but I have > the feeling that it's not enough "packaged" to be publicized this > much. It's a dilemma. :) You can send a project-description to Georg Greve (http://brave-gnu- world.org/scout.fr.html). I think if he would publish a short summary of GT this would help us very much. Maybe it is also possible to write to some related software projects (e.g. www.gnucash.org) if they could include GT in their linklist. I think you are right, that GT is not "packaged" enough. At the moment GT is manly a solution for a geek, able to write perl very well (at least better than I do :-) ), interested in the fundamentals of trading systems and without a commercial software he is used to and which works well for him ... well this is a very special customer profile :-) IMHO it would help a lot to create a small web-frontend and a documentation (I'm still writing down my "experience" :) ). In times of Windoz and the GUImania think this would "sell" the product much better (It should not be that hard to convert the commandline-tools to cgi-script ... also if I have no experience with cgi-programming). To produce a frontend would have three major effects: First it would give poeple without knowledge about perl-programming the opportunity to participate (and to talk to other poeple about GT), second it would be possible to write articels in magazines or websites (I think at the moment an article which is useful for the reader would be too long) and third it would be a good advertisement to place the frontend on the web, so poeple can try it out without the installation (and if they use the charts elsewhere, a small www.geniustrader.org in the corner could give poeple hint where to look for excellent software). :-) Unfortunately I have a lot of work with my PhD-thesis at the moment, so I won't be able to produce a frontend, but I'll keep this in mind... Now about P&F-Charts... > I don't find it very nice nor convenient. I agree with you in this point. The question is when to do the "work": The P&F-Indicator can be used for tradings strategies and to display the chart. When you draw the chart, you need ony the x/y- position and the column (if it is X/O or a digit for a new month you can find out by looking at the last sign). But when you use the P&F-Indicator for a trading-strategy (as for vertical/horizontal counting) you need the length of the column. > We can imagine specific Generic indicators for that. > LookBackwards <condition> => returns the index of the previous > quotations that matches the condition (where condition could be > {I:PointAndFigures}/1 = {I:PointAndFigures}/1 - 1, assuming that the > first part is expressed for the data searched and the second part is > expressed for the current date) I think this is a good idea. I'll try to create the new P&F-Indicator the way you described it. Then we can use either the "LookBackwards"- Indicator or (if this one is not working) a new PointAndFigure2- Indicator for a trading system. BTW: Is it possible to combine several buy/sell-signals on different codes to one portfolio? CU, Olf |
|
From: Raphael H. <ra...@ge...> - 2003-01-13 18:17:22
|
Hello, I just wanted to let you know that I'm running a little adertising campaign on LWN (both to help LWN and to make GT better known), 2,2% of all text ads are allocated to GeniusTrader. It will last until end January. I hope it will attract more contributors. The text of the ad is very simple (and I find it fun ;-)) : | GeniusTrader | | Want to earn money with free software ? Learn Perl and try GeniusTrader. If you have ideas to attract more contributors, just let me know. I should make announces on freshmeat more regularly too... but I have the feeling that it's not enough "packaged" to be publicized this much. It's a dilemma. :) Cheers, -- Raphaël Hertzog -+- http://www.ouaza.com Formation Linux et logiciel libre : http://www.logidee.com |
|
From: Raphael H. <ra...@ge...> - 2003-01-12 23:35:11
|
Le Sun, Jan 12, 2003 at 04:32:26PM +0100, Oliver Bossert écrivait:
Content-Description: Mail message body
> Maybe :) , but IMO it could be an interesting thing to include p.e.
> put/call-ratios, fundamental data or the buy/sell-recommendations of
> the analysts into a trading system ... but this is stuff for a very
> long, very boring night :-)
We're shifting in the discussion. We were discussing of fields to
include in the title of a graphic. :-) What you're discussing could
be part of what I called "MetaInfo" and which is part of each
Calculator (but its content is not defined and maybe it would need
to be ... but we'll leave that for later when we really need that ;-))
> I designed the indicator like this: the two fields columnstart and
> columnend define the start and end of the column. If the start is
> above the end it is an "O"-Column -- otherwise its "X". The Date is
> included because later an 1..9, A, B, C should be placed instead of
> an O/X if a new month starts. The last field tells the number of the
> column. This format is not nice but it is the most useful I found.
I don't find it very nice nor convenient. What is a P&F graph ? Each
quotations appears in a square or a circle. This square/circle is
positionned on the graph (with x/y like any other graph). So the
indicator should provide those 3 datas :
- X (arbitrary column number)
- Y (row number => prices % box_height)
- type (square/circle)
All the information required is then available. One could use the latest
top by finding the last data which has a column number = actual column
- 1.
We can imagine specific Generic indicators for that.
LookBackwards <condition> => returns the index of the previous
quotations that matches the condition (where condition could be
{I:PointAndFigures}/1 = {I:PointAndFigures}/1 - 1, assuming that the
first part is expressed for the data searched and the second part is
expressed for the current date)
Then doing a graphic is easy. You have a start date and end date, you
can know the number of columns required quite easily. If you want to
fill a specific width, you just have to scan backwards the indicator
until you have the required number of columns ... calculating the height
is also easy.
And drawing the chart it not very complicated either.
What do you think about this representation ?
> My largest problem is how to integrate the PF-Indicator in the PF-
> Chart module. Can I handle the Calculator-object to the design()-sub?
> At the moment the code of the indicator is pasted into the graphical
> object. This is not nice :-(
You should use a datasource which doesn't return prices but the
new P&F indicator ... you don't need the prices. You have to decide that
the use will provide a datasource of kind "GenericIndicatorResults"
which has been created with the P&F indicator in parameter.
> But IMHO it is worth thinking twice about this problem, because when
> the p&f-chart is implemented the TLB, Kagi and Renko can be
> implemented very simple -- and in contrast to the P&F these are IMO
> very usefull.
Agreed.
Cheers,
--
Raphaël Hertzog -+- http://www.ouaza.com
Formation Linux et logiciel libre : http://www.logidee.com
|
|
From: Oliver B. <ol...@ol...> - 2003-01-12 16:32:10
|
Hi Raphael,
> > Chart is not nice :) ... so what do you think about a general
> > Interface to include additional data as the Name, fundamental data
> > or whatever. It could be included as a tag like
> > {DB:Databasename:Field}... :-?
> Maybe it's overkill ...
Maybe :) , but IMO it could be an interesting thing to include p.e.
put/call-ratios, fundamental data or the buy/sell-recommendations of
the analysts into a trading system ... but this is stuff for a very
long, very boring night :-)
> I think so. But the DataSource object should be as little as possible
> delegating the maximum to other standard objects (like an indicator).
> I'm not very used to P&F, but I think it can be stored in an indicator
> as 2 or 3 values : - column number - X or O (up or down) - row number?
I appended three files at this message: an p&f-indicator, an graphical
bject and a small picture showng the output of the graphic. I have
everal questions concerning the design and maybe these files help to
iscuss the topic -- also if they are neither nice nor very usefull at
the moment:
I designed the indicator like this: the two fields columnstart and
columnend define the start and end of the column. If the start is
above the end it is an "O"-Column -- otherwise its "X". The Date is
included because later an 1..9, A, B, C should be placed instead of
an O/X if a new month starts. The last field tells the number of the
column. This format is not nice but it is the most useful I found.
My largest problem is how to integrate the PF-Indicator in the PF-
Chart module. Can I handle the Calculator-object to the design()-sub?
At the moment the code of the indicator is pasted into the graphical
object. This is not nice :-(
> There's still many open questions to integrate this nicely in the
> framework. How to combine other objects (signals & cie) on a P&F chart
> ? etc.
But IMHO it is worth thinking twice about this problem, because when
the p&f-chart is implemented the TLB, Kagi and Renko can be
implemented very simple -- and in contrast to the P&F these are IMO
very usefull.
CU, Olf
|
|
From: Raphael H. <rhe...@hr...> - 2003-01-11 21:19:50
|
Le Sat, Jan 11, 2003 at 07:47:28PM +0100, ol...@ol... écrivait:
> Hi Raphael,
Hi,
> thank you very much for your corrections in the TRIX-Indicator - it is
> much simpler this way.
I did nothing for the TRIX indicator, I just patched your VIDYA.pm ...
> I tried to get the VIDYA working, but when I define
> the first EMA as follows:
>
> $self->{'ema1'} = GT::Indicators::EMA->new( [
> $self->{'args'}->get_arg_names() ] );
This does mean that TRIX.pm uses GT::ArgsTree. AFAIK, the last version
of TRIX.pm that I saw did not.
> it works fine and accepts the Indicator as the 'period'-parameter. But it
> would be usefull if it would also work with other data than the closing
> price.
>
> Indicators::TRIX2 {I:Generic::Eval int(5)} LOW
>
> I expected that the creation-call above would forward the
> "LOW"-Argument to the EMA-new-function - but it seems that I'm
> wrong. ...what do I have to change?
I'd expect it to work too. Double check that you're using GT::ArgsTree
(ie that you don't have a new function in your TRIX.pm).
Also you may find it useful to use Carp::Datum to see what's going on.
Try this :
$ GTDEBUG=1 ./display_indicator.pl I:TRIX 13000 10 LOW 2>&1 | less
> Chart is not nice :) ... so what do you think about a general
> Interface to include additional data as the Name, fundamental data or
> whatever. It could be included as a tag like
> {DB:Databasename:Field}... :-?
Maybe it's overkill ...
> But IMO this is not so important (and for me my 'hack' works well). :)
It's not very important, you're right. Still I added it to my TODO list
in order to not forget it.
> Does it make sense according to your design, to build first a
> "P&F-Datasource" to use this later for the different tasks?
I think so. But the DataSource object should be as little as possible
delegating the maximum to other standard objects (like an indicator).
I'm not very used to P&F, but I think it can be stored in an indicator
as 2 or 3 values :
- column number
- X or O (up or down)
- row number?
There's still many open questions to integrate this nicely in the
framework. How to combine other objects (signals & cie) on a P&F
chart ? etc.
> Short remark: In the ADL.pm-indicator occurs a div0 in Line 52:
Thanks, applied here. It will be in the next commit.
Cheers,
--
Raphaël Hertzog -+- http://www.ouaza.com
Formation Linux et logiciel libre : http://www.logidee.com
|
|
From: <ol...@ol...> - 2003-01-11 19:51:07
|
Hi Raphael,
thank you very much for your corrections in the TRIX-Indicator - it is
much simpler this way. I tried to get the VIDYA working, but when I define
the first EMA as follows:
$self->{'ema1'} = GT::Indicators::EMA->new( [
$self->{'args'}->get_arg_names() ] );
I can check the dependencies using either static or volatile
dependencies -- without any effect on the result. When I call the
indicator as
Indicators::TRIX {I:Generic::Eval int(10)}
it works fine and accepts the Indicator as the 'period'-parameter. But it
would be usefull if it would also work with other data than the closing
price.
Indicators::TRIX2 {I:Generic::Eval int(5)} LOW
I expected that the creation-call above would forward the
"LOW"-Argument to the EMA-new-function - but it seems that I'm
wrong. ...what do I have to change?
I agree with you that the 'hack' to include the Company-Name in a
Chart is not nice :) ... so what do you think about a general
Interface to include additional data as the Name, fundamental data or
whatever. It could be included as a tag like
{DB:Databasename:Field}... :-?
But IMO this is not so important (and for me my 'hack' works well). :)
I played around a bit with the charting module and tried to implement a
P&F-Chart. It works but it is not nice and so I would like to ask you what
you think would be a good design for such a chart (it's nearly the same
problem for TLB, Kagi, etc.):
The problem I noticed was that the width of the image is calculated as
$nb_item * GT::Conf::get("Graphic::Candle::Width") by graphics.pl, then
the axis is created and then the graphic is inserted. To calculate the
width of a P&F-Chart you have to calculate the hole chart. Then you have
to build it eventually a second time to determine the time-axis and a
third time to draw it.
An other aspect is this: There are some trading strategies based upon
P&F-Charts; so it would be cool to get the P&F-data from within a Signal
(without drawing the chart).
Therefore my questions:
Does it make sense according to your design, to build first a
"P&F-Datasource" to use this later for the different tasks?
And if you agree with this, what kind of object should this
"Datasource" be? It could be a subroutine in the PF-Module, an
indicator...
CU, Olf
---
Short remark: In the ADL.pm-indicator occurs a div0 in Line 52:
../GT/Indicators/ADL.pm
--- GT/Indicators/ADL.pm Sun Oct 6 17:39:26 2002
+++ ../GT/Indicators/ADL.pm Sat Jan 11 11:33:26 2003
@@ -49,7 +49,10 @@
if ($calc->indicators->is_available($name, $i - 1)) {
$adl = $calc->indicators->get($name, $i - 1);
- $ad = ((($prices->at($i)->[$LAST] - $prices->at($i)->[$LOW]) -
($prices->at($i)->[$HIGH] - $prices->at($i)->[$LAST])) /
($prices->at($i)->[$HIGH] - $prices->at($i)->[$LOW])) *
$prices->at($i)->[$VOLUME];
+ $ad = ((($prices->at($i)->[$LAST] - $prices->at($i)->[$LOW])
+ - ($prices->at($i)->[$HIGH] - $prices->at($i)->[$LAST]))
+ / ($prices->at($i)->[$HIGH] - $prices->at($i)->[$LOW])) *
$prices->at($i)->[$VOLUME]
+ unless ( (($prices->at($i)->[$HIGH] -
$prices->at($i)->[$LOW])) * $prices->at($i)->[$VOLUME] == 0);
$adl += $ad;
$calc->indicators->set($name, $i, $adl);
} else {
|
|
From: GeniusTrader C. r. <ra...@ge...> - 2003-01-08 23:52:31
|
Update of /bourse/cvsroot/Scripts
In directory p200:/scratch/tmp/cvs-serv32521
Modified Files:
backtest_many.pl
Log Message:
- Some fixes to make it work again.
- Can start several process in parallel (useful for mahcines with several
CPUs). I still have to add a locking mechanism so that they don't update
the spool of backtests at the same time.
--- /bourse/cvsroot/Scripts/backtest_many.pl 2002/10/14 15:41:21 1.20
+++ /bourse/cvsroot/Scripts/backtest_many.pl 2003/01/08 22:46:04 1.21
@@ -58,6 +58,10 @@
Runs the backtest using the given timeframe.
+=item --nbprocess=2
+
+If you want to start two (or more) backtests in parallel (useful for machines with several CPUs for example).
+
=back
=head2 Examples
@@ -76,13 +80,14 @@
=cut
# Manage options
-my ($full, $verbose, $broker, $timeframe, $start, $end, $outputdir, $set) =
- (0, 0, '', '', '', '', '.', '');
+my ($full, $verbose, $broker, $timeframe, $start, $end, $outputdir, $set, $nbprocess) =
+ (0, 0, '', '', '', '', '.', '', 1);
$outputdir = GT::Conf::get("BackTest::Directory") || '';
GetOptions('full!' => \$full, 'verbose' => \$verbose,
'timeframe=s' => \$timeframe, "start=s" => \$start,
"end=s" => \$end, 'output-directory=s' => \$outputdir,
- 'broker=s' => \$broker, 'set=s' => \$set);
+ 'broker=s' => \$broker, 'set=s' => \$set,
+ 'nbprocess=s' => \$nbprocess);
# Checks
if (! -d $outputdir)
@@ -91,7 +96,6 @@
}
# Create all the framework
-my $db = create_standard_object("DB::" . GT::Conf::get("DB::module"));
my $list = GT::List->new;
my $file = shift;
if (! -e $file)
@@ -136,15 +140,20 @@
# Actually launch the backtests
my $analysis;
+my $count_process = 0;
for (my $d = 0; $d < $list->count; $d++)
{
if (fork())
{
+ $count_process++;
+ next if ($count_process < $nbprocess);
wait;
+ $count_process--;
next;
}
my $code = $list->get($d);
+ my $db = create_standard_object("DB::" . GT::Conf::get("DB::module"));
my $q = $db->get_prices($code);
my $calc = GT::Calculator->new($q);
$calc->set_code($code);
@@ -204,10 +213,14 @@
$bkt_spool->sync();
}
-
+ $db->disconnect;
# Close the child
exit 0;
}
-$db->disconnect;
+# Wait last processes
+while ($count_process > 0) {
+ wait;
+ $count_process--;
+}
|