Cattle Table

This example prints a table of cattle prices from the April contract for each of the last 19 years.  The December 15th price and the March 15th prices are printed along with the change in price between these two dates.  If the desired dates happen to be on the weekend, then the prices are obtained from Monday.

function NearDate(d: integer): real;
var j: integer;
begin
  j:=Bar(eIndex,d);
  if j=0 then begin inc(d); j:=Bar(eIndex,d); end;
  if j=0 then begin inc(d); j:=Bar(eIndex,d); end;
  if j=0 then begin inc(d); j:=Bar(eIndex,d); end;
  if j>0 then Result:=Bar(eLast,j) else Result:=0;
end;

procedure CattleTable;
var
  yr,mo: integer;
  s,s1,s2: string;
  j,k,iDate1,iDate2: integer;
  price1,price2: real;
begin
  Output(eClear);
  writeln('Contract Dec 15th March 15th Change');
  for yr:=80 to 98 do begin
    for mo:=2 to 2 do begin
      s:='LC'+inttostr(yr)+Copy('GJMQVZ',mo,1);
      chart(s);
      iDate1:=pred(yr)*10000+1215; {Dec 15th}
      iDate2:=yr*10000+0315; {Mar 15th}
      price1:=NearDate(iDate1);
      price2:=NearDate(iDate2);
      s1:=FormatPrice(price1,true,3,eFuture);
      s2:=FormatPrice(price2,true,3,eFuture);
      writeln(s,' ',s1,' ',s2,Align((price2-price1)/1000,8));
      mnuCloseWindow.click;
    end;
  end;
end;

begin
  if Who=2 then CattleTable;
end;