[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GT] SVN Commit r595 - trunk/Scripts
Author: thomas
Date: 2008-03-30 06:09:02 +0200 (Sun, 30 Mar 2008)
New Revision: 595
Modified:
trunk/Scripts/backtest.pl
trunk/Scripts/backtest_many.pl
trunk/Scripts/display_indicator.pl
trunk/Scripts/display_signal.pl
trunk/Scripts/graphic.pl
trunk/Scripts/scan.pl
Log:
Use find_calculator to set up framework. Leave inconsistencies in data handling between scripts in place.
Modified: trunk/Scripts/backtest.pl
===================================================================
--- trunk/Scripts/backtest.pl 2008-03-30 04:07:51 UTC (rev 594)
+++ trunk/Scripts/backtest.pl 2008-03-30 04:09:02 UTC (rev 595)
@@ -19,7 +19,7 @@
use Getopt::Long;
use GT::Conf;
use GT::DateTime;
-use GT::Tools qw(:conf);
+use GT::Tools qw(:conf :timeframe);
use GT::Graphics::DataSource::PortfolioEvaluation;
use GT::Graphics::Driver;
use GT::Graphics::Object;
@@ -120,7 +120,7 @@
=item
-./backtest.pl --close-strategy="Systems::TFS" --close-strategy="Stop::Fixed 6" --money-management="VAR" --money-management="SizeLimit" --system="TFS" --broker="SelfTrade Int�al" 13000
+./backtest.pl --close-strategy="Systems::TFS" --close-strategy="Stop::Fixed 6" --money-management="VAR" --money-management="OrderSizeLimit" --system="TFS" --broker="SelfTrade Int�al" 13000
=back
@@ -128,7 +128,7 @@
# Manage options
my ($full, $verbose, $html, $display_trades, $template, $graph_file, $ofname, $broker, $system, $timeframe, $start, $end, $store_file) =
- (0, 0, 0, 0, '', '', '', '', '', '', '', '', '');
+ (0, 0, 0, 0, '', '', '', '', '', 'day', '', '', '');
my (@mmname, @tfname, @csname);
GetOptions('full!' => \$full, 'verbose!' => \$verbose, 'html!' => \$html,
'template=s' => \$template, 'display-trades!' => \$display_trades,
@@ -201,36 +201,11 @@
if (! $code) {
die "You must give a symbol for the simulation.\n";
}
-my $q = $db->get_prices($code);
-#$db->disconnect;
-my $calc = GT::Calculator->new($q);
-$calc->set_code($code);
+$timeframe = GT::DateTime::name_to_timeframe($timeframe);
-if ($timeframe)
-{
- if (! $calc->set_current_timeframe(
- GT::DateTime::name_to_timeframe($timeframe)))
- {
- die "Can't create � $timeframe � timeframe ...\n";
- }
-}
+my ($calc, $first, $last) = find_calculator($code, $timeframe, $full, $start, $end);
-my $c = $calc->prices->count;
-my $last = $c - 1;
-my $first = $c - 2 * GT::DateTime::timeframe_ratio($YEAR,
- $calc->current_timeframe);
-$first = 0 if ($full);
-$first = 0 if ($first < 0);
-if ($start) {
- my $date = $calc->prices->find_nearest_following_date($start);
- $first = $calc->prices->date($date);
-}
-if ($end) {
- my $date = $calc->prices->find_nearest_preceding_date($end);
- $last = $calc->prices->date($date);
-}
-
# The real work happens here
my $analysis = backtest_single($pf_manager, $sys_manager, $broker, $calc, $first, $last);
@@ -265,7 +240,7 @@
my $axis_h = GT::Graphics::Axis->new($scale);
my $axis_v = GT::Graphics::Axis->new($scale);
$axis_h->set_custom_big_ticks(build_axis_for_interval(union_range($graph_ds->get_value_range, $graph_ds2->get_value_range), 0, 1));
- $axis_v->set_custom_big_ticks(build_axis_for_timeframe($q, $YEAR, 1, 1), 1);
+ $axis_v->set_custom_big_ticks(build_axis_for_timeframe($calc->prices(), $YEAR, 1, 1), 1);
$zone->set_axis_left($axis_h);
$zone->set_axis_bottom($axis_v);
my $graphic = GT::Graphics::Graphic->new($zone);
Modified: trunk/Scripts/backtest_many.pl
===================================================================
--- trunk/Scripts/backtest_many.pl 2008-03-30 04:07:51 UTC (rev 594)
+++ trunk/Scripts/backtest_many.pl 2008-03-30 04:09:02 UTC (rev 595)
@@ -152,33 +152,8 @@
next;
}
my $code = $list->get($d);
+ my ($calc, $first, $last) = find_calculator($code, $timeframe, $full, $start, $end);
- 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);
-
- if ($timeframe)
- {
- $calc->set_current_timeframe(
- GT::DateTime::name_to_timeframe($timeframe));
- }
-
- my $c = $calc->prices->count;
- my $last = $c - 1;
- my $first = $c - 2 * GT::DateTime::timeframe_ratio($YEAR,
- $calc->current_timeframe);
- $first = 0 if ($full);
- $first = 0 if ($first < 0);
- if ($start) {
- my $date = $calc->prices->find_nearest_following_date($start);
- $first = $calc->prices->date($date);
- }
- if ($end) {
- my $date = $calc->prices->find_nearest_preceding_date($end);
- $last = $calc->prices->date($date);
- }
-
# Fork a process to avoid memory consumption
foreach (@desc_systems)
{
@@ -211,7 +186,6 @@
$bkt_spool->sync();
}
- $db->disconnect;
# Close the child
exit 0;
}
Modified: trunk/Scripts/display_indicator.pl
===================================================================
--- trunk/Scripts/display_indicator.pl 2008-03-30 04:07:51 UTC (rev 594)
+++ trunk/Scripts/display_indicator.pl 2008-03-30 04:09:02 UTC (rev 595)
@@ -75,27 +75,11 @@
@ARGV);
# Il faut cr� tout le framework
-my $db = create_standard_object("DB::" . GT::Conf::get("DB::module"));
my $indicator_name = $indicator->get_name;
-my ($q, $calc) = get_timeframe_data($code, $timeframe, $db, $nb_item);
+my ($calc, $first, $last) = find_calculator($code, $timeframe, $full, $start, $end, 200, $nb_item);
+# NOTE: above does not handle $last_record
+# $first = $last if ($last_record);
-my $last = $q->count() - 1;
-my $first = $last - 200;
-
-$first = 0 if ($full);
-$first = $last if ($last_record);
-$first = 0 if ($first < 0);
-
-if ($start) {
- my $date = $calc->prices->find_nearest_following_date($start);
- $first = $calc->prices->date($date);
-}
-if ($end) {
- my $date = $calc->prices->find_nearest_preceding_date($end);
- $last = $calc->prices->date($date);
-}
-
-
# Au boulot
print "Calculating indicator $indicator_name ...\n";
$indicator->calculate_interval($calc, $first, $last);
@@ -109,14 +93,12 @@
if ($calc->indicators->is_available($name, $i)) {
my $value = $calc->indicators->get($name, $i);
if ($value =~ /^\d+(?:\.\d+)?$/) {
- printf "%-20s[%s] = %.4f\n", $name, $q->at($i)->[$DATE], $value;
+ printf "%-20s[%s] = %.4f\n", $name, $calc->prices->at($i)->[$DATE], $value;
} else {
- printf "%-20s[%s] = %s\n", $name, $q->at($i)->[$DATE], $value;
+ printf "%-20s[%s] = %s\n", $name, $calc->prices->at($i)->[$DATE], $value;
}
}
}
}
-$db->disconnect;
-
Modified: trunk/Scripts/display_signal.pl
===================================================================
--- trunk/Scripts/display_signal.pl 2008-03-30 04:07:51 UTC (rev 594)
+++ trunk/Scripts/display_signal.pl 2008-03-30 04:09:02 UTC (rev 595)
@@ -101,13 +101,6 @@
"change!" => \$change,
);
my $timeframe = GT::DateTime::name_to_timeframe($tf);
-if (!defined($timeframe)) {
- my $msg = "Unkown timeframe: $tf\nAvailable timeframes are:\n";
- foreach (GT::DateTime::list_of_timeframe()) {
- $msg .= '\t'.GT::DateTime::name_of_timeframe($_) . '\n';
- }
- die($msg);
-}
# Create the signal according to the arguments
my $signal_module = shift || pod2usage(verbose => 1);
@@ -121,39 +114,9 @@
}
my $signal = create_standard_object($signal_module, @ARGV);
-
-# Create the complete framework
-my $db = create_standard_object('DB::' . GT::Conf::get('DB::module'));
my $signal_name = $signal->get_name;
-my ($q, $calc) = get_timeframe_data($code, $timeframe, $db);
-my $last = $q->count() - 1;
-my $first = $last - 200;
+my ($calc, $first, $last) = find_calculator($code, $timeframe, $full, $start, $end, 200);
-$first = 0 if ($full);
-$first = 0 if ($first < 0);
-
-# very rudimentary date format check
-my $dash_count;
-
-if ($start) {
- $_ = $start;
- print STDERR "\nthe only date format that i like is YYYY-MM-DD,\n"
- . "i don't think --start=$start is going to do what you expect\n"
- if ( ( $dash_count = $_ =~ tr/-//d ) != 2 );
- my $date = $calc->prices->find_nearest_following_date($start);
- $first = $calc->prices->date($date);
-}
-if ($end) {
- $_ = $end;
- print STDERR "\nthe only date format that i like is YYYY-MM-DD,\n"
- . "i don't think --end=$end is going to do what you expect\n"
- if ( ( $dash_count = $_ =~ tr/-//d ) != 2 );
- my $date = $calc->prices->find_nearest_preceding_date($end);
- $last = $calc->prices->date($date);
-}
-
-#print STDERR "first $first, last $last\n";
-#exit;
print "\t$signal_module\n";
# Launching the signal
print "Testing signal $signal_name ...\n";
@@ -168,18 +131,18 @@
if ($calc->signals->is_available($name, $i)) {
if ( ! $change ) {
- printf "%-20s[%s] = %s\n", $name, $q->at($i)->[$DATE],
+ printf "%-20s[%s] = %s\n", $name, $calc->prices->at($i)->[$DATE],
($calc->signals->get($name, $i) ? 'yes' : 'no');
}else{
# show only changes from prior
my $state = $calc->signals->get($name, $i);
if ( ! defined ( $prior_state ) ) {
- printf "%-20s[%s] = %s\n", $name, $q->at($i)->[$DATE],
+ printf "%-20s[%s] = %s\n", $name, $calc->prices->at($i)->[$DATE],
($state ? 'yes' : 'no');
} else {
if ( $prior_state != $state ) {
- printf "%-20s[%s] = %s\n", $name, $q->at($i)->[$DATE],
+ printf "%-20s[%s] = %s\n", $name, $calc->prices->at($i)->[$DATE],
($state ? 'yes' : 'no');
}
}
@@ -189,4 +152,3 @@
}
}
-$db->disconnect;
Modified: trunk/Scripts/graphic.pl
===================================================================
--- trunk/Scripts/graphic.pl 2008-03-30 04:07:51 UTC (rev 594)
+++ trunk/Scripts/graphic.pl 2008-03-30 04:09:02 UTC (rev 595)
@@ -204,6 +204,11 @@
The end date used to plot the graphic. This option overrides the --nb-item option.
+=item --full
+
+Plot all available periods. This option overides the options --nb-item,
+--start, and --end.
+
=item --type=candle|candlevol|candlevolplace|barchart|line|none
The type of graphic to plot. none causes the price not to be displayed, however, overlays
@@ -227,7 +232,7 @@
=cut
my $tf = 'day';
-my $nb_item = 120;
+my $nb_item;
my ($start, $end) = ("", "");
my ($width, $height) = ("", "200");
my $type = "candle";
@@ -275,35 +280,8 @@
pod2usage( -verbose => 2) if ($man);
my $code = shift || pod2usage(1);
-my $db = create_standard_object("DB::" . GT::Conf::get("DB::module"));
my $timeframe = GT::DateTime::name_to_timeframe($tf);
-if (!defined($timeframe)) {
- my $msg = "Unkown timeframe: $tf\nAvailable timeframes are:\n";
- foreach (GT::DateTime::list_of_timeframe()) {
- $msg .= "\t".GT::DateTime::name_of_timeframe($_) . "\n";
- }
- die($msg);
-}
-
-my ($q, $calc) = get_timeframe_data($code, $timeframe, $db, $max_loaded_items);
-
-my ($first, $last) = ($q->count() - $nb_item, $q->count() - 1);
-$first = 0 if ($first < 0);
-
-if ($start) {
- $first = $q->date($q->find_nearest_following_date($start));
- $first = 0 if (! defined($first));
- $last = $first + $nb_item - 1;
- $last = $q->count() - 1 if ($last >= $q->count());
-}
-if ($end) {
- $last = $q->date($q->find_nearest_preceding_date($end));
- $last = $q->count() - 1 if (! defined($last));
- if (!$start) {
- $first = $last - $nb_item + 1;
- $first = 0 if $first < 0;
- }
-}
+my ($calc, $first, $last) = find_calculator($code, $timeframe, 0, $start, $end, $nb_item, $max_loaded_items);
$nb_item = $last - $first + 1;
GT::Conf::default("Graphics::Driver", "GD");
@@ -327,8 +305,8 @@
$zone->add_subzone(0, $y_zone++, $z_m);
my $graphic = GT::Graphics::Graphic->new($zone);
+my $q = $calc->prices();
-
if ($volume and ($type ne "none")) {
my $z_v = GT::Graphics::Zone->new($width, $vheight);
$zone->add_subzone(0, $y_zone++, $z_v);
@@ -357,12 +335,12 @@
$zone->set_border_width(1);
if ($title) {
- my $longname = $db->get_name($code);
+ my $longname = get_long_name($code);
$title =~ s/%c/$code/;
$title =~ s/%n/$longname/;
$zone->set_title_top($title);
} else {
- my $longname = $db->get_name($code);
+ my $longname = get_long_name($code);
if ($longname) {
$zone->set_title_top("$longname - $code");
} else {
@@ -406,13 +384,13 @@
my $space = $scale_m->convert_to_x_coordinate(
int(GT::DateTime::timeframe_ratio($MONTH, $timeframe))
) - $scale_m->convert_to_x_coordinate(0);
- if ($space <= 5) {
+ if ($space <= 10) {
$axis2->set_custom_big_ticks(
- build_axis_for_timeframe($q, $YEAR, 1, 1), 1
+ build_axis_for_timeframe($q, $YEAR, 1, 1, $space * 12), 1
);
} else {
$axis2->set_custom_big_ticks(
- build_axis_for_timeframe($q, $MONTH, 1, 1), 1
+ build_axis_for_timeframe($q, $MONTH, 1, 1, $space), 1
);
$axis2->set_custom_ticks(build_axis_for_timeframe($q, $WEEK, 0), 1);
}
@@ -422,11 +400,11 @@
) - $scale_m->convert_to_x_coordinate(0);
if ($space <= 5) {
$axis2->set_custom_big_ticks(
- build_axis_for_timeframe($q, $YEAR, 1, 1), 1
+ build_axis_for_timeframe($q, $YEAR, 1, 1, $space * 20), 1
);
} else {
$axis2->set_custom_big_ticks(
- build_axis_for_timeframe($q, $MONTH, 1, 1), 1
+ build_axis_for_timeframe($q, $MONTH, 1, 1, $space), 1
);
}
#$axis2->set_custom_ticks(build_axis_for_timeframe($q, $WEEK, 0), 1);
@@ -721,8 +699,6 @@
$graphic->display($driver, $picture);
$driver->dump($picture);
-$db->disconnect;
-
# This functions get in input a string like "Object(arg1,arg2,Arg3)"
# where each arg may itself be an Object with its own argument. It
# returns the object name followed by all the arguments.
Modified: trunk/Scripts/scan.pl
===================================================================
--- trunk/Scripts/scan.pl 2008-03-30 04:07:51 UTC (rev 594)
+++ trunk/Scripts/scan.pl 2008-03-30 04:09:02 UTC (rev 595)
@@ -412,34 +412,8 @@
}
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);
+ my ($calc, $first, $last) = find_calculator($code, $timeframe, 0, $start, $end);
- if ($timeframe)
- {
- $calc->set_current_timeframe(
- GT::DateTime::name_to_timeframe($timeframe));
- }
-
- my $c = $calc->prices->count;
- my $last = $c - 1;
- my $first = $c - 2 * GT::DateTime::timeframe_ratio($YEAR,
- $calc->current_timeframe);
- $first = 0 if ($full);
- $first = 0 if ($first < 0);
-
- if ($start) {
- my $ndate = $calc->prices->find_nearest_following_date($start);
- $first = $calc->prices->date($ndate);
- }
-
- if ($end) {
- my $ndate = $calc->prices->find_nearest_preceding_date($end);
- $last = $calc->prices->date($ndate);
- }
-
my $i;
if ($calc->prices->has_date($date)) {
$i = $calc->prices->date($date);
@@ -477,8 +451,7 @@
}
- $db->disconnect;
- # Close the child
+ # Close the child
exit 0;
}