Stock Portfolio Organizer

The ultimate porfolio management solution.

Shares, Margin, CFD's, Futures and Forex
EOD and Realtime
Dividends and Trust Distributions
And Much More ....
For Portfolio Manager Click Here

WiseTrader Toolbox

#1 Selling Amibroker Plugin featuring:

Advanced Adaptive Indicators
Advanced Pattern Exploration
Neural Networks
And Much More ....
Find Out More Here

jessilevinmore for Amibroker (AFL)

Copy & Paste Friendly
_SECTION_BEGIN("jesselevenmore");
//------------------------------------------------------------------------------
//  Formula Name   : Project Freedom - Jesse Livermore Secret Market Key
//  Author         : KH Tang 
//  Date Updated   : 30 Apr 2007 
//  Origin         : Personal Study and Understanding of Livermore's work
//  Version        : 1.0 
//  Blog			  : http://blessedfool.gaia.com/blog
//------------------------------------------------------------------------------

/*
//------------------------------------------------------------------------------
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[i]=1;
		InUpTrend[i]=True;
		InDnTrend[i]=False;

		SecRally[i] = NatRally[i] = UpTrend[i] = Close[i];
		SecReact[i] = NatReact[i] = DnTrend[i] =Close[i];

		NatRallyReset[i]=True;
       NatReactReset[i]=True;

		UpTrendPP[i]=C[0];
       NatRallyPP[i]=C[0];
		NatReactPP[i]=C[0];
		DnTrendPP[i]=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[i]=StateNo[i-1];
	InUpTrend[i]=InUpTrend[i-1];
	InDnTrend[i]=InDnTrend[i-1];

	UpTrend[i] = UpTrend[i-1];
	NatRally[i] = NatRally[i-1];
	SecRally[i] = SecRally[i-1];
	SecReact[i] = SecReact[i-1];
	NatReact[i] = NatReact[i-1];
	DnTrend[i] = DnTrend[i-1];

	NatRallyReset[i]=NatRallyReset[i-1];
 	NatReactReset[i]=NatReactReset[i-1];

	UpTrendPP[i]=UpTrendPP[i-1];
	NatRallyPP[i]=NatRallyPP[i-1];
	NatReactPP[i]=NatReactPP[i-1];
	DnTrendPP[i]=DnTrendPP[i-1];

	ThresholdPct[i]=ThresholdPercentValue[i]/100; 


//------------------------------------------------------------------------------
//111111111111111111111111111111111111111111111111111111111111111111111111111111
//------------------------------------------------------------------------------
    //State No 1: In Up Trend Column
	if(StateNo[i-1]==1)//
	{//UpTrend Routine
		if(C[i]>=C[i-1])
		{//Price Move Up
			if(C[i]>UpTrend[i])
			{
				StateNo[i]=1;//Remain in UpTrend - 1111111111111111111111111111111
				InUpTrend[i]=True;
				InDnTrend[i]=False;
				UpTrend[i]=C[i];
			}
		}//End of Price Move Up
		else
		{//Price Move Dn
			if((InDnTrend[i] AND C[i]<DnTrendPP[i]) OR   //PivotPoint Check
				(InUpTrend[i] AND C[i]< UpTrend[i]/(1+2*ThresholdPct[i])) )
			{//Drop to DnTrend
				StateNo[i]=6;//Dn Trend - 6666666666666666666666666666666666666666	
				InDnTrend[i]=True;	
				InUpTrend[i]=False;
				DnTrend[i]=C[i];
				UpTrendPP[i]=UpTrend[i];
			}// End of Drop to DnTrend			
			else
			{
				if(C[i]<(UpTrend[i]/(1+ThresholdPct[i])))
				{//Drop Below Current State React 
					if(NatReactReset[i] OR C[i] < NatReact[i])
					{//First Time or Below NatReact
						StateNo[i]=5;//Nat React - 55555555555555555555555555555555				
						NatReactReset[i]=False;
						NatReact[i]=C[i];
						UpTrendPP[i]=UpTrend[i];
					}//End of First Time or Below NatReact
					else
					{//Drop to SecReact 
						StateNo[i]=4;//SecReact - 444444444444444444444444444444444
						SecReact[i]=C[i];
						UpTrendPP[i]=UpTrend[i];
					}//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[i]>C[i-1])
		{//Price Move Up
			if(	(InUpTrend[i] AND C[i]>UpTrendPP[i]) OR
				(InDnTrend[i] AND C[i]> DnTrend[i]*(1+2*ThresholdPct[i])) )
			{//Price move to UpTrend - 1111111111111111111111111111111111111111111
				StateNo[i]=1;
				InUpTrend[i]=True;
				InDnTrend[i]=False;
				UpTrend[i]=C[i];
			}//End of Price Move to UpTrend
			else
			{
				if(C[i]>NatRally[i])
				{//Price Continue to move to higher NatRally 
					StateNo[i]=2;//Remain in NatRally - 222222222222222222222222222
					NatRally[i]=C[i];
					NatRallyReset[i]=False;
				}//End of Price Continue to move to higher NatRally
			}
		}//End of Price Move Up
		else //of(C[i]>C[i-1]) 
		{//Price Move Dn
			if((InDnTrend[i] AND C[i]<DnTrendPP[i]) OR
				(InUpTrend[i] AND C[i]< UpTrend[i]/(1+2*ThresholdPct[i])) )
			{//Drop to DnTrend
				StateNo[i]=6;//Dn Trend - 6666666666666666666666666666666666666666
				InDnTrend[i]=True;	
				InUpTrend[i]=False;
				DnTrend[i]=C[i];
				NatRallyPP[i]=NatRally[i];
			}// End of Drop to DnTrend			
			else
			{
				if(C[i]<(NatRally[i]/(1+ThresholdPct[i])))
				{//Drop Below Current State React 
					if(NatReactReset[i] OR C[i] < NatReact[i])
					{//First Time or Below NatReact
						StateNo[i]=5;//Nat React - 55555555555555555555555555555555					
						NatReactReset[i]=False;
						NatReact[i]=C[i];
						NatRallyPP[i]=NatRally[i];
					}//End of First Time or Below NatReact
					else
					{//Drop to SecReact 
						StateNo[i]=4;//SecReact - 444444444444444444444444444444444
						SecReact[i]=C[i];
						NatRallyPP[i]=NatRally[i];
					}//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[i]>C[i-1])
		{//Price Move Up
			if(	(InUpTrend[i] AND C[i]>UpTrendPP[i]) OR
				(InDnTrend[i] AND C[i]> DnTrend[i]*(1+2*ThresholdPct[i])) )
			{//Price move to UpTrend - 1111111111111111111111111111111111111111111
				StateNo[i]=1;
				InUpTrend[i]=True;
				InDnTrend[i]=False;
				UpTrend[i]=C[i];
			}//End of Price Move to UpTrend
			else
			{
				if(C[i]>NatRally[i])
				{//Price Continue to move to higher NatRally 
					StateNo[i]=2;//Remain in NatRally - 222222222222222222222222222
					NatRally[i]=C[i];
					NatRallyReset[i]=False;

				}//End of Price Continue to move to higher NatRally
				else
				{//Remain at SecRally State
					if(C[i]>SecRally[i])
					{//New Higher Sec Price - 3333333333333333333333333333333333333
						StateNo[i]=3;//Remain in SecRally State
						SecRally[i]=C[i];//Update new higher price
					}//End of New Higher Sec Price
				}//End of Remain at Sec State
			}
		}//End of Price Move Up
		else //of(C[i]>C[i-1]) 
		{//Price Move Dn
			if((InDnTrend[i] AND C[i]<DnTrendPP[i]) OR
				(InUpTrend[i] AND C[i]< UpTrend[i]/(1+2*ThresholdPct[i])) )
			{//Drop to DnTrend
				StateNo[i]=6;//Dn Trend - 666666666666666666666666666666666666666	6	
				InDnTrend[i]=True;	
				InUpTrend[i]=False;
				DnTrend[i]=C[i];
			}// End of Drop to DnTrend			
			else
			{
				if(C[i]<(SecRally[i]/(1+ThresholdPct[i])))
				{//Drop Below Current State React 
					if(C[i] < NatReact[i])
					{//First Time or Below NatReact
						StateNo[i]=5;//Nat React - 55555555555555555555555555555555				
						NatReact[i]=C[i];
					}//End of First Time or Below NatReact
					else
					{//Drop to SecReact 
						StateNo[i]=4;//SecReact - 444444444444444444444444444444444
						SecReact[i]=C[i];
					}//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[i]>C[i-1])
		{//Price Move Up
			if(	(InUpTrend[i] AND C[i]>UpTrendPP[i]) OR
				(InDnTrend[i] AND C[i]> DnTrend[i]*(1+2*ThresholdPct[i])) )
			{//Price move to UpTrend - 1111111111111111111111111111111111111111111
				StateNo[i]=1;
				InUpTrend[i]=True;
				InDnTrend[i]=False;
				UpTrend[i]=C[i];
			}//End of Price Move to UpTrend
			else
			{
				if(C[i]>(SecReact[i]*(1+ThresholdPct[i])))
				{//Raise Above Current State React 
					if(C[i]>NatRally[i])
						{
							StateNo[i]=2;//Move to NatRally - 2222222222222222222222
							NatRally[i]=C[i];
							NatRallyReset[i]=False;
						}
					else
						{//Raise to SeconaryRally
							StateNo[i]=3;//Raise to SecRally - 333333333333333333333
							SecRally[i]=C[i];
						}//End of Raise to SecRally
				}// End of Raise Above Current State React
			}
		}//End of Price Move Up
		else //of(C[i]>C[i-1]) 
		{//Price Move Dn
			if((InDnTrend[i] AND C[i]<DnTrendPP[i]) OR
				(InUpTrend[i] AND C[i]< UpTrend[i]/(1+2*ThresholdPct[i])) )
			{//Drop to DnTrend
				StateNo[i]=6;//Dn Trend - 6666666666666666666666666666666666666666		
				InDnTrend[i]=True;	
				InUpTrend[i]=False;
				DnTrend[i]=C[i];
			}// End of Drop to DnTrend			
			else
			{
				if(C[i]<NatReact[i])
				{//Raise Above NatReact 				
					StateNo[i]=5;//NatReact - 5555555555555555555555555555555555555
					NatReact[i]=C[i];
				}//Raise Above NatReact 
				else
				{//Remain at SecReact
					if(C[i]<SecReact[i])
					{//Lower SecReact
						SecReact[i]=C[i];
					}//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[i]>C[i-1])
		{//Price Move Up
			if(	(InUpTrend[i] AND C[i]>UpTrendPP[i]) OR
				(InDnTrend[i] AND C[i]> DnTrend[i]*(1+2*ThresholdPct[i])) )
			{//Price move to UpTrend - 1111111111111111111111111111111111111111111
				StateNo[i]=1;
				InUpTrend[i]=True;
				InDnTrend[i]=False;
				UpTrend[i]=C[i];
				NatReactPP[i]=NatReact[i];
			}//End of Price Move to UpTrend
			else
			{
				if(C[i]>(NatReact[i]*(1+ThresholdPct[i])))
				{//Raise Above Current State React 
					if(NatRallyReset[i] OR C[i]>NatRally[i])
						{
							StateNo[i]=2;//Move to NatRally - 2222222222222222222222
							NatRallyReset[i]=False;
							NatRally[i]=C[i];
							NatReactPP[i]=NatReact[i];
						}
					else
						{//Raise to SeconaryRally
							StateNo[i]=3;//Raise to SecRally - 333333333333333333333
							SecRally[i]=C[i];
							NatReactPP[i]=NatReact[i];
						}//End of Raise to SecRally
				}// End of Raise Above Current State React
			}
		}//End of Price Move Up
		else //of(C[i]>C[i-1]) - Common with State 1
		{//Price Move Dn
			if((InDnTrend[i] AND C[i]<DnTrendPP[i]) OR
				(InUpTrend[i] AND C[i]< UpTrend[i]/(1+2*ThresholdPct[i])) )
			{//Drop to DnTrend
				StateNo[i]=6;//Dn Trend - 6666666666666666666666666666666666666666		
				InDnTrend[i]=True;	
				InUpTrend[i]=False;
				DnTrend[i]=C[i];
			}// End of Drop to DnTrend			
			else
			{
				if(C[i]<NatReact[i])
				{//Raise Above NatReact 				
					StateNo[i]=5;//NatReact - 5555555555555555555555555555555555555
					NatReact[i]=C[i];
				}//Raise Above NatReact 
			}
		}//End of Price Move Dn
	}//End of NatReact Routine
//------------------------------------------------------------------------------
//666666666666666666666666666666666666666666666666666666666666666666666666666666
//------------------------------------------------------------------------------
	//State No 6: In Dn Trend Column
	else if(StateNo[i-1]==6)//
	// Must be in State No 6
	{//DnTrend Routine
		if(C[i]>C[i-1])
		{//Price Move Up
			if(	(InUpTrend[i] AND C[i]>UpTrendPP[i]) OR
				(InDnTrend[i] AND C[i]> DnTrend[i]*(1+2*ThresholdPct[i])) )
			{//Price move to UpTrend - 1111111111111111111111111111111111111111111
				StateNo[i]=1;
				InUpTrend[i]=True;
				InDnTrend[i]=False;
				UpTrend[i]=C[i];
				DnTrendPP[i]=DnTrend[i];
			}//End of Price Move to UpTrend
			else
			{
				if(C[i]>(DnTrend[i]*(1+ThresholdPct[i])))
				{//Raise Above Current State React 
					if(NatRallyReset[i] OR C[i]>NatRally[i])
						{
							StateNo[i]=2;//Move to NatRally - 2222222222222222222222
							NatRallyReset[i]=False;
							NatRally[i]=C[i];
							DnTrendPP[i]=DnTrend[i];
						}
					else
						{//Raise to SeconaryRally
							StateNo[i]=3;//Raise to SecRally - 333333333333333333333
							SecRally[i]=C[i];
							DnTrendPP[i]=DnTrend[i];
						}//End of Raise to SecRally
				}// End of Raise Above Current State React
			}
		}//End of Price Move Up
		else //of(C[i]>C[i-1]) - Common with State 1
		{//Price Move Dn
			if(C[i]<DnTrend[i])
			{//Price move futher Dn
				StateNo[i]=6;//Dn Trend - 6666666666666666666666666666666666666666		
				InDnTrend[i]=True;	
				InUpTrend[i]=False;
				DnTrend[i]=C[i];
			}//End of Price move Futher Dn			
		}//End of Price Move Dn
	}//End of DnTrend Routine

//------------------------------------------------------------------------------

	//Checking and Processing Parameters here... 
	//Reset Value of Rally and React Values if needed
	
	// React Values become Obseleted Price moved to high up. Reset them.
   if(InUpTrend[i] AND NatReact[i] < UpTrend[i]/(1+2*ThresholdPct[i]) )
	{
		NatReactReset[i]=True;
	}
	// Rally Values become Obaseleted as Price move to low Dn. Reset them
	if(InDnTrend[i] AND NatRally[i] > DnTrend[i]*(1+2*ThresholdPct[i]) )   
	{
		NatRallyReset[i]=True;
	}

  }  //end; //{main}
} //End of For i Loop!

//Plotting Section - Just for testing

//InUpTrend
WeightNo= IIf(StateNo==1,5,                // UpTrend
			IIf(InUpTrend AND StateNo==5,1,  // and NatReact
			IIf(InUpTrend AND StateNo==2,4,  // and NatRally
			IIf(InUpTrend AND StateNo==4,2,  // and SecReact
			IIf(InUpTrend AND StateNo==3,3,  // and SecRally
			IIf(StateNo==6,-5,               // DownTrend
			IIf(InDnTrend AND StateNo==2,-1, // and NatRally         
			IIf(InDnTrend AND StateNo==5,-4, // and NatReact
			IIf(InDnTrend AND StateNo==3,-2, // and SecRally
			                             -3  // and SecReact
			)))))))));

Plot(WeightNo,"Livermore Secret Market Key Stage Diagram",IIf(WeightNo>0 AND
WeightNo==5,colorGreen,
                         IIf(WeightNo>0,colorBlue,
							 IIf(WeightNo<0 AND WeightNo==-5,colorRed,colorPink))),styleStaircase);
Plot(0,"",colorBlack,styleNoLabel);

//End of Livermore Market Key Section
_SECTION_END();
Back