X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-live.git;a=blobdiff_plain;f=yarrg%2Fweb%2Froutetrade;h=074069d2b71b38a64d68897e9d5868f0b156dced;hp=12b4a895f28f29e3847ab4ccbbd2c87a47b81668;hb=8a992f2ab1dde9f2f5a26f14f1477f8300e26917;hpb=6f2f4d2443ccb3ce9fb30820c27c3cd0cb67fa07 diff --git a/yarrg/web/routetrade b/yarrg/web/routetrade index 12b4a89..074069d 100644 --- a/yarrg/web/routetrade +++ b/yarrg/web/routetrade @@ -32,19 +32,6 @@ This Mason component is the core trade planner for a specific route. -========== TODO ========== -16:36 alpha,byrne,papaya,turtle,jorvik,luthien is my example - -use POST for update. Hrrm. - -LATER OR NOT AT ALL - -adjustable potential cost of losses (rather than fixed 1e-BIG per league) - -max volume/mass - -========== TODO ========== - <%args> $dbh @@ -252,6 +239,12 @@ $addcols->({ DoReverse => 1 }, % } <%perl> + +if (!@flows) { + print 'No profitable trading opportunities were found.'; + return; +} + foreach my $f (@flows) { $f->{MaxQty}= $f->{'org_qty_agg'} < $f->{'dst_qty_agg'} @@ -423,7 +416,9 @@ if ($qa->{'debug'}) { qw(glpsol --cpxlp /dev/stdin -o /dev/stdout)); print "
\n" if $qa->{'debug'};
 	my $found_section= 0;
+	my $glpsol_out= '';
 	while (<$output>) {
+		$glpsol_out.= $_;
 		print encode_entities($_) if $qa->{'debug'};
 		if (m/^\s*No\.\s+Column name\s+St\s+Activity\s/) {
 			die if $found_section>0;
@@ -444,8 +439,9 @@ if ($qa->{'debug'}) {
 		$flow->{OptCapital}= $flow->{OptQty} * $flow->{'org_price'};
 	}
 	print "
\n" if $qa->{'debug'}; - pipethrough_run_finish($output, 'glpsol'); - die unless $found_section; + my $prerr= "\n=====\n$cplex\n=====\n$glpsol_out\n=====\n "; + pipethrough_run_finish($output,$prerr); + die $prerr unless $found_section; }; $addcols->({ DoReverse => 1 }, qw( @@ -561,6 +557,7 @@ $addcols->({ Total => 0, DoReverse => 1 }, qw( % my $iquery= $dbh->prepare('SELECT islandname FROM islands % WHERE islandid = ?'); % my %da_ages; +% my $total_total= 0; %

Voyage trading plan

@@ -575,42 +572,45 @@ Start at <% $islandname |h %> Sail to <% $islandname |h %> % } -% my $age_reported= 0; -% my %flowlists; -% foreach my $od (qw(org dst)) { -% foreach my $f (@flows) { -% next if $f->{Suppress}; -% next unless $f->{"${od}_id"} == $islandids[$i]; -% next unless $f->{OptQty}; -% my $price= $f->{"${od}_price"}; -% my $stallname= $f->{"${od}_stallname"}; -% my $todo= \$flowlists{$od}{ -% $f->{'commodname'}, -% (sprintf "%07d", $price), -% $stallname -% }; -% $$todo= { -% Qty => 0, -% orgArbitrage => 0, -% dstArbitrage => 0, -% } unless $$todo; -% $$todo->{'commodname'}= $f->{'commodname'}; -% $$todo->{'stallname'}= $stallname; -% $$todo->{Price}= $price; -% $$todo->{Timestamp}= $f->{"${od}_timestamp"}; -% $$todo->{Qty} += $f->{OptQty}; -% $$todo->{Total}= $$todo->{Price} * $$todo->{Qty}; -% $$todo->{Stalls}= $f->{"${od}Stalls"}; -% if ($f->{'org_id'} == $f->{'dst_id'}) { -% $$todo->{"${od}Arbitrage"}= 1; -% } -% } -% } -% -% my $total; -% my $dline= 0; -% my $show_flows= sub { -% my ($od,$arbitrage,$collectdeliver) = @_; +<%perl> + my $age_reported= 0; + my %flowlists; + foreach my $od (qw(org dst)) { + foreach my $f (@flows) { + next if $f->{Suppress}; + next unless $f->{"${od}_id"} == $islandids[$i]; + next unless $f->{OptQty}; + my $price= $f->{"${od}_price"}; + my $stallname= $f->{"${od}_stallname"}; + my $todo= \$flowlists{$od}{ + $f->{'commodname'}, + (sprintf "%07d", ($od eq 'dst' ? + 9999999-$price : $price)), + $stallname + }; + $$todo= { + Qty => 0, + orgArbitrage => 0, + dstArbitrage => 0, + } unless $$todo; + $$todo->{'commodname'}= $f->{'commodname'}; + $$todo->{'stallname'}= $stallname; + $$todo->{Price}= $price; + $$todo->{Timestamp}= $f->{"${od}_timestamp"}; + $$todo->{Qty} += $f->{OptQty}; + $$todo->{Total}= $$todo->{Price} * $$todo->{Qty}; + $$todo->{Stalls}= $f->{"${od}Stalls"}; + if ($f->{'org_id'} == $f->{'dst_id'}) { + $$todo->{"${od}Arbitrage"}= 1; + } + } + } + + my $total; + my $dline= 0; + my $show_flows= sub { + my ($od,$arbitrage,$collectdeliver) = @_; + % % my $todo= $flowlists{$od}; % return unless $todo; @@ -654,23 +654,32 @@ Sail to <% $islandname |h %> % } % }; % my $show_total= sub { -% my ($totaldesc)= @_; +% my ($totaldesc, $sign)= @_; % if (defined $total) { +
<% $totaldesc %> <% $total |h %> total +% $total_total += $sign * $total; % } % $total= undef; % $dline= 0; -% }; -% -% $show_flows->('org',1,'Collect'); $show_total->('(Arbitrage) outlay'); -% $show_flows->('dst',1,'Deliver'); -% $show_flows->('dst',0,'Deliver'); $show_total->('Proceeds'); -% $show_flows->('org',0,'Collect'); $show_total->('Outlay'); -% -% } +<%perl> + }; + + $show_flows->('dst',0,'Deliver'); $show_total->('Proceeds',1); + $show_flows->('org',1,'Collect'); $show_total->('(Arbitrage) outlay',-1); + $show_flows->('dst',1,'Deliver'); $show_total->('(Arbitrage) proceeds',1); + $show_flows->('org',0,'Collect'); $show_total->('Outlay',-1); + +} + +
+Overall net cash flow +<% + $total_total < 0 ? -$total_total." loss" : $total_total." gain" + %>
<& query_age:dataages, id2age => \%da_ages &> %