autoquote02.pl to HTML.

index -|- end

Generated: Tue Feb 2 17:54:22 2010 from autoquote02.pl 2006/06/17 6.9 KB.

#!/Perl
# from : http://www.foo.be/docs/tpj/issues/vol3_2/tpj0302-0008.html
# http://www.cbot.com/mplex/quotes/tsfut/tsf$Contract.htm
###print "Hello, World...\n";
my $Contract = "12345678";
#use LWP::Simple;
#my $URL = 'http://www.cbot.com/mplex/quotes/tsfut';
#my $text = get("$URL/tsf$Contract.htm");
#
#use Win32::Internet;
#my $URL = 'http://www.cbot.com/mplex/quotes/tsfut';
#my $text = $Win32::Internet->new->FetchURL("$URL/tsf$Contract.htm");
### some pages
# Corn Futures TIme & Sales (C)
# Time and Sales
# Open auction
# 6Jul http://www.cbot.com/cbot/pub/page/0,3181,1196+2006N,00.html
# 6Sep http://www.cbot.com/cbot/pub/page/0,3181,1196+2006U,00.html
# 6Dec http://www.cbot.com/cbot/pub/page/0,3181,1196+2006Z,00.html
# 7Mar http://www.cbot.com/cbot/pub/page/0,3181,1196+2007H,00.html
# 7May http://www.cbot.com/cbot/pub/page/0,3181,1196+2007K,00.html
# 7Jul http://www.cbot.com/cbot/pub/page/0,3181,1196+2007N,00.html
# 7Sep http://www.cbot.com/cbot/pub/page/0,3181,1196+2007U,00.html
# 7Dec http://www.cbot.com/cbot/pub/page/0,3181,1196+2007Z,00.html
# 8Mar http://www.cbot.com/cbot/pub/page/0,3181,1196+2008H,00.html
# 8Dec http://www.cbot.com/cbot/pub/page/0,3181,1196+2008Z,00.html
# Electronic
# 6Jul http://www.cbot.com/cbot/pub/page/0,3181,1308,00.html
# Oats Futures Time & Sales (O) 
# http://www.cbot.com/cbot/pub/page/0,3181,1403,00.html
# DJIA Futures ($10) Futures Time & Sales (DJ) 
# 6Sep http://www.cbot.com/cbot/pub/page/0,3181,1591,00.html
use LWP::Simple;
my $page = '0,3181,1196,00.html';
my $URL = 'http://www.cbot.com/cbot/pub/page';
my $CODE = 'C';
# just for LOG FILE ouput ...
my ($LOG);
my $write_log = 0;
my $verb = 1; # increase to 9 to see more output
my $outfile = "temp.$0.txt"; # note name of perl file used as base
if ( open( $LOG, ">$outfile" ) ) {
    $write_log = 1; # we have a LOG file
} else {
    $write_log = 0;
    prt( "WARNING: Unable to open $outfile LOG ...\n" );
}
my $out_lines = 0;
my $out_date = 1;
my $text = '';
prt( "Fetching $URL/$page ...\n");
my $text2 = get("$URL/$page");
my $llen = length($text2);
prt( "Got $llen characters ...\n" );
my $line = '';
my @Bars = ();
###prt( "[$text2]\n" );
while( $text2 =~ /\n/ ) {
   $text2 =~ s/\n/<br>/g;
}
my @lines = split( /<br>/, $text2 );
my $lcnt = scalar @lines;
prt( "Got $lcnt lines of text ...\n" );
# searching for 
# Date           Com    Mth     Price      Time       Type           Volume
#----------    -----  -------- ------    ---------   ------------   -----------
#06/16/2006      C    06Jul    2350     9:30:03 AM
my $cnt = 0;
foreach $line (@lines) {
   while ($line =~ /  /) { # double space
      $line =~ s/  / /g; # substitute single
   }
   $_ = $line;
    my ($Date,$Price,$Hour,$Min,$Sec,$ampm,$Ind) = 
         m|^\s*(\d+/\d+/\d+) # " 03/12/1998"
            \s+C\s+\S+\s+(\d+) # " C 98Mar 12116"
            \s+(\d+):(\d+):(\d+) # " 12:42:40"
            \s+(\w{2})    # AM/PM
         \s*(.*)$|x; # " Ask"
   $cnt++;
   #if (defined $Date) {
   #   prt( "$cnt $line " );
   #   prt( " date $Date $Price $Hour $Min $Sec $ampm $Ind\n" );
   #} else {
   #   ###prt( " NO DATE\n" );
   #}
    next unless defined $Date;
    $Day = $Date;
    # Convert from fractional to decimal format
    $Price = int($Price/100) + ($Price%100)/32;
   if ((($ampm =~ /^PM/i)||($Ind =~ /^PM/i)) && ($Hour < 12)) {
      $Hour += 12;
   }
    # Round up time to next multiple of 15 minutes
    my $NewTime = int(($Sec+$Min*60+$Hour*3600)/900+1)*900;
   ###prt( "New time = $NewTime ...\n" );
   if (defined $Time && !($NewTime == $Time)) {
      prt( "$cnt $line " );
      prt( " D[$Date] P[$Price] H[$Hour] M[$Min] S[$Sec] M[$ampm] I=[$Ind]\n" );
   } elsif ($out_date) {
      prt( "$cnt $line " );
      prt( " D[$Date] P[$Price] H[$Hour] M[$Min] S[$Sec] M[$ampm] I=[$Ind]\n" );
   }
    unless (defined $Time && ($NewTime == $Time)) {
      if (defined $Time) {
         prt( "Pushing $hhmm, $Open, $High, $Low, $Close ...\n" );
          push @Bars, [$hhmm, $Open, $High, $Low, $Close];
         prt( "Updating Time $Time to New Time $NewTime ...\n" );
      } else {
         prt( "First set of Time to New Time $NewTime ...\n");
      }
        $Open = $High = $Low = $Close = undef;
        $Time = $NewTime;
        my $Hour = int($Time/3600);
        $hhmm = sprintf "%02d:%02d", $Hour, $Time/60-$Hour*60;
    } elsif (defined $Time) {
      ###prt( "Time = NewTime, ($Time = $NewTime) ...\n" );
    } else {
      prt( "Time NOT defined ...\n" );
   }
    # Update 15 minute bar values
    $Close = $Price;
    $Open = $Price unless defined $Open;
    $High = $Price unless defined $High && $High > $Price;
    $Low = $Price unless defined $Low && $Low > $Price;
   ###prt( "Next $hhmm, $Open, $High, $Low, $Close ...\n" );
}
foreach (split "\n", $text) {
    # 03/12/1998 US 98Mar 12116 15:28:34 Open
    my ($Date,$Price,$Hour,$Min,$Sec,$Ind) =
         m|^\s*(\d+/\d+/\d+) # " 03/12/1998"
            \s+US\s+\S+\s+(\d+) # " US 98Mar 12116"
            \s+(\d+):(\d+):(\d+) # " 12:42:40"
            \s*(.*)$|x; # " Ask"
    next unless defined $Date;
    $Day = $Date;
    # Convert from fractional to decimal format
    $Price = int($Price/100) + ($Price%100)/32;
    # Round up time to next multiple of 15 minutes
    my $NewTime = int(($Sec+$Min*60+$Hour*3600)/900+1)*900;
    unless (defined $Time && $NewTime == $Time) {
      if (defined $Time) {
         prt( "Pushing $hhmm, $Open, $High, $Low, $Close ...\n" );
      }
        push @Bars, [$hhmm, $Open, $High, $Low, $Close]
                                          if defined $Time;
        $Open = $High = $Low = $Close = undef;
        $Time = $NewTime;
        my $Hour = int($Time/3600);
        $hhmm = sprintf "%02d:%02d", $Hour, $Time/60-$Hour*60;
    }
    # Update 15 minute bar values
    $Close = $Price;
    $Open = $Price unless defined $Open;
    $High = $Price unless defined $High && $High > $Price;
    $Low = $Price unless defined $Low && $Low > $Price;
   prt( "Next $hhmm, $Open, $High, $Low, $Close ...\n" );
}
mydie( "No data found\n" ) unless defined $Time;
prt( "Pushing $hhmm, $Open, $High, $Low, $Close ...\n" );
push @Bars, [$hhmm, $Open, $High, $Low, $Close];
# diagnostic line output only
if ($out_lines) {
   foreach $line (@lines) {
      chomp $line;
      $line =~ s/\t/ /g; # substitute the tabs to a space
      while ($line =~ /  /) { # double space
         $line =~ s/  / /g; # substitute single
      }
      if ($line =~ /\S/) { # if other than white space
         prt( "$line\n");
      }
   }
}
exit(0);
################################
### output and log file
sub wlog {
   my $ml = shift;
   print $LOG $ml;
}
sub prt {
   my $m = shift;
   if ($write_log) {
      wlog($m);
   }
   print STDOUT $m;
}
sub mydie {
   my $msg = shift;
   if ($write_log) {
      wlog($msg);
   }
   die $msg;
}
sub close_log {
   if ($write_log) {
      prt( "Closing LOG file, and passing to 'system($outfile)'\nMay need to CLOSE notepad to continue ...\n" );
      close( $LOG );
      system( $outfile );
   }
}

index -|- top

checked by tidy  Valid HTML 4.01 Transitional