[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: point and figure



PureBytes Links

Trading Reference Links

Here is the code you need for Tradestation to run P&F correctly.  There is a 
system and a function.  

{this is the system}
Input: pfBoxSiz(0.7),pfRevSiz(3),Length(3),Offset(0.1);

Buy pfFunction1(3,pfBoxSiz,pfRevSiz,Length,Offset) Stop;
Sell pfFunction1(4,pfBoxSiz,pfRevSiz,Length,Offset) Stop;

******************************************************************************
*

{

Function Name--- " pfFunction1"


Function = 0 then Return = Current Reversal Price;
Function = 1 then Return = Max Bar Price;
Function = 2 then Return = Bar Direction;
Function = 3 then Return = Buy Entry Stop Price;
Function = 4 then Return = Sell Entry Stop Price;
Function = other then Return = 0;
}

Inputs: Mode(NumericSimple),pfBoxSiz(NumericSimple),
            pfRevSiz(NumericSimple),Length(NumericSimple), 
Offset(NumericSimple);

Array: MaxBarPrice[30](0);
Vars: CurrentRevPrice(0),BarDirection(0),MaxBarCount(10),X(0),Return(0),
          BuyStop(0), SellStop(0);

if CurrentBar <= 1 then begin
  CurrentRevPrice = round(Close,0);
  BarDirection = 0;
  BuyStop = High + Offset;
  SellStop = Low - Offset;
end
else begin
  if BarDirection = 0 then begin
    if High >= CurrentRevPrice + pfBoxSiz * pfRevSiz then begin
      MaxBarPrice[0] = CurrentRevPrice + pfBoxSiz * pfRevSiz;
      BarDirection = 1;
    end
    else if Low <= CurrentRevPrice - pfBoxSiz * pfRevSiz then begin
      MaxBarPrice[0] = CurrentRevPrice - pfBoxSiz * pfRevSiz;
      BarDirection = -1;
    end; 
  end
  else if BarDirection = 1 then begin
       if High >= MaxBarPrice[0] + pfBoxSiz then begin
         while High >= MaxBarPrice[0] + pfBoxSiz begin
           MaxBarPrice[0] = MaxBarPrice[0] + pfBoxSiz;
          CurrentRevPrice = MaxBarPrice[0] - pfBoxSiz * pfRevSiz;
        end;
      end
      else if Low <= CurrentRevPrice then begin  { we have a reversal }
        for X = 0 to MaxBarCount-1 begin
          MaxBarPrice[MaxBarCount - X] = MaxBarPrice[MaxBarCount - X-1];
        end;
        MaxBarPrice[0] = CurrentRevPrice;
        BarDirection = -1;
        CurrentRevPrice = MaxBarPrice[0] + pfBoxSiz * pfRevSiz;
         while Low <= MaxBarPrice[0] - pfBoxSiz begin
           MaxBarPrice[0] = MaxBarPrice[0] - pfBoxSiz;
          CurrentRevPrice = MaxBarPrice[0] + pfBoxSiz * pfRevSiz;
        end;
    end; 
  end { BarDirection = 1}
  else begin {BarDirection= -1}
       if Low <= MaxBarPrice[0] - pfBoxSiz then begin
         while Low <= MaxBarPrice[0] - pfBoxSiz begin
           MaxBarPrice[0] = MaxBarPrice[0] - pfBoxSiz;
          CurrentRevPrice = MaxBarPrice[0] + pfBoxSiz * pfRevSiz;
        end;
      end
      else if High >= CurrentRevPrice then begin  { we have a reversal }
        for X = 0 to MaxBarCount-1 begin
          MaxBarPrice[MaxBarCount - X] = MaxBarPrice[MaxBarCount - X-1];

        end;
        MaxBarPrice[0] = CurrentRevPrice;
        BarDirection = 1;
        CurrentRevPrice = MaxBarPrice[0] - pfBoxSiz * pfRevSiz;
        while High >= MaxBarPrice[0] + pfBoxSiz begin
           MaxBarPrice[0] = MaxBarPrice[0] + pfBoxSiz;
          CurrentRevPrice = MaxBarPrice[0] - pfBoxSiz * pfRevSiz;
        end;
    end; 
  end; {BarDirection= -1}

{ Next section calculates the price of the current entry stop}

  value1= 0;
  value2= 100000;

  for X = 1 to Length begin
    if MaxBarPrice[X] > value1 then value1 = MaxBarPrice[X];
    if MaxBarPrice[X] < value2 then value2 = MaxBarPrice[X];
  end;

  BuyStop = value1 + offset;
  SellStop = value2 - offset;

if date=970811 and Mode = 3 then begin
print("pf0:",CurrentBar:5:0,":",Date:6:0,":",Time:5:0,":","MBP[0]=",MaxBarPric
e[0],
        ":","MBP[1]=",MaxBarPrice[1]);
print("pf1:",CurrentBar:5:0,":",Date:6:0,":",Time:5:0,":","MBP[2]=",MaxBarPric
e[2],
        ":","MBP[3]=",MaxBarPrice[3]);

end;

end; {CurrentBar<=1} 



if Mode = 0 then begin
  Return = CurrentRevPrice;
end
else if Mode = 1 then begin
  if BarDirection = 0 then Return = Close
  else if BarDirection = 1 then Return = MaxBarPrice[0]
  else Return = MaxBarPrice[0];
end
else if Mode = 2 then begin
  Return = BarDirection;
end
else if Mode = 3 then begin
  Return = BuyStop;
end
else if Mode = 4 then begin
  Return = SellStop;
end
else begin
  Return = 0;
end;

pfFunction1 = Return;