Rank: Advanced Member
Groups: Registered, Registered Users, Unverified Users Joined: 9/18/2008(UTC) Posts: 37
|
Program Overview
This program classifies price action into the following states based upon rules
his book - "How to Trade in Stocks"
StateNo1 - Up Trend StateNo2 - Nat Rally StateNo3 - Sec Rally StateNo4 - Dn Trend StateNo5 - Nat React StateNo6 - Sec React
State change is determined by a user specified threshold of price change. The program also determines a number of pivot points:
UpTrendPP - Peak Up Trend Price NatRallyPP - Peak Nat Rally Price DnTrendPP - Bottom Dn Trend Price NatReactPP - Bottom Nat React Price
This program may be used as a basis for a number of studies: - trend paint bars, - pivot price indicator lines - strategies (trend following AND/OR breakout/breakDn)
For detailed explanation of the system Jesse Livermore Orginal Work. Note: Livermore's system used a threshold of 6 points for stocks priced over $30. For modern Market, due to different markets has wide range of prices. The threshold price is set in Percentage...(default 10%)
//------------------------------------------------------------------------------ */
// General Graphic Control GraphXSpace = 15;
SetChartBkGradientFill( ParamColor("BgTop", colorSkyblue), ParamColor("BgBottom", colorWhite),ParamColor("titleblock",colorWhite));
ThresholdPercentValue = Param("Threshold in Percent units",10,4,15,1); for( i=0; i<BarCount; i++ ) {
if(i==0) { //Initialization //var: StateNo=1; InUpTrend=True; InDnTrend=False;
SecRally = NatRally = UpTrend = Close; SecReact = NatReact = DnTrend =Close;
NatRallyReset=True; NatReactReset=True;
UpTrendPP=C[0]; NatRallyPP=C[0]; NatReactPP=C[0]; DnTrendPP=C[0];
} //end;
else //{Main} { //begin //{calc current Threshold if required}
// Memory Refresh Manually... Work like refreshing the D-Ram. // This is the fastest trick to handle the issue with AMI-AFL. (KH Tang) // With this, one can program anything in a flowchart. :-)
StateNo=StateNo[i-1]; InUpTrend=InUpTrend[i-1]; InDnTrend=InDnTrend[i-1];
UpTrend = UpTrend[i-1]; NatRally = NatRally[i-1]; SecRally = SecRally[i-1]; SecReact = SecReact[i-1]; NatReact = NatReact[i-1]; DnTrend = DnTrend[i-1];
NatRallyReset=NatRallyReset[i-1]; NatReactReset=NatReactReset[i-1];
UpTrendPP=UpTrendPP[i-1]; NatRallyPP=NatRallyPP[i-1]; NatReactPP=NatReactPP[i-1]; DnTrendPP=DnTrendPP[i-1];
ThresholdPct=ThresholdPercentValue/100;
//------------------------------------------------------------------------------ //111111111111111111111111111111111111111111111111111111111111111111111111111111 //------------------------------------------------------------------------------ //State No 1: In Up Trend Column if(StateNo[i-1]==1)// {//UpTrend Routine if(C>=C[i-1]) {//Price Move Up if(C>UpTrend) { StateNo=1;//Remain in UpTrend - 1111111111111111111111111111111 InUpTrend=True; InDnTrend=False; UpTrend=C; } }//End of Price Move Up else {//Price Move Dn if((InDnTrend AND C<DnTrendPP) OR //PivotPoint Check (InUpTrend AND C< UpTrend/(1+2*ThresholdPct)) ) {//Drop to DnTrend StateNo=6;//Dn Trend - 6666666666666666666666666666666666666666 InDnTrend=True; InUpTrend=False; DnTrend=C; UpTrendPP=UpTrend; }// End of Drop to DnTrend else { if(C<(UpTrend/(1+ThresholdPct))) {//Drop Below Current State React if(NatReactReset OR C < NatReact) {//First Time or Below NatReact StateNo=5;//Nat React - 55555555555555555555555555555555 NatReactReset=False; NatReact=C; UpTrendPP=UpTrend; }//End of First Time or Below NatReact else {//Drop to SecReact StateNo=4;//SecReact - 444444444444444444444444444444444 SecReact=C; UpTrendPP=UpTrend; }//End of Drop to SecReact } }//End of Drop Below Current Price React }//End of Price Move Dn }//End of UpTrend Routine //------------------------------------------------------------------------------ //222222222222222222222222222222222222222222222222222222222222222222222222222222 //------------------------------------------------------------------------------ //State No 2: In Nat Rally Column else if(StateNo[i-1]==2)// {//NatRally Routine //NatRallyReset=False;
if(C>C[i-1]) {//Price Move Up if( (InUpTrend AND C>UpTrendPP) OR (InDnTrend AND C> DnTrend*(1+2*ThresholdPct)) ) {//Price move to UpTrend - 1111111111111111111111111111111111111111111 StateNo=1; InUpTrend=True; InDnTrend=False; UpTrend=C; }//End of Price Move to UpTrend else { if(C>NatRally) {//Price Continue to move to higher NatRally StateNo=2;//Remain in NatRally - 222222222222222222222222222 NatRally=C; NatRallyReset=False; }//End of Price Continue to move to higher NatRally } }//End of Price Move Up else //of(C>C[i-1]) {//Price Move Dn if((InDnTrend AND C<DnTrendPP) OR (InUpTrend AND C< UpTrend/(1+2*ThresholdPct)) ) {//Drop to DnTrend StateNo=6;//Dn Trend - 6666666666666666666666666666666666666666 InDnTrend=True; InUpTrend=False; DnTrend=C; NatRallyPP=NatRally; }// End of Drop to DnTrend else { if(C<(NatRally/(1+ThresholdPct))) {//Drop Below Current State React if(NatReactReset OR C < NatReact) {//First Time or Below NatReact StateNo=5;//Nat React - 55555555555555555555555555555555 NatReactReset=False; NatReact=C; NatRallyPP=NatRally; }//End of First Time or Below NatReact else {//Drop to SecReact StateNo=4;//SecReact - 444444444444444444444444444444444 SecReact=C; NatRallyPP=NatRally; }//End of Drop to SecReact } }//End of Drop Below Current Price React }//End of Price Move Dn }//End of NatRally Routine
//------------------------------------------------------------------------------ //333333333333333333333333333333333333333333333333333333333333333333333333333333 //------------------------------------------------------------------------------ //State No 3: In Sec Rally Column else if(StateNo[i-1]==3) // {//SecRally Routine if(C>C[i-1]) {//Price Move Up if( (InUpTrend AND C>UpTrendPP) OR (InDnTrend AND C> DnTrend*(1+2*ThresholdPct)) ) {//Price move to UpTrend - 1111111111111111111111111111111111111111111 StateNo=1; InUpTrend=True; InDnTrend=False; UpTrend=C; }//End of Price Move to UpTrend else { if(C>NatRally) {//Price Continue to move to higher NatRally StateNo=2;//Remain in NatRally - 222222222222222222222222222 NatRally=C; NatRallyReset=False;
}//End of Price Continue to move to higher NatRally else {//Remain at SecRally State if(C>SecRally) {//New Higher Sec Price - 3333333333333333333333333333333333333 StateNo=3;//Remain in SecRally State SecRally=C;//Update new higher price }//End of New Higher Sec Price }//End of Remain at Sec State } }//End of Price Move Up else //of(C>C[i-1]) {//Price Move Dn if((InDnTrend AND C<DnTrendPP) OR (InUpTrend AND C< UpTrend/(1+2*ThresholdPct)) ) {//Drop to DnTrend StateNo=6;//Dn Trend - 666666666666666666666666666666666666666 6 InDnTrend=True; InUpTrend=False; DnTrend=C; }// End of Drop to DnTrend else { if(C<(SecRally/(1+ThresholdPct))) {//Drop Below Current State React if(C < NatReact) {//First Time or Below NatReact StateNo=5;//Nat React - 55555555555555555555555555555555 NatReact=C; }//End of First Time or Below NatReact else {//Drop to SecReact StateNo=4;//SecReact - 444444444444444444444444444444444 SecReact=C; }//End of Drop to SecReact } }//End of Drop Below Current Price React }//End of Price Move Dn }//End of SecRally Routine
//------------------------------------------------------------------------------ //444444444444444444444444444444444444444444444444444444444444444444444444444444 //------------------------------------------------------------------------------ //State No 4: In Sec React Column //Note that these two state are sharing the same processing routine else if(StateNo[i-1]==4)// {//SecReact Routine
if(C>C[i-1]) {//Price Move Up if( (InUpTrend AND C>UpTrendPP) OR (InDnTrend AND C> DnTrend*(1+2*ThresholdPct)) ) {//Price move to UpTrend - 1111111111111111111111111111111111111111111 StateNo=1; InUpTrend=True; InDnTrend=False; UpTrend=C; }//End of Price Move to UpTrend else { if(C>(SecReact*(1+ThresholdPct))) {//Raise Above Current State React if(C>NatRally) { StateNo=2;//Move to NatRally - 2222222222222222222222 NatRally=C; NatRallyReset=False; } else {//Raise to SeconaryRally StateNo=3;//Raise to SecRally - 333333333333333333333 SecRally=C; }//End of Raise to SecRally }// End of Raise Above Current State React } }//End of Price Move Up else //of(C>C[i-1]) {//Price Move Dn if((InDnTrend AND C<DnTrendPP) OR (InUpTrend AND C< UpTrend/(1+2*ThresholdPct)) ) {//Drop to DnTrend StateNo=6;//Dn Trend - 6666666666666666666666666666666666666666 InDnTrend=True; InUpTrend=False; DnTrend=C; }// End of Drop to DnTrend else { if(C<NatReact) {//Raise Above NatReact StateNo=5;//NatReact - 5555555555555555555555555555555555555 NatReact=C; }//Raise Above NatReact else {//Remain at SecReact if(C<SecReact) {//Lower SecReact SecReact=C; }//End of Lower SecReact }//End of Remain at SecReact } }//End of Price Move Dn }//End of Sec React Routine
//------------------------------------------------------------------------------ //555555555555555555555555555555555555555555555555555555555555555555555555555555 //------------------------------------------------------------------------------ //State No 5: In Nat React Column else if(StateNo[i-1]==5)// {//NatReact Routine //NatReactReset=False; if(C>C[i-1]) {//Price Move Up if( (InUpTrend AND C>UpTrendPP) OR (InDnTrend AND C> DnTrend*(1+2*ThresholdPct)) ) {//Price move to UpTrend - 1111111111111111111111111111111111111111111 StateNo=1; InUpTrend=True; InDnTrend=False; UpTrend=C; NatReactPP=NatReact; }//End of Price Move to UpTrend else { if(C>(NatReact*(1+ThresholdPct))) {//Raise Above Current State React if(NatRallyReset OR C>NatRally) { StateNo=2;//Move to NatRally - 2222222222222222222222 NatRallyReset=False; NatRally=C |