Page 1 of 1

SLOT MACHINE INDICATOR - DARVAS BOX

Posted: Wed Jun 28, 2006 11:19 pm
by TheRumpledOne





Code: Select all

// _SMAA_CT_DarvasBox2
   

{Attn: TradeStation
if this indicator is posted on the TradeStation Forum, I, TheRumpledOne, did NOT post it there,
so I can't be blamed for this indicator having my contact info.}


{MODIFYING Programmer:  Avery T. Horton, Jr.  aka TheRumpledOne,
gifts and donations accepted, PO Box 43575, Tucson, AZ 85733 }

{ © Copyright 2006 Avery T. Horton, Jr.}


{   Indicator - CT_DarvarBox2

   Darvas Boxes originally coded by Combs [Thanks Greg]

   Modified by Codetalker

   Note:

   CT_DarVarBox2 allows for specifying the number of Box or Lines to remain on Screen

   October 14, 2003

}
Inputs:
   
   idecimals( 2 ),

   iThreshold( .05 ),

   ShowAll(False),      { True = no Boxes or Lines are deleted, False = the BoxesOnScreen number is shown on screen }
   BoxesOnScreen(5),   { If ShowAll=False then # of Boxes or Lines to keep on the screen [not > BoxTL_ID's Array d2 Size] }
   DoBoxes(True),      { True= boxes are drawn, False = Lines are drawn }
   ScreenAdjust(20),   { Used in a dummy Plot statement to force the screen to adjust }
   TopColor(Yellow),
   BottomColor(Magenta),
   BuyTextColor(White),
   SellTextColor(White);



Variables:

tAlert(""),

xSort(0),

xDiff(0),

xBoxTop  ( 0 ) ,
xBoxBtm  ( 0 ) ,

xPrev_BoxTop  ( 0 ) ,
xPrev_BoxBtm  ( 0 ) ,

FG1(white),
BG1(black),

fg2(white),
bg2(black),

fg3(white),
bg3(black),

fg4(white),
bg4(black);


Variables:
   BoxTop  ( 0 ) ,
   BoxBtm  ( 0 ) ,
   BBD     ( 0 ) ,
   BBT     ( 0 ) ,
   EBD     ( 0 ) ,
   EBT     ( 0 ) ,
   PED     ( 0 ) ,
   PET     ( 0 ) ,
   TopId   ( -1 ) ,
   TopCId  ( -1 ) ,
   BtmId   ( -1 ) ,
   BtmCId  ( -1 ) ,
   LSId   ( -1 ),
   RSId   ( -1 ),
   UpBand  ( 0 ) ,
   DnBand  ( 0 ) ,
   CurrentState(0),
   BuyTextID(-1),
   SellTextID(-1),
   PlotColor(GetBackGroundColor),   { Used by Dummy Plots }
   HiFirst  ( true ) ,
   LoFirst  ( false ) ,
   DrawBox  ( false ) ,
   NewBox   ( false ) ;

{ Used as State compares...Don't change these }

Variables:
   MyState1( 1 ) ,
   MyState2( 2 ) ,
   MyState3( 3 ) ,
   MyState4( 4 ) ,
   MyState5( 5 );

Variables:
   BoxColor(0),
   StateCheck1(False),
   StateCheck2(False);

Variables:
   HStyleLeft(0),
   HStyleRight(1),      
   HStyleCenter(2),
   VStyleTop(0),
   VStyleBottom(1),      
   VStyleCenter(2),
   THStyle(HStyleLeft),
   TVStyle(VStyleBottom),
   BHStyle(HStyleLeft),
   BVStyle(VStyleTop);

Variables:
   TTLStyle(Tool_Dashed2),
   BTLStyle(Tool_Dashed2);

Variables:
   CircularBased(0),      { The Circular buffer can be either 0 or 1 based - I pick 0 - saves a little memory }
   BoxTLsCount(0),         { This is a function internal variable...don't change the contents }
   BoxTLsTail(0),
   BoxTLsHead(0),
   BoxTLsPrevHead(0);

{ BoxTL_IDs Array Box Side Index Variables }

Variables:
   TTStatus(0),
   TopId_Index(CircularBased),
   BtmId_Index(CircularBased+1),

   LSId_Index(CircularBased+2),
   RSId_Index(CircularBased+3),

   TopCId_Index(CircularBased+2),
   BtmCId_Index(CircularBased+3);   { Same because of two different methods }

Variables:
   BuyText_Index(CircularBased+4),
   SellText_Index(CircularBased+5);      { Text Id Index vars }

   { Because TS forces us to statically declare the Arrays size, BoxesOnScreen must be <= BoxTL_IDs[x,"thisone"] definition }

   { If CircularBased=0 then BoxTL_IDs[5,x] else If CircularBased=1 then BoxTL_IDs[6,x] }


   { The Last Two BoxTL_IDs' are used to store the text id's }


{ INITIALIZE }

if CurrentBar = 1 then
   begin
      BoxTop=High; BoxBtm=Low;
      BBD=Date; BBT=Time;
      CurrentState=MyState1;
      BoxTLsCount=CircularBased;         { Initalize the Counts to our base}
      PED=0; PET=0;
   end ;
   

tAlert = "";

FG1 = WHITE;
BG1 = BLACK;

fg2 = WHITE;
bg2 = BLACK;

fg3 = WHITE;
bg3 = BLACK;

fg4 = WHITE;
bg4 = BLACK;


Condition1=High > UpBand;
Condition2=Low < DnBand;
   
if NewBox and ( Condition1 or Condition2 ) Then
   begin    
      BBD=Date; BBT=Time;   NewBox=False;
      CurrentState=MyState1;
      LoFirst=IffLogic(Condition2,True,False);
      HiFirst=IffLogic(Condition1,True,False);

   
   End;
   
   StateCheck1=IffLogic(HiFirst,High > BoxTop,Low < BoxBtm);
   StateCheck2=IffLogic(HiFirst,Low < BoxBtm,High > BoxTop);

      If CurrentState=MyState4 then
      begin
         If StateCheck1 then
         begin
            CurrentState=MyState1;
            StateCheck1=False;
            If HiFirst Then BoxTop = high
                     Else BoxBtm = low;
         end else
         begin
            if StateCheck2 then
            begin
               CurrentState=MyState3;
               StateCheck2=False;
               If HiFirst Then BoxBtm = low
                        Else BoxTop = high;
            end else CurrentState=MyState5;
         end;
      end ;
   
      if CurrentState=MyState3 then
      begin
         if StateCheck1 then
         begin
            CurrentState=MyState1;
            StateCheck1=False;
            If HiFirst Then BoxTop = high
                     Else BoxBtm = low;
         end else
         Begin
            if StateCheck2 then
            Begin
               StateCheck2=False;               
               If HiFirst Then BoxBtm = low
                          Else BoxTop = high;
            End Else CurrentState=MyState4;
         end ;
      end ;

   if CurrentState=MyState2 then
      if StateCheck1 then
      begin
         CurrentState=MyState1;
         StateCheck1=False;
         If HiFirst Then BoxTop = high
                  Else BoxBtm = low;
         end else
         begin
            CurrentState=MyState3;
            If HiFirst Then BoxBtm = low
                     Else BoxTop = high;
         end ;

   if CurrentState=MyState1 then
      if StateCheck1 then
      Begin
         If HiFirst Then BoxTop = high
                  Else BoxBtm = low ;   
      End Else CurrentState=MyState2;

   if CurrentState=MyState5 then   
      begin
         DrawBox  = true ;
         EBD      = date ;
         EBT      = time ;
      end ;

If DrawBox then
   begin

   If DoBoxes Then
   Begin      
      



if xBoxTop <> xPrev_BoxTop
   then xPrev_BoxTop = xBoxTop ;


if xBoxBtm <> xPrev_BoxBtm
   then xPrev_BoxBtm = xBoxBtm ;

      xBoxTop = BoxTop ;
      xBoxBtm = BoxBtm ;
      
   End Else
   Begin

      PED=EBD; PET=EBT;
   End;

      { These are just Dummy Forced Plot's }
      CurrentState=0;
      DrawBox=False; NewBox=True;
      UpBand=BoxTop; DnBand=BoxBtm;
      BoxTop=High; BoxBtm=Low;

End;


{ Alert criteria }


If xBoxTop > xPrev_BoxTop
then begin
   Fg1 = green;
   Bg1 = BLACK;
end
else
If xBoxTop < xPrev_BoxTop
then begin
   Fg1 = red;
   Bg1 = BLACK;
end
else
begin
   Fg1 = white;
   Bg1 = BLACK;
end;


If xBoxBtm > xPrev_BoxBtm
then begin
   Fg2 = green;
   Bg2 = BLACK;
end
else
If xBoxBtm < xPrev_BoxBtm
then begin
   Fg2 = red;
   Bg2 = BLACK;
end
else
begin
   Fg2 = white;
   Bg2 = BLACK;
end;

xSort = 0 ;
xDiff = 0 ;

value2  = xBoxTop - close ;


if value2 <= iThreshold
and value2 > 0
then begin
   fg1    = yellow ;
   fg3    = green;
   xSort    = 2 ;
   xDiff    = value2 ;
   tAlert    = "DBx Top B/O " ;
end;

value3 = close - xBoxBtm ;

if value3 <= iThreshold
and value3 > 0
then begin
   fg2    = yellow ;
   fg3    = red ;
   xSort    = 1 ;
   xDiff    = value3 ;
   tAlert   = "DBx Btm B/O " ;
end;


{ Alert }

 
if tAlert <> ""
and tAlert <> tAlert[1]
   then Alert( tAlert + Numtostr( xDiff , idecimals) ) ;
 

{ plot }

Plot1( xBoxTop , "BoxTop", fg1 ) ;
SetPlotBGColor( 1,  bg1 );

Plot2( xBoxBtm, "BoxBtm", fg2 ) ;
SetPlotBGColor( 2, bg2);

Plot3( xSort, "Sort", fg3 ) ;
SetPlotBGColor( 3, bg3);

Plot4( xDiff , "Diff", fg4 ) ;
SetPlotBGColor( 4, bg4);


{
Plot3( xPrev_BoxTop , "Prev BoxTop", fg3 ) ;
SetPlotBGColor( 3, bg3);

Plot4( xPrev_BoxBtm, "Prev BoxBtm", fg4 ) ;
SetPlotBGColor( 4, bg4);
}