Point and figure chart analysis...!

linkon7

Well-Known Member
#1
PNF is a new toy for me. It has certain simplicity attached to it that amazes me as decision making during trading hours is made relatively simple. This thread is started with the objective of discussing the pnf chart.

I am no expert on pnf and most of my post will be just my views of something that i am learning myself. So feel free to butt in and correct me where ever i go astray. Its something new for me and i hope others find it just as fascinating.

All my charts will be based on nifty futures as that's the only scrip i track.
 

linkon7

Well-Known Member
#2
Point & Figure charts consist of columns of X's and O's that represent filtered price movements. X-Columns represent rising prices and O-Columns represent falling prices. Each price box represents a specific value that price must reach to warrant an X or an O. Time is not a factor in P&F charting. These charts evolve as prices move. No movement in price means no change in the P&F chart. In classic 3-box reversal charts, column reversals are further filtered requiring a 3-box minimum to reverse the current column. The 3-box Reversal Method is the most popular P&F charting method.

P&F charts provide a unique look at price action that has several advantages. P&F charts:

Filter insignificant price movements and noise
Focus on important price movements
Remove the time aspect from the analysis process
Make support/resistance levels much easier to identify
Provide automatic and subjective trendlines


source : stockchart.com
 
Last edited:

linkon7

Well-Known Member
#3
There are two pricing methods available: the High-Low Method and the Close Method. Each method only uses one price point. Obviously, the Close Method uses the closing price only. The High-Low Method uses the high or the low, but not both. Sometimes both are ignored. Here are the rules for the High-Low method.

When the current column is an X-Column (rising):

Use the high when another X can be drawn and then ignore the low.
Use the low when another X cannot be drawn and the low triggers a 3-box reversal.
Ignore both when the high does not warrant another X and the low does not trigger a 3-box reversal.

When the current column is an O-Column (falling):

Use the low when another O can be drawn and then ignore the high.
Use the high when another O cannot be drawn and the high triggers a 3-box reversal.
Ignore both when the low does not warrant another O and the high does not trigger a 3-box reversal.

A P&F Box does not represent a single price, but rather a price range that depends on the current column. This range rises for a rising X-Column and falls for a falling O-Column.

For a rising X-Column, a box marked with a 5680 would range from 12 to 12.99 and a box with a 13 would range from 13 to 13.99. Prices would remain in the 12 box as long as they ranged from 12 to 12.99. A move to 13 would warrant another X in the 13 box. In fact, a print anywhere between 13 and 13.99 would warrant another X.

It works a little different when the current column is a falling O-Column. A move to 12 would warrant an O in the 12 box. This O would remain as long as prices range from 11.01 to 12. Notice that this range is different from the range for a rising X-Column. A print of 11 would then warrant an O in the 11 box. Anything between 10.01 and 11 would warrant an O in the 11 box.
Construction Details

To fully understand P&F chart dynamics, it is helpful to walk through the construction process with a few simple examples. The key points to remember are:

X-Columns represent rising prices (demand)
O-Column represent falling prices (supply)
Columns can contain X's or Os - not both
Change requires a move equal to or greater than the reversal distance
 
Last edited:

linkon7

Well-Known Member
#4
AFL for PNF charting

Code:
_SECTION_BEGIN("PNF box2");
// formula written by Jeevan Lal
_SECTION_BEGIN 
("P&F Daily");
//AFL P&F Chart for Amibroker Indicator window. Based on High/low prices.
//Based on code in AB help files
//Reverse is 2 boxes.
//Graham Kavanagh 30 Sep 2003
Version
(4.40);
SetBarsRequired
(100000, 100000);
//Size for P&F boxes
Bx = Param("box size",2,1,20,1);
boxsize=bx;//IIf(C>=0.01 AND C<29, 0.10,IIf(C>29 AND C<60, 0.15,IIf(C>60 AND C<140, 0.20,IIf(C>140 AND C<290, 0.50,IIf(C>290 AND C<600, 1.00,IIf(C>600 AND C<1400, 2.00,IIf(C>1400 AND C<2900, 3.00,IIf(C>2900 AND C<6000, 5.00,5.00))))))));
Box =
LastValue(boxsize);
HX =
round((H/box)*10)/10;
LX =
round((L/box)*10)/10;
RH =
floor(HX);
FL =
ceil(LX);
Plot(H,"high",colorWhite,styleNoLine);
Plot(L,"Low",colorWhite,styleNoLine);


// initialize first element
j =
0;
Reverse =
2; // reversal requirement
PFC[j] = FL[
0];
PFO[j] = PFC[j] +
1;
down =
1; // By default the first bar is a down bar.
up =
0;
swap =
0;
// perform the loop that produces PF Chart
for
( i = 1; i < BarCount; i++ )
{
if( FL[i] <= PFC[j]-1 && down) //continue down
{
PFC[j] = FL[i];
PFO[j] = PFC[j] +
1;
}
else
{
if( RH[i] >= PFC[j] + Reverse && down) //Change direction to up
{
j++;
swap =
1;
PFC[j] = RH[i];
PFO[j] = PFC[j]-
1;
}
}
if( RH[i] >= PFC[j] + 1 && up) //Continue up
{
PFC[j] = RH[i];
PFO[j] = PFC[j] -
1;
}
else
{
if( FL[i] <= PFC[j] - Reverse && up) //Change direction to down
{
j++;
PFC[j] = FL[i];
PFO[j] = PFC[j] +
1;
swap =
1;
}
}
if( swap )
{
swap =
0;
if( up )
{
up =
0;
down =
1;
}
else
{
up =
1;
down =
0;
}
}
}
delta = BarCount - j-
1;

PFO =
Ref( PFO, -delta );
PFC =
Ref( PFC, -delta );
// High-Low range sets the height of the P&F bar
H
= IIf(Ref(PFC, -1)>Ref(PFO, -1), Ref(HHV(PFC, 1), -1)-1, Max(PFO, PFC))*Box;
L
= IIf(Ref(PFC, -1)<Ref(PFO, -1), Ref(LLV(PFC, 1), -1)+1, Min(PFO, PFC))*Box;
O
= IIf(Ref(PFC, -1)>Ref(PFO, -1), Ref(HHV(PFC, 1), -1)-1, IIf(Ref(PFC, -1)<Ref(PFO, -1), Ref(LLV(PFC, 1), -1)+1, PFO))*Box;
// the difference between Open AND Close should be set to box size
// the sign decides if X or O are plotted
C
= O + Box * IIf( PFC > PFO, 1, -1);
GraphXSpace
= 2;
Plot
( C, "Box", IIf( PFC > PFO, colorCustom9, colorRed ), styleCandle+styleNoLabel+stylePointAndFigure);


_SECTION_END
();




_SECTION_BEGIN
( "Point & Figure w Values adj" );
GraphXSpace
= 5;
SetChartBkColor
( ParamColor( "BackGroundColor", colorBlack) );
//GraphColor = ParamColor("GarphColor", colorLightGrey);
GridColor =
ParamColor( "GridColor", colorLightGrey );
Scaling =
ParamList( "Scaling Method", "Traditional|Percentage|AVG True
Range
" );
if
( scaling == "Traditional" )
Box =
Param( "Box", 1, 0.2, 10, 0.1 );
else
if ( scaling == "Percentage" )
Box =
Param( "Box ", 1, 0.2, 10, 0.1 ) / 100 * LastValue( C );
else
if ( scaling == "AVG True Range" )
Box =
Param( "Box", 1, 0.3, 5, 0.1 ) * LastValue( ATR ( 20 ) );
shiftChart =
0;
shiftLastClose =
1;
shiftGrid =
7;
shiftPriceAxis =
2;
Reverse =
Param( "Reverse", 3, 1, 5 );
j =
0;
PFL[
0] = Box * ceil( Low[0] / Box ) + Box;
PFH[
0] = Box * floor( High[0] / Box );
direction =
0;
for
( i = 1; i < BarCount; i++ )
{
if ( direction[j] == 0 )
{
if ( Low[i] <= PFL[j] - Box )
{
PFL[j] = Box *
ceil( Low[i] / Box );
}
else
{
if ( High[i] >= PFL[j] + Reverse*Box )
{
j++;
direction[j] =
1;
PFH[j] = Box *
floor( High[i] / Box );
PFL[j] = PFL[j -
1] + Box;
}
}
}
else
{
if ( High[i] >= PFH[j] + Box )
{
PFH[j] = Box *
floor( High[i] / Box );
}
else
{
if ( Low[i] <= PFH[j] - Reverse * Box )
{
j++;
direction[j] =
0;
PFH[j] = PFH[j -
1] - Box;
PFL[j] = Box *
ceil( Low[i] / Box );
}
}
}
}
// end for loop
delta = BarCount - j -
1;
direction =
Ref( direction, - delta );
Hi =
Ref( PFH, -delta ) + Box / 2;
Lo =
Ref( PFL, -delta ) - Box / 2;
Cl =
IIf( direction == 1, Hi, Lo );
Op =
IIf( direction == 1, Cl - Box, Cl + Box );
Graphcolor =
IIf( direction == 1, ParamColor( "X_Color", colorBrightGreen ),
ParamColor
( "O_Color", colorDarkRed ) );
PlotOHLC
( Op, Hi, Lo, Cl, "", GraphColor, stylePointAndFigure | styleNoLabel, 0, 0, shiftChart );
PlotOHLC
( Op, Hi, Lo, Cl, "", GraphColor, stylePointAndFigure | styleNoLabel, 0, 0, shiftChart );
Last =
Ref( LastValue( C ), -( BarCount - 1 ) );
Plot
( Last, "", colorDarkRed, styleNoLine | styleDots, 0, 0, shiftLastClose );
// selected value
Value =
IIf( direction > 0, SelectedValue( Hi ) - box / 2, SelectedValue( Lo ) + box / 2 );

_SECTION_END();
 
Last edited:

linkon7

Well-Known Member
#5
Uptrend – From the Perspective of Supply & Demand and Trader Decisions

An area of support has formed as traders, for whatever reason, have determined that the swing low is good value. New long positions are established and bullish sentiment results in rising prices.

An upwards extension develops due to bullish pressure overcoming bearish pressure. Traders continue making buying decisions and are willing to continue buying at higher prices in order to get into this market, pushing price to new highs.

At some point, short-term longs will take profits and new shorts will be attracted to the market by higher prices. This increase in bearish pressure will overcome the bullish pressure and form a topping pattern; an area of trend resistance forming as a swing high.

The fall below the swing high attracts more bearish order flow, as more longs will take profits (having recognized the swing high resistance) and more shorts are attracted to the market.

The price pullback involves bearish pressure temporarily overcoming the bullish pressure to drive price downwards. Traders are making selling decisions and are willing to continue selling at lower prices in order to get their order filled.

This is not necessarily an indication of a trend reversal. The lower prices that occur as a result of the bearish sentiment are unable to attract sufficient bearish orderflow to break the previous swing low and result in a trend reversal. Rather, these lower prices attract more buying, sufficient to match the bearish orderflow and halt the pullback. Sentiment changes again to bullish as more buying is attracted and as shorts cover their position, recognizing that the downwards price swing is simply a pullback and not a reversal. A new area of trend support forms as a higher swing low.

Bullish sentiment again leads to a rally from this swing low area and the process repeats.

Interestingly, the bullish pressure within an uptrend is not just from new buying decisions. Remember, each transaction involves both a buy and a sell. Price movement is a result of the net trading decisions of all traders, and the urgency with which one side is more desperate to transact than the other side. Much of the bullish pressure within an uptrend comes from shorts (who tried to pick the reversal) exiting out of their losing positions.

Consider the psychology and thought processes of the majority of traders (those who consistently lose). Having failed to catch the uptrend and now seeing rising prices, these traders are consumed by negative thoughts and emotions – regret, anger and ultimately revenge. Knowing a price swing can‟t go on forever they enter short at the first sign of potential stall or resistance, hoping to gain an early entry into the trend reversal. Usually they‟re wrong. Even if they‟re right and have managed to time an entry at or near a swing high, it‟s usually only temporary as the down swing proves to be a pullback within the continuing uptrend rather than a trend reversal. Our emotionally influenced trader is then forced to cover their short position (buy order) as their stops are hit; contributing once again to their net loss situation through another poorly managed losing trade.

A significant portion of the bullish pressure within an uptrend is the losing short exiting their position (via a buy order). In many respects, the uptrend is fueled by the losers on the bearish side.
 
Last edited:

linkon7

Well-Known Member
#6
reserved 6
 

linkon7

Well-Known Member
#7
reserved 7
 

linkon7

Well-Known Member
#8
reserved 8
 

linkon7

Well-Known Member
#9
reserved 9
 

linkon7

Well-Known Member
#10
reserved 10
 

Similar threads