29 July 2011
SUCCESS!!!???
Success demands you stay focused. Going on tilt over losses due to small stop losses, bad timing, having full time job, etc. – are excuses to humans seeking excuses. True professionals understand stalking currency pairs and managing risk management until finding Zero Risk trades that run.
Do you spend quality time sulking over bad trades for an extended period?
History and many in-house surveys suggest students that experience at least three consecutive bad trades begin to seriously doubt their abilities. Reader’s Digest version: They FREAK out and start to revert back to old habits, due to inexperience.
Humans revert back to old habits, a comfort zone when times go bad learning a new craft. I’m amazed at amount of people throwing money around for software searching for easy access to profits. Most never withstand the onslaught of understanding how to deal with losses.
Without learning how to deal with losses, traders will never fully grasp or understand the wins. Risk management is vital to one’s continued success. Embrace losses. Don’t accept them, but embrace losses as part of the journey.
This will be a key to those trading live accounts. Learning to accept losses without fear, self-doubt, regret and knowing your trading plan will produce over the long haul. Another term I use is called the Laws of Probability. My strength is in using numbers where I have the edge in advance.
This brings calm and confidence to seasoned traders.
How can you make the best of a setback?
First, identify what you did right and what you did wrong. Sometimes a trade goes wrong because you were in a bad mood. Perhaps you were stressed out or tried to risk too much money. Perhaps you didn’t prepare far enough in advance for a trade. Maybe your trading approach was inappropriate for current market conditions. You may had a small stop loss and bad timing caused a reversal to take you out before the pair turned around and went in direction you thought.
Things may have not gone your way because you did not trade under optimal conditions. It’s necessary, however, to identify those conditions where you trade at your best and to trade under those conditions
Second, don’t be afraid to identify what you did wrong and admit it. The biggest obstacle to improving your trading approach is to deny you have limitations and to try to cover them up. We usually engage in such deceptions because we believe that we cannot overcome our limitations. If we have the courage to admit what we did wrong, however, we can be more open to change.
Third, it’s vital to be committed to making a change. You must be willing to do whatever it takes to change. Making a change is difficult, and if your heart isn’t it in, you will find a variety of reasons to not change. In the end, you must make the decision to change in order to actually change. You cannot just think, “I would like to change or it would be advantages to change,” but you must think, “I am determined to make a change.”
Finally, you must maintain optimism. You must believe that change is possible and that if you work hard enough, you will achieve the change you desire.
When searching for success as a trader, it’s vital to continue to improve. You must pick yourself up after a setback. When your ego is hurt, you cannot wallow in self-pity. You must get up and fight. Losses are only setbacks if you think of them that way. Rather than see a loss as a tragedy, look at it as a stepping stone on the path to more profitable trading.
Success is a lousy teacher. It seduces smart people into thinking they can’t lose.
–Bill Gates
Do you spend quality time sulking over bad trades for an extended period?
History and many in-house surveys suggest students that experience at least three consecutive bad trades begin to seriously doubt their abilities. Reader’s Digest version: They FREAK out and start to revert back to old habits, due to inexperience.
Humans revert back to old habits, a comfort zone when times go bad learning a new craft. I’m amazed at amount of people throwing money around for software searching for easy access to profits. Most never withstand the onslaught of understanding how to deal with losses.
Without learning how to deal with losses, traders will never fully grasp or understand the wins. Risk management is vital to one’s continued success. Embrace losses. Don’t accept them, but embrace losses as part of the journey.
This will be a key to those trading live accounts. Learning to accept losses without fear, self-doubt, regret and knowing your trading plan will produce over the long haul. Another term I use is called the Laws of Probability. My strength is in using numbers where I have the edge in advance.
This brings calm and confidence to seasoned traders.
How can you make the best of a setback?
First, identify what you did right and what you did wrong. Sometimes a trade goes wrong because you were in a bad mood. Perhaps you were stressed out or tried to risk too much money. Perhaps you didn’t prepare far enough in advance for a trade. Maybe your trading approach was inappropriate for current market conditions. You may had a small stop loss and bad timing caused a reversal to take you out before the pair turned around and went in direction you thought.
Things may have not gone your way because you did not trade under optimal conditions. It’s necessary, however, to identify those conditions where you trade at your best and to trade under those conditions
Second, don’t be afraid to identify what you did wrong and admit it. The biggest obstacle to improving your trading approach is to deny you have limitations and to try to cover them up. We usually engage in such deceptions because we believe that we cannot overcome our limitations. If we have the courage to admit what we did wrong, however, we can be more open to change.
Third, it’s vital to be committed to making a change. You must be willing to do whatever it takes to change. Making a change is difficult, and if your heart isn’t it in, you will find a variety of reasons to not change. In the end, you must make the decision to change in order to actually change. You cannot just think, “I would like to change or it would be advantages to change,” but you must think, “I am determined to make a change.”
Finally, you must maintain optimism. You must believe that change is possible and that if you work hard enough, you will achieve the change you desire.
When searching for success as a trader, it’s vital to continue to improve. You must pick yourself up after a setback. When your ego is hurt, you cannot wallow in self-pity. You must get up and fight. Losses are only setbacks if you think of them that way. Rather than see a loss as a tragedy, look at it as a stepping stone on the path to more profitable trading.
Success is a lousy teacher. It seduces smart people into thinking they can’t lose.
–Bill Gates
28 July 2011
example afl write
_SECTION_BEGIN("AFL Example");
/*
This is an attempt to provide a basic trading system AFL. The system is purely
imaginary
AND NOT provided as one that would make money. This is just to provide a guide
to learners
on the common components of writing AFL.
When you copy/paste ensure the existing continuous lines have not been wrapped.
This wrapping
can create error signals when you try to use the code. Click on the check afl
button in the
editor before trying to apply or scan.
I have used slash-asterisk /* */ /* for my comments to get around the problem
of wrapping,
which could happen if you used double slash //
I hope this helps the beginners in creating AFL code
*/
/*firstly some basics common*/
SetBarsRequired(10000,10000); /* this ensures that the charts include all bars
AND NOT just those on screen */
SetFormulaName("Sample System"); /*name it for backtest report identification
*/
SetTradeDelays( 1, 1, 1, 1 ); /* delay entry/exit by one bar */
SetOption( "initialequity", 100000 ); /* starting capital */
PositionSize = -10; /* trade size will be 10% of available equty */
SetOption( "MaxOpenPositions", 6 ); /* I don't want to comit more than 60% of
Equity at any one time */
SetOption( "PriceBoundChecking", 1 ); /* trade only within the chart bar's
price range */
SetOption( "CommissionMode", 2 ); /* set commissions AND costs as $ per trade
*/
SetOption( "CommissionAmount", 32.95 ); /* commissions AND cost */
SetOption( "UsePrevBarEquityForPosSizing", 1 ); /*set the use of last bars
equity for trade size*/
PositionScore = 100/C; /*Set the order for which stock trades when get mulitple
signals in one bar in backtesting */
//Trade system
/*
Buy when exp mov avg crosses and the high is highest for 50 bars
Sell when exp mov avg crosses back
Cross is first variable moves to above the second variable
*/
LongPer = Param("Long Period", 50, 30, 100, 5 ); /* select periods with
parameter window */
ShortPer = Param("Short Period", 5, 3, 10, 1 );
LongMA = EMA( C, LongPer );
ShortMA = EMA( C, ShortPer );
LastHigh = HHV( H, LongPer );
Buy = Cross( ShortMA, LongMA ) AND H > Ref( LastHigh, -1 );
/* ref,-1 is used for the high to have todays high greater than the previous 50
bar high.
To just use H==LastHigh couold mean a previous high was equal to current
high */
Sell = Cross( LongMA, ShortMA );
/* exrem is one method to remove surplus strade signals*/
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
/* Now for exploration results.
Will restrict results of exploration to when the Buy AND Sell signals occur
You can use Filter=1; to display every bar result */
Filter = Buy OR Sell;
AddTextColumn( FullName(), "Company Name" );
AddColumn( Buy, "Buy", 1 );
AddColumn( Sell, "Sell", 1 );
AddColumn( C, "Close", 1.3 );
AddColumn( H, "High", 1.3 );
AddColumn( LastHigh, "HHV", 1.3 );
AddColumn( LongMA, "Long MA", 1,3 );
AddColumn( ShortMA, "Short MA", 1,3 );
/* Now to show this on a chart */
/* I use WriteVal to limit the values to the wanted number of decimal places,
seeing a value of 5 decimal places can be frustrating.
I have included additional information in the plot title sections to add
some
information to the title block */
GraphXSpace = 10; /* create empty space of 10% top and bottom of chart */
Plot( C, " Close Price", colorGrey50, styleBar );
Plot( LongMA, " EMA(C,"+WriteVal(LongPer,1)+")", colorRed,
styleLine|styleNoRescale );
Plot( ShortMA, " EMA(C,"+WriteVal(ShortPer,1)+")", colorGreen,
styleLine|styleNoRescale );
Plot( Ref(Lasthigh,-1), " HHV(H,"+WriteVal(LongPer,1)+")", colorBlue,
styleNoLine|styleDots|styleNoRescale );
/* styleNoRescale in the plots stops the added plots from compressing the
original bar chart to the middle of the pane */
PlotShapes( shapeUpArrow*Buy, colorGreen, 0, L, -10 );
PlotShapes( shapeDownArrow*Sell, colorRed, 0, H, -10 );
Title = " {{NAME}} {{DATE}} {{INTERVAL}} "+_DEFAULT_NAME()+" Chart values :
{{VALUES}} ";
/* _DEFAULT_NAME() shows the section name or, if not present, the file name
the items in {{}} are short cuts for the title block. It can be done long hand
Title = Name() +" "+ Date() +" "+ "{{INTERVAL}}"+_DEFAULT_NAME()+" Chart values
: " +
" Close Price = " + C +
" EMA(C,"+WriteVal(LongPer,1)+") = "+WriteVal(LongMA,1.3) +
" EMA(C,"+WriteVal(ShortPer,1)+") = "+WriteVal(ShortMA,1.3) +
" HHV(H,"+WriteVal(LongPer,1)+") = "+WriteVal(Ref(LastHigh,-1),1.3) ;
*/
_SECTION_END();
/*
This is an attempt to provide a basic trading system AFL. The system is purely
imaginary
AND NOT provided as one that would make money. This is just to provide a guide
to learners
on the common components of writing AFL.
When you copy/paste ensure the existing continuous lines have not been wrapped.
This wrapping
can create error signals when you try to use the code. Click on the check afl
button in the
editor before trying to apply or scan.
I have used slash-asterisk /* */ /* for my comments to get around the problem
of wrapping,
which could happen if you used double slash //
I hope this helps the beginners in creating AFL code
*/
/*firstly some basics common*/
SetBarsRequired(10000,10000); /* this ensures that the charts include all bars
AND NOT just those on screen */
SetFormulaName("Sample System"); /*name it for backtest report identification
*/
SetTradeDelays( 1, 1, 1, 1 ); /* delay entry/exit by one bar */
SetOption( "initialequity", 100000 ); /* starting capital */
PositionSize = -10; /* trade size will be 10% of available equty */
SetOption( "MaxOpenPositions", 6 ); /* I don't want to comit more than 60% of
Equity at any one time */
SetOption( "PriceBoundChecking", 1 ); /* trade only within the chart bar's
price range */
SetOption( "CommissionMode", 2 ); /* set commissions AND costs as $ per trade
*/
SetOption( "CommissionAmount", 32.95 ); /* commissions AND cost */
SetOption( "UsePrevBarEquityForPosSizing", 1 ); /*set the use of last bars
equity for trade size*/
PositionScore = 100/C; /*Set the order for which stock trades when get mulitple
signals in one bar in backtesting */
//Trade system
/*
Buy when exp mov avg crosses and the high is highest for 50 bars
Sell when exp mov avg crosses back
Cross is first variable moves to above the second variable
*/
LongPer = Param("Long Period", 50, 30, 100, 5 ); /* select periods with
parameter window */
ShortPer = Param("Short Period", 5, 3, 10, 1 );
LongMA = EMA( C, LongPer );
ShortMA = EMA( C, ShortPer );
LastHigh = HHV( H, LongPer );
Buy = Cross( ShortMA, LongMA ) AND H > Ref( LastHigh, -1 );
/* ref,-1 is used for the high to have todays high greater than the previous 50
bar high.
To just use H==LastHigh couold mean a previous high was equal to current
high */
Sell = Cross( LongMA, ShortMA );
/* exrem is one method to remove surplus strade signals*/
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
/* Now for exploration results.
Will restrict results of exploration to when the Buy AND Sell signals occur
You can use Filter=1; to display every bar result */
Filter = Buy OR Sell;
AddTextColumn( FullName(), "Company Name" );
AddColumn( Buy, "Buy", 1 );
AddColumn( Sell, "Sell", 1 );
AddColumn( C, "Close", 1.3 );
AddColumn( H, "High", 1.3 );
AddColumn( LastHigh, "HHV", 1.3 );
AddColumn( LongMA, "Long MA", 1,3 );
AddColumn( ShortMA, "Short MA", 1,3 );
/* Now to show this on a chart */
/* I use WriteVal to limit the values to the wanted number of decimal places,
seeing a value of 5 decimal places can be frustrating.
I have included additional information in the plot title sections to add
some
information to the title block */
GraphXSpace = 10; /* create empty space of 10% top and bottom of chart */
Plot( C, " Close Price", colorGrey50, styleBar );
Plot( LongMA, " EMA(C,"+WriteVal(LongPer,1)+")", colorRed,
styleLine|styleNoRescale );
Plot( ShortMA, " EMA(C,"+WriteVal(ShortPer,1)+")", colorGreen,
styleLine|styleNoRescale );
Plot( Ref(Lasthigh,-1), " HHV(H,"+WriteVal(LongPer,1)+")", colorBlue,
styleNoLine|styleDots|styleNoRescale );
/* styleNoRescale in the plots stops the added plots from compressing the
original bar chart to the middle of the pane */
PlotShapes( shapeUpArrow*Buy, colorGreen, 0, L, -10 );
PlotShapes( shapeDownArrow*Sell, colorRed, 0, H, -10 );
Title = " {{NAME}} {{DATE}} {{INTERVAL}} "+_DEFAULT_NAME()+" Chart values :
{{VALUES}} ";
/* _DEFAULT_NAME() shows the section name or, if not present, the file name
the items in {{}} are short cuts for the title block. It can be done long hand
Title = Name() +" "+ Date() +" "+ "{{INTERVAL}}"+_DEFAULT_NAME()+" Chart values
: " +
" Close Price = " + C +
" EMA(C,"+WriteVal(LongPer,1)+") = "+WriteVal(LongMA,1.3) +
" EMA(C,"+WriteVal(ShortPer,1)+") = "+WriteVal(ShortMA,1.3) +
" HHV(H,"+WriteVal(LongPer,1)+") = "+WriteVal(Ref(LastHigh,-1),1.3) ;
*/
_SECTION_END();
example afl write
_SECTION_BEGIN("AFL Example");
/*
This is an attempt to provide a basic trading system AFL. The system is purely
imaginary
AND NOT provided as one that would make money. This is just to provide a guide
to learners
on the common components of writing AFL.
When you copy/paste ensure the existing continuous lines have not been wrapped.
This wrapping
can create error signals when you try to use the code. Click on the check afl
button in the
editor before trying to apply or scan.
I have used slash-asterisk /* */ /* for my comments to get around the problem
of wrapping,
which could happen if you used double slash //
I hope this helps the beginners in creating AFL code
*/
/*firstly some basics common*/
SetBarsRequired(10000,10000); /* this ensures that the charts include all bars
AND NOT just those on screen */
SetFormulaName("Sample System"); /*name it for backtest report identification
*/
SetTradeDelays( 1, 1, 1, 1 ); /* delay entry/exit by one bar */
SetOption( "initialequity", 100000 ); /* starting capital */
PositionSize = -10; /* trade size will be 10% of available equty */
SetOption( "MaxOpenPositions", 6 ); /* I don't want to comit more than 60% of
Equity at any one time */
SetOption( "PriceBoundChecking", 1 ); /* trade only within the chart bar's
price range */
SetOption( "CommissionMode", 2 ); /* set commissions AND costs as $ per trade
*/
SetOption( "CommissionAmount", 32.95 ); /* commissions AND cost */
SetOption( "UsePrevBarEquityForPosSizing", 1 ); /*set the use of last bars
equity for trade size*/
PositionScore = 100/C; /*Set the order for which stock trades when get mulitple
signals in one bar in backtesting */
//Trade system
/*
Buy when exp mov avg crosses and the high is highest for 50 bars
Sell when exp mov avg crosses back
Cross is first variable moves to above the second variable
*/
LongPer = Param("Long Period", 50, 30, 100, 5 ); /* select periods with
parameter window */
ShortPer = Param("Short Period", 5, 3, 10, 1 );
LongMA = EMA( C, LongPer );
ShortMA = EMA( C, ShortPer );
LastHigh = HHV( H, LongPer );
Buy = Cross( ShortMA, LongMA ) AND H > Ref( LastHigh, -1 );
/* ref,-1 is used for the high to have todays high greater than the previous 50
bar high.
To just use H==LastHigh couold mean a previous high was equal to current
high */
Sell = Cross( LongMA, ShortMA );
/* exrem is one method to remove surplus strade signals*/
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
/* Now for exploration results.
Will restrict results of exploration to when the Buy AND Sell signals occur
You can use Filter=1; to display every bar result */
Filter = Buy OR Sell;
AddTextColumn( FullName(), "Company Name" );
AddColumn( Buy, "Buy", 1 );
AddColumn( Sell, "Sell", 1 );
AddColumn( C, "Close", 1.3 );
AddColumn( H, "High", 1.3 );
AddColumn( LastHigh, "HHV", 1.3 );
AddColumn( LongMA, "Long MA", 1,3 );
AddColumn( ShortMA, "Short MA", 1,3 );
/* Now to show this on a chart */
/* I use WriteVal to limit the values to the wanted number of decimal places,
seeing a value of 5 decimal places can be frustrating.
I have included additional information in the plot title sections to add
some
information to the title block */
GraphXSpace = 10; /* create empty space of 10% top and bottom of chart */
Plot( C, " Close Price", colorGrey50, styleBar );
Plot( LongMA, " EMA(C,"+WriteVal(LongPer,1)+")", colorRed,
styleLine|styleNoRescale );
Plot( ShortMA, " EMA(C,"+WriteVal(ShortPer,1)+")", colorGreen,
styleLine|styleNoRescale );
Plot( Ref(Lasthigh,-1), " HHV(H,"+WriteVal(LongPer,1)+")", colorBlue,
styleNoLine|styleDots|styleNoRescale );
/* styleNoRescale in the plots stops the added plots from compressing the
original bar chart to the middle of the pane */
PlotShapes( shapeUpArrow*Buy, colorGreen, 0, L, -10 );
PlotShapes( shapeDownArrow*Sell, colorRed, 0, H, -10 );
Title = " {{NAME}} {{DATE}} {{INTERVAL}} "+_DEFAULT_NAME()+" Chart values :
{{VALUES}} ";
/* _DEFAULT_NAME() shows the section name or, if not present, the file name
the items in {{}} are short cuts for the title block. It can be done long hand
Title = Name() +" "+ Date() +" "+ "{{INTERVAL}}"+_DEFAULT_NAME()+" Chart values
: " +
" Close Price = " + C +
" EMA(C,"+WriteVal(LongPer,1)+") = "+WriteVal(LongMA,1.3) +
" EMA(C,"+WriteVal(ShortPer,1)+") = "+WriteVal(ShortMA,1.3) +
" HHV(H,"+WriteVal(LongPer,1)+") = "+WriteVal(Ref(LastHigh,-1),1.3) ;
*/
_SECTION_END();
/*
This is an attempt to provide a basic trading system AFL. The system is purely
imaginary
AND NOT provided as one that would make money. This is just to provide a guide
to learners
on the common components of writing AFL.
When you copy/paste ensure the existing continuous lines have not been wrapped.
This wrapping
can create error signals when you try to use the code. Click on the check afl
button in the
editor before trying to apply or scan.
I have used slash-asterisk /* */ /* for my comments to get around the problem
of wrapping,
which could happen if you used double slash //
I hope this helps the beginners in creating AFL code
*/
/*firstly some basics common*/
SetBarsRequired(10000,10000); /* this ensures that the charts include all bars
AND NOT just those on screen */
SetFormulaName("Sample System"); /*name it for backtest report identification
*/
SetTradeDelays( 1, 1, 1, 1 ); /* delay entry/exit by one bar */
SetOption( "initialequity", 100000 ); /* starting capital */
PositionSize = -10; /* trade size will be 10% of available equty */
SetOption( "MaxOpenPositions", 6 ); /* I don't want to comit more than 60% of
Equity at any one time */
SetOption( "PriceBoundChecking", 1 ); /* trade only within the chart bar's
price range */
SetOption( "CommissionMode", 2 ); /* set commissions AND costs as $ per trade
*/
SetOption( "CommissionAmount", 32.95 ); /* commissions AND cost */
SetOption( "UsePrevBarEquityForPosSizing", 1 ); /*set the use of last bars
equity for trade size*/
PositionScore = 100/C; /*Set the order for which stock trades when get mulitple
signals in one bar in backtesting */
//Trade system
/*
Buy when exp mov avg crosses and the high is highest for 50 bars
Sell when exp mov avg crosses back
Cross is first variable moves to above the second variable
*/
LongPer = Param("Long Period", 50, 30, 100, 5 ); /* select periods with
parameter window */
ShortPer = Param("Short Period", 5, 3, 10, 1 );
LongMA = EMA( C, LongPer );
ShortMA = EMA( C, ShortPer );
LastHigh = HHV( H, LongPer );
Buy = Cross( ShortMA, LongMA ) AND H > Ref( LastHigh, -1 );
/* ref,-1 is used for the high to have todays high greater than the previous 50
bar high.
To just use H==LastHigh couold mean a previous high was equal to current
high */
Sell = Cross( LongMA, ShortMA );
/* exrem is one method to remove surplus strade signals*/
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
/* Now for exploration results.
Will restrict results of exploration to when the Buy AND Sell signals occur
You can use Filter=1; to display every bar result */
Filter = Buy OR Sell;
AddTextColumn( FullName(), "Company Name" );
AddColumn( Buy, "Buy", 1 );
AddColumn( Sell, "Sell", 1 );
AddColumn( C, "Close", 1.3 );
AddColumn( H, "High", 1.3 );
AddColumn( LastHigh, "HHV", 1.3 );
AddColumn( LongMA, "Long MA", 1,3 );
AddColumn( ShortMA, "Short MA", 1,3 );
/* Now to show this on a chart */
/* I use WriteVal to limit the values to the wanted number of decimal places,
seeing a value of 5 decimal places can be frustrating.
I have included additional information in the plot title sections to add
some
information to the title block */
GraphXSpace = 10; /* create empty space of 10% top and bottom of chart */
Plot( C, " Close Price", colorGrey50, styleBar );
Plot( LongMA, " EMA(C,"+WriteVal(LongPer,1)+")", colorRed,
styleLine|styleNoRescale );
Plot( ShortMA, " EMA(C,"+WriteVal(ShortPer,1)+")", colorGreen,
styleLine|styleNoRescale );
Plot( Ref(Lasthigh,-1), " HHV(H,"+WriteVal(LongPer,1)+")", colorBlue,
styleNoLine|styleDots|styleNoRescale );
/* styleNoRescale in the plots stops the added plots from compressing the
original bar chart to the middle of the pane */
PlotShapes( shapeUpArrow*Buy, colorGreen, 0, L, -10 );
PlotShapes( shapeDownArrow*Sell, colorRed, 0, H, -10 );
Title = " {{NAME}} {{DATE}} {{INTERVAL}} "+_DEFAULT_NAME()+" Chart values :
{{VALUES}} ";
/* _DEFAULT_NAME() shows the section name or, if not present, the file name
the items in {{}} are short cuts for the title block. It can be done long hand
Title = Name() +" "+ Date() +" "+ "{{INTERVAL}}"+_DEFAULT_NAME()+" Chart values
: " +
" Close Price = " + C +
" EMA(C,"+WriteVal(LongPer,1)+") = "+WriteVal(LongMA,1.3) +
" EMA(C,"+WriteVal(ShortPer,1)+") = "+WriteVal(ShortMA,1.3) +
" HHV(H,"+WriteVal(LongPer,1)+") = "+WriteVal(Ref(LastHigh,-1),1.3) ;
*/
_SECTION_END();
example afl write
_SECTION_BEGIN("AFL Example");
/*
This is an attempt to provide a basic trading system AFL. The system is purely
imaginary
AND NOT provided as one that would make money. This is just to provide a guide
to learners
on the common components of writing AFL.
When you copy/paste ensure the existing continuous lines have not been wrapped.
This wrapping
can create error signals when you try to use the code. Click on the check afl
button in the
editor before trying to apply or scan.
I have used slash-asterisk /* */ /* for my comments to get around the problem
of wrapping,
which could happen if you used double slash //
I hope this helps the beginners in creating AFL code
*/
/*firstly some basics common*/
SetBarsRequired(10000,10000); /* this ensures that the charts include all bars
AND NOT just those on screen */
SetFormulaName("Sample System"); /*name it for backtest report identification
*/
SetTradeDelays( 1, 1, 1, 1 ); /* delay entry/exit by one bar */
SetOption( "initialequity", 100000 ); /* starting capital */
PositionSize = -10; /* trade size will be 10% of available equty */
SetOption( "MaxOpenPositions", 6 ); /* I don't want to comit more than 60% of
Equity at any one time */
SetOption( "PriceBoundChecking", 1 ); /* trade only within the chart bar's
price range */
SetOption( "CommissionMode", 2 ); /* set commissions AND costs as $ per trade
*/
SetOption( "CommissionAmount", 32.95 ); /* commissions AND cost */
SetOption( "UsePrevBarEquityForPosSizing", 1 ); /*set the use of last bars
equity for trade size*/
PositionScore = 100/C; /*Set the order for which stock trades when get mulitple
signals in one bar in backtesting */
//Trade system
/*
Buy when exp mov avg crosses and the high is highest for 50 bars
Sell when exp mov avg crosses back
Cross is first variable moves to above the second variable
*/
LongPer = Param("Long Period", 50, 30, 100, 5 ); /* select periods with
parameter window */
ShortPer = Param("Short Period", 5, 3, 10, 1 );
LongMA = EMA( C, LongPer );
ShortMA = EMA( C, ShortPer );
LastHigh = HHV( H, LongPer );
Buy = Cross( ShortMA, LongMA ) AND H > Ref( LastHigh, -1 );
/* ref,-1 is used for the high to have todays high greater than the previous 50
bar high.
To just use H==LastHigh couold mean a previous high was equal to current
high */
Sell = Cross( LongMA, ShortMA );
/* exrem is one method to remove surplus strade signals*/
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
/* Now for exploration results.
Will restrict results of exploration to when the Buy AND Sell signals occur
You can use Filter=1; to display every bar result */
Filter = Buy OR Sell;
AddTextColumn( FullName(), "Company Name" );
AddColumn( Buy, "Buy", 1 );
AddColumn( Sell, "Sell", 1 );
AddColumn( C, "Close", 1.3 );
AddColumn( H, "High", 1.3 );
AddColumn( LastHigh, "HHV", 1.3 );
AddColumn( LongMA, "Long MA", 1,3 );
AddColumn( ShortMA, "Short MA", 1,3 );
/* Now to show this on a chart */
/* I use WriteVal to limit the values to the wanted number of decimal places,
seeing a value of 5 decimal places can be frustrating.
I have included additional information in the plot title sections to add
some
information to the title block */
GraphXSpace = 10; /* create empty space of 10% top and bottom of chart */
Plot( C, " Close Price", colorGrey50, styleBar );
Plot( LongMA, " EMA(C,"+WriteVal(LongPer,1)+")", colorRed,
styleLine|styleNoRescale );
Plot( ShortMA, " EMA(C,"+WriteVal(ShortPer,1)+")", colorGreen,
styleLine|styleNoRescale );
Plot( Ref(Lasthigh,-1), " HHV(H,"+WriteVal(LongPer,1)+")", colorBlue,
styleNoLine|styleDots|styleNoRescale );
/* styleNoRescale in the plots stops the added plots from compressing the
original bar chart to the middle of the pane */
PlotShapes( shapeUpArrow*Buy, colorGreen, 0, L, -10 );
PlotShapes( shapeDownArrow*Sell, colorRed, 0, H, -10 );
Title = " {{NAME}} {{DATE}} {{INTERVAL}} "+_DEFAULT_NAME()+" Chart values :
{{VALUES}} ";
/* _DEFAULT_NAME() shows the section name or, if not present, the file name
the items in {{}} are short cuts for the title block. It can be done long hand
Title = Name() +" "+ Date() +" "+ "{{INTERVAL}}"+_DEFAULT_NAME()+" Chart values
: " +
" Close Price = " + C +
" EMA(C,"+WriteVal(LongPer,1)+") = "+WriteVal(LongMA,1.3) +
" EMA(C,"+WriteVal(ShortPer,1)+") = "+WriteVal(ShortMA,1.3) +
" HHV(H,"+WriteVal(LongPer,1)+") = "+WriteVal(Ref(LastHigh,-1),1.3) ;
*/
_SECTION_END();
/*
This is an attempt to provide a basic trading system AFL. The system is purely
imaginary
AND NOT provided as one that would make money. This is just to provide a guide
to learners
on the common components of writing AFL.
When you copy/paste ensure the existing continuous lines have not been wrapped.
This wrapping
can create error signals when you try to use the code. Click on the check afl
button in the
editor before trying to apply or scan.
I have used slash-asterisk /* */ /* for my comments to get around the problem
of wrapping,
which could happen if you used double slash //
I hope this helps the beginners in creating AFL code
*/
/*firstly some basics common*/
SetBarsRequired(10000,10000); /* this ensures that the charts include all bars
AND NOT just those on screen */
SetFormulaName("Sample System"); /*name it for backtest report identification
*/
SetTradeDelays( 1, 1, 1, 1 ); /* delay entry/exit by one bar */
SetOption( "initialequity", 100000 ); /* starting capital */
PositionSize = -10; /* trade size will be 10% of available equty */
SetOption( "MaxOpenPositions", 6 ); /* I don't want to comit more than 60% of
Equity at any one time */
SetOption( "PriceBoundChecking", 1 ); /* trade only within the chart bar's
price range */
SetOption( "CommissionMode", 2 ); /* set commissions AND costs as $ per trade
*/
SetOption( "CommissionAmount", 32.95 ); /* commissions AND cost */
SetOption( "UsePrevBarEquityForPosSizing", 1 ); /*set the use of last bars
equity for trade size*/
PositionScore = 100/C; /*Set the order for which stock trades when get mulitple
signals in one bar in backtesting */
//Trade system
/*
Buy when exp mov avg crosses and the high is highest for 50 bars
Sell when exp mov avg crosses back
Cross is first variable moves to above the second variable
*/
LongPer = Param("Long Period", 50, 30, 100, 5 ); /* select periods with
parameter window */
ShortPer = Param("Short Period", 5, 3, 10, 1 );
LongMA = EMA( C, LongPer );
ShortMA = EMA( C, ShortPer );
LastHigh = HHV( H, LongPer );
Buy = Cross( ShortMA, LongMA ) AND H > Ref( LastHigh, -1 );
/* ref,-1 is used for the high to have todays high greater than the previous 50
bar high.
To just use H==LastHigh couold mean a previous high was equal to current
high */
Sell = Cross( LongMA, ShortMA );
/* exrem is one method to remove surplus strade signals*/
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
/* Now for exploration results.
Will restrict results of exploration to when the Buy AND Sell signals occur
You can use Filter=1; to display every bar result */
Filter = Buy OR Sell;
AddTextColumn( FullName(), "Company Name" );
AddColumn( Buy, "Buy", 1 );
AddColumn( Sell, "Sell", 1 );
AddColumn( C, "Close", 1.3 );
AddColumn( H, "High", 1.3 );
AddColumn( LastHigh, "HHV", 1.3 );
AddColumn( LongMA, "Long MA", 1,3 );
AddColumn( ShortMA, "Short MA", 1,3 );
/* Now to show this on a chart */
/* I use WriteVal to limit the values to the wanted number of decimal places,
seeing a value of 5 decimal places can be frustrating.
I have included additional information in the plot title sections to add
some
information to the title block */
GraphXSpace = 10; /* create empty space of 10% top and bottom of chart */
Plot( C, " Close Price", colorGrey50, styleBar );
Plot( LongMA, " EMA(C,"+WriteVal(LongPer,1)+")", colorRed,
styleLine|styleNoRescale );
Plot( ShortMA, " EMA(C,"+WriteVal(ShortPer,1)+")", colorGreen,
styleLine|styleNoRescale );
Plot( Ref(Lasthigh,-1), " HHV(H,"+WriteVal(LongPer,1)+")", colorBlue,
styleNoLine|styleDots|styleNoRescale );
/* styleNoRescale in the plots stops the added plots from compressing the
original bar chart to the middle of the pane */
PlotShapes( shapeUpArrow*Buy, colorGreen, 0, L, -10 );
PlotShapes( shapeDownArrow*Sell, colorRed, 0, H, -10 );
Title = " {{NAME}} {{DATE}} {{INTERVAL}} "+_DEFAULT_NAME()+" Chart values :
{{VALUES}} ";
/* _DEFAULT_NAME() shows the section name or, if not present, the file name
the items in {{}} are short cuts for the title block. It can be done long hand
Title = Name() +" "+ Date() +" "+ "{{INTERVAL}}"+_DEFAULT_NAME()+" Chart values
: " +
" Close Price = " + C +
" EMA(C,"+WriteVal(LongPer,1)+") = "+WriteVal(LongMA,1.3) +
" EMA(C,"+WriteVal(ShortPer,1)+") = "+WriteVal(ShortMA,1.3) +
" HHV(H,"+WriteVal(LongPer,1)+") = "+WriteVal(Ref(LastHigh,-1),1.3) ;
*/
_SECTION_END();
BASIC AFL
The indicator logic is described in the January issue of TASC and sounds intriguing. Without rehashing the details of the indicator calculation, it is very similar to Welles Wilder’s Directional Movement Index Calculation (DMI) except that Wilder’s Directional Movement (largest part of today’s range outside of yesterday’s range) is replaced by calculating the differences between today’s High and yesterday’s Low (positive Vortex Movement) and today’s Low and yesterday’s High (negative Vortex Movement).
Go long when the VI (or Dmi) goes from less than zero to greater than zero.
Go short when the VI (or Dmi) goes from above zero to less than zero.
period = Param("Period", 14, 2 );
VMP = Sum( abs( H - Ref( L, -1 ) ), period );
VMM = Sum( abs( L - Ref( H, -1 ) ), period );
STR = Sum( ATR( 1 ), period );
VIP = VMP / STR;
VIM = VMM / STR;
Plot( VIP, "VI"+period+"+", colorBlue);
Plot( VIM, "VI"+period+"-", colorRed );
SIMPLE TREND
_SECTION_BEGIN("StockManiacs Trendline - www.stockmaniacs.net");
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
THIS SECTION DRAWS TD TREND LINES */
percent = 0.01 * 1; /* Adjust this percent as necessary, */
firstpointL = 2;
firstpointH = 2;
y0=LastValue(Trough(L,percent,firstpointL));
y1=LastValue(Trough(Ref(L,-1),percent,1));
for( i = 1; i < BarCount AND y0 >= y1; i++ )
{
firstpointL++;
y0=LastValue(Trough(L,percent,firstpointL));
}
x0=BarCount - 1 - LastValue(TroughBars(L,percent,firstpointL));
x1=BarCount - 1 - LastValue(TroughBars(Ref(L,-1),percent,1));
LineL = LineArray( x0, y0, x1, y1, 1 );
/*
Plot(C, "C", colorBlack, styleCandle);
*/
Plot( LineL, " Support Trend line", colorGreen,4 +8 );
yt0=LastValue(Peak(H,percent,firstpointH));
yt1=LastValue(Peak(Ref(H,-1),percent,1));
for(i = 1; i < BarCount AND yt0 <= yt1; i++ ) { firstpointH++; yt0=LastValue(Peak(H,percent,firstpointH)); } xt0=BarCount - 1 - LastValue(PeakBars(H,percent,firstpointH)); xt1=BarCount - 1 - LastValue(PeakBars(Ref(H,-1),percent,1)); LineH = LineArray( xt0, yt0, xt1, yt1, 1 ); Plot( LineH, "Resistance Trend line", colorRed,4 + 8 ); /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ _SECTION_END(); _SECTION_BEGIN("Price"); SetChartOptions(0,chartShowArrows|chartShowDates); _N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) )); Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() ); _SECTION_END(); CANDLE PATTERN HAMMER /******************************************************* Candlestick Commentary Load this file into the Commentary Option of the Analysis tab. Green arrows indicate bullish candles. Red arrows indicate bearish candles. Scroll down the commentary for comments. This is a work in progress. Thanks to all on this forum whose code I may have incorporated into this file. Comments are from Steve Nison "Japanese Candlestick Charting Techniques" and the LitWick web site. **********************************************************/ /*Body Colors*/ whiteBody=C>=O;
blackBody=O>C;
/*Body Size*/
smallBodyMaximum=0.0025;//less than 0.25%
LargeBodyMinimum=0.01;//greater than 1.0%
smallBody=(O>=C*(1-smallBodyMaximum) AND whiteBody)
OR (C>=O*(1-smallBodyMaximum) AND blackBody);
largeBody=(C>=O*(1+largeBodyMinimum) AND whiteBody)
OR C<=O*(1-largeBodyMinimum) AND blackBody; mediumBody=NOT LargeBody AND NOT smallBody; identicalBodies=abs(abs(Ref(O,-1)-Ref(C,-1))-abs(O-C)) < abs(O-C)*smallBodyMaximum; realBodySize=abs(O-C); /*Shadows*/ smallUpperShadow=(whiteBody AND H<=C*(1+smallBodyMaximum)) OR (blackBody AND H<=O*(1+smallBodyMaximum)); smallLowerShadow=(whiteBody AND L>=O*(1-smallBodyMaximum))
OR (blackBody AND L>=C*(1-smallBodyMaximum));
largeUpperShadow=(whiteBody AND H>=C*(1+largeBodyMinimum))
OR (blackBody AND H>=O*(1+largeBodyMinimum));
largeLowerShadow=(whiteBody AND L<=O*(1-largeBodyMinimum)) OR (blackBody AND L<=C*(1-largeBodyMinimum)); /*Gaps*/ upGap= IIf(Ref(blackBody,-1)AND whiteBody AND O>Ref(O,-1),1,
IIf(Ref(blackbody,-1) AND blackBody AND C>Ref(O,-1),1,
IIf(Ref(whiteBody,-1) AND whiteBody AND O>Ref(C,-1),1,
IIf(Ref(whiteBody,-1) AND blackBody AND C>Ref(C,-1),1,0))));
downGap=IIf(Ref(blackBody,-1)AND whiteBody AND C2*realBodySize) OR
(whiteBody AND abs(H-C)>2*realBodySize));
Hammer = (((H-L)>3*(O-C)) AND ((C-L)/(0.001+H-L)>0.6) AND ((O-L)/(0.001+H-L)>0.6));
InvertedHammer = (((H-L)>3*(O-C)) AND ((H-C)/(0.001+H-L)>0.6) AND ((H-O)/(0.001+H-L)>0.6));
//Hammer=smallUpperShadow AND NOT doji AND
// ((blackBody AND abs(C-L)>2*realBodySize) OR
// (whiteBody AND abs(L-O)>2*realBodySize));
tweezerTop=abs(H-Ref(H,-1))<=H*0.0025; tweezerBottom=abs(L-Ref(L,-1))<=L*0.0025; engulfing= IIf(blackBody AND Ref(blackbody,-1) AND CRef(O,-1),1,
IIf(blackBody AND Ref(whiteBody,-1) AND O>Ref(C,-1) AND CRef(C,-1) AND ORef(O,-1)AND ORef(L,-1),1,
IIf(blackBody AND Ref(whiteBody,-1) AND C>Ref(L,-1) AND ORef(L,-1),1,
IIf(whiteBody AND Ref(blackBody,-1) AND O>Ref(L,-1) AND
CRef(C,-1),1,
IIf(blackBody AND Ref(whiteBody,-1) AND C>Ref(O,-1) AND ORef(O,-1),1,
IIf(whiteBody AND Ref(blackBody,-1) AND O>Ref(C,-1) AND
C Ref( High , -1 ) OR Ref(x1, -2) AND Close > Ref( High , -2 )OR Ref(x1, -3) AND Close > Ref( High , -3 );
GetreadyBuy1=((NOT Ref(GetreadyBuy,-1)) AND (NOT Ref(GetreadyBuy,-2)));
GetreadyBuy3=GetreadyBuy1 AND GetReadyBuy;
Buy=Ref(GetreadyBuy, -1) AND C>Ref(L,-1);
Buy1=(NOT Ref(Buy,-1));
Buy3=Buy1 AND Buy;
BuyStop=Ref(GetreadyBuy,-1) AND (Ref(L,-1));
x2=InvertedHammerSpecial;
GetreadySell=Ref(x2, -1) AND Close < Ref( Low , -1 ) OR Ref(x2, -2) AND Close < Ref( Low , -2 )OR Ref(x2, -3) AND Close < Ref( Low , -3 ); GetreadySell1=((NOT Ref(GetreadySell,-1)) AND (NOT Ref(GetreadySell,-2))); GetreadySell3=GetreadySell1 AND GetReadySell; Short=Ref(GetreadySell, -1) AND CRef(L,-2);
Sell1=((NOT Ref(Sell,-1)) AND (NOT Ref(Sell,-2)));
Sell2=Sell1 AND Sell;
Cover1=((NOT Ref(Cover,-1)) AND (NOT Ref(Cover,-2)));
Cover2=Cover1 AND Cover;
_SECTION_BEGIN("Title");
if( Status("action") == actionIndicator )
(
Title = EncodeColor(colorYellow)+ "Winston system - 1-hammer, 2-getready, up/down arrow=Enter position, Orange colour short and white colour long, white dot trailing profit exit long and orange dot trailing profit exit short, triangles are pivot markers" + " - " + Name() + " - " + EncodeColor(colorYellow)+ Interval(2) + EncodeColor(colorWhite) +
" - " + Date() +" - "+"\n" +EncodeColor(colorYellow) + "Vol= "+ WriteVal(V)+"\n"+ EncodeColor(colorYellow)+
WriteIf(x1, "1-Hammer Special"+C+" ","")+
WriteIf(GetreadyBuy3, "2-Get Ready to Buy"+C+" ","")+
WriteIf(Buy3, "BUY AT "+C+" ","")+
WriteIf(BuyStop, "BUYSTOP AT"+Ref(L,-2)+" ","")+
WriteIf(Sell2, "Exit Buy at "+C+" ","")+
WriteIf(x2, "1-Inverted Hammer Special"+C+" ","")+
WriteIf(GetreadySell3, "2-Get Ready to Short"+C+" ","")+
WriteIf(Short3, " SHORT AT "+C+" ","")+
WriteIf(ShortStop, "SHORTSTOP AT "+Ref(H,-2)+" ","")+
WriteIf(Cover2, "Exit short at "+C+" ",""));
Plot(C,"Close",colorWhite,64);
PlotShapes(x1*shapeDigit1,colorWhite,0,L);
PlotShapes(GetreadyBuy3*shapeDigit2,colorWhite,0,L);
PlotShapes(Buy3*shapeUpArrow,colorWhite,0,L,Offset=-45);
PlotShapes(Sell2*shapeSmallCircle,colorWhite,0,H,Offset=45);
PlotShapes(x2*shapeDigit1,colorOrange,0,H,Offset=25);
PlotShapes(GetreadySell3*shapeDigit2,colorOrange,0,H,Offset=25);
PlotShapes(Short3*shapeDownArrow,colorOrange,0,H,Offset=-45);
PlotShapes(Cover2*shapeSmallCircle,colorOrange,0,L,Offset=-45);
AlertIf( Ref(GetreadyBuy3, -1), "SOUND C:\\Windows\\Media\\Ringin.wav", "Get Ready To Buy", 2 );
AlertIf( Ref(Buy3, -1), "SOUND C:\\Windows\\Media\\Ringin.wav", "Buy Now", 2 );
AlertIf( Ref(GetreadySell3, -1), "SOUND C:\\Windows\\Media\\Ringin.wav", "Get Ready To Short", 2 );
AlertIf( Ref(Short3, -1), "SOUND C:\\Windows\\Media\\Ringin.wav", "Short Now", 2 );
RSIperiod = 14; // Param("RSI p",3,14,30,1);
Percent = 5; // Param("ZIG %",8,9,15,1);
EMAperiod = 9; //Param("EMA p",4,5,10,1);
HHVperiod = 8; //Param("HHV p",3,5,10,1);
NumLine = 2; //Param("Num Lines",3,1,20,1);
Base = DEMA(RSI(RSIperiod),EMAperiod);
for( i = 1; i <= numline; i++ ) { ResBase = LastValue(Peak(Base,Percent,i)); SupBase = LastValue(Trough(Base,Percent,i)); Plot(ValueWhen( ResBase==Base, HHV(H,HHVperiod) ), "Resist Level", colorDarkRed, styleLine); Plot(ValueWhen( supbase==Base, LLV(L,HHVperiod) ), "Support Level", colorDarkGreen, styleLine); } //Code to automatically identify pivots //********************************** */ // -- what will be our lookback range for the hh and ll? farback=Param("How Far back to go",100,50,5000,10); nBars = Param("Number of bars", 12, 5, 40); // -- Create 0-initialized arrays the size of barcount aHPivs = H - H; aLPivs = L - L; // -- More for future use, not necessary for basic plotting aHPivHighs = H - H; aLPivLows = L - L; aHPivIdxs = H - H; aLPivIdxs = L - L; nHPivs = 0; nLPivs = 0; lastHPIdx = 0; lastLPIdx = 0; lastHPH = 0; lastLPL = 0; curPivBarIdx = 0; // -- looking back from the current bar, how many bars // back were the hhv and llv values of the previous // n bars, etc.? aHHVBars = HHVBars(H, nBars); aLLVBars = LLVBars(L, nBars); aHHV = HHV(H, nBars); aLLV = LLV(L, nBars); // -- Would like to set this up so pivots are calculated back from // last visible bar to make it easy to "go back" and see the pivots // this code would find. However, the first instance of // _Trace output will show a value of 0 aVisBars = Status("barvisible"); nLastVisBar = LastValue(Highest(IIf(aVisBars, BarIndex(), 0))); _TRACE("Last visible bar: " + nLastVisBar); // -- Initialize value of curTrend curBar = (BarCount-1); curTrend = ""; if (aLLVBars[curBar] < aHHVBars[curBar]) { curTrend = "D"; } else { curTrend = "U"; } // -- Loop through bars. Search for // entirely array-based approach // in future version for (i=0; i lastHPIdx) {
// -- Bar and price info for candidate pivot
candIdx = curBar - aHHVBars[curBar];
candPrc = aHHV[curBar];
if (
lastHPH < candPrc AND candIdx > lastLPIdx AND
candIdx < curBar) { // -- OK, we'll add this as a pivot... aHPivs[candIdx] = 1; // ...and then rearrange elements in the // pivot information arrays for (j=0; j candPrc AND
candIdx > lastHPIdx AND
candIdx < curBar) { // -- OK, we'll add this as a pivot... aLPivs[candIdx] = 1; // ...and then rearrange elements in the // pivot information arrays for (j=0; jendR AND medR>startR AND abs(startR-endR)<0.02*(startR+endR) AND dt1LastValue(x)-back;
MaxGraph = 10;
Graph1 = C;
Graph1Style=64;
GraphXSpace=5;
/*H&S Neck Line*/
Aper = medt1-startt1;
bper = endt1-medt1;
La = LastValue(ValueWhen(x==medt1,LLV(L,Aper)));
Lb = LastValue(ValueWhen(x==-1+endt1,LLV(L,bper)));
Fa=L==La AND x>startt1 AND xmedt1 AND xstartt-5,trendlineS,-1e10);Graph3BarColor=5;
//-------------------------------------------------------------------------------------------------
/*Inverted H & S*/
tpR = TroughBars( s12, per, 1 ) == 0;
tendt1 = LastValue(ValueWhen(tpr,x,1));
tmedt1 = LastValue(ValueWhen(tpr,x,2));
tstartt1 = LastValue(ValueWhen(tpr,x,3));
tdt1 = tendt1-tstartt1;
C2 = x==tendt1 OR x==tmedt1 OR x==tstartt1;
tendR = LastValue(ValueWhen( tpR, s12, 1 ) );
tmedR = LastValue(ValueWhen( tpR, s12, 2 ) );
tstartR = LastValue( ValueWhen( tpR, s12, 3 ));
//
Filter2=tmedRLastValue(x)-back;
Graph1BarColor=IIf(C1 AND Filter1,colorWhite,IIf(C2 AND Filter2,10,1));
/*Inverted H&S Neck Line*/
tAper = tmedt1-tstartt1;tbper=tendt1-tmedt1;
Ha = LastValue(ValueWhen(x==tmedt1,HHV(H,tAper)));
Hb = LastValue(ValueWhen(x==-1+tendt1,HHV(H,tbper)));
tFa = H==Ha AND x>tstartt1 AND xtmedt1 AND xRstartt-5,trendlineR,-1e10);Graph4BarColor=10;
Filter = Filter1 OR Filter2;
//
NumColumns= 2;/*Graph2=x==-1+tendt1;*/
Column0 = Filter1;
Column1 = Filter2;
Column0Format=Column1Format=1.0;
Column0Name="H&S";
Column1Name="inv H&S";
//-------------------------------------------------------------------------------------------------
Title = EncodeColor(colorGold)+Name()+" - "+EncodeColor(colorBrightGreen)+FullName()+"\n "+
EncodeColor(colorGold)+StrFormat(" - Open %g, Hi %g, Lo %g, Close %g ",O,H,L,C )+EncodeColor(colorRed)+" - "+Date()+
" - Volume :"+WriteVal(V,1.0);
_SECTION_END();
ELLIOTT FRACTAL
//ELLIOT Fractals
_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleCandle
| ParamStyle("Style") | GetPriceStyle() );
// Paste the code below to your price chart somewhere and green ribbon means both
// both MACD and ADX trending up so if the red ribbon shows up the MACD and the ADX
// are both trending down.
_SECTION_BEGIN("trending ribbon");
uptrend=PDI()>MDI()AND Signal()PDI()AND Signal()>MACD();
Plot( 2, /* defines the height of the ribbon in percent of pane width */"ribbon",
IIf( uptrend, colorGreen, IIf( downtrend, colorRed, 0 )), /* choose color */
styleOwnScale|styleArea|styleNoLabel, -0.5, 100 );
_SECTION_END();
_SECTION_END();
_SECTION_BEGIN("LEMA");
P = ParamField("Price field",-1);
Periods = Param("Periods", 20, 2, 200, 1, 10 );
lema = EMA (Close,Periods)+ EMA((Close-EMA(Close,Periods)),Periods);
Plot( lEMA, _DEFAULT_NAME(), ParamColor( "Color", colorCycle ),
ParamStyle("Style") );
_SECTION_END();
_SECTION_BEGIN("ELLIOTT Fractals");
/*
The basic definition of an 'up' fractal is a bar high that is both higher than the two bars immediately preceding it
and higher than the two bars immediately following it.
The lows of the bars are NOT considered in determining the up fractal progression.
If two bars in the progression have equal highs followed by two consecutive bars with lower highs,
then a total of six bars rather than the usual five bars will make up the progression.
The first High becomes the counting fractal. Reverse for 'down' fractals.
The 5 bar formation works best on Daily or longer time frame charts.For intraday data charts we often use 9 bar, 13 bar and 21 bar formations for fractal counting
*/
Up5BarFractal = Ref(H,-2) < H AND Ref(H,-1) < H AND Ref(H,1) < H AND Ref(H,2) < H; Up6BarFractal = Ref(H,-2) < H AND Ref(H,-1) < H AND (H == Ref(H,1)) AND Ref(H,2) < H AND Ref(H,3) < H; Down5BarFractal = Ref(L,-2) > L AND Ref(L,-1) > L AND Ref(L,1) > L AND Ref(L,2) > L;
Down6BarFractal = Ref(L,-2) > L AND Ref(L,-1) > L AND (L == Ref(L,1)) AND Ref(L,2) > L AND Ref(L,3) > L;
//TODO: More filtering: Show only troughs that are around atrough in trix(9).
PlotShapes( IIf(Down5BarFractal ,shapeSmallUpTriangle,0) ,colorBlack, 0, L,-12);
PlotShapes( IIf(Down6BarFractal ,shapeSmallUpTriangle,0) ,colorBlack, 0, L,-12);
PlotShapes( IIf(Up5BarFractal ,shapeSmallDownTriangle,0) ,colorBlack, 0, H,-12);
PlotShapes( IIf(Up6BarFractal ,shapeSmallDownTriangle,0) ,colorBlack, 0, H,-12);
Up = (Up5BarFractal OR Up6BarFractal);
Down = (Down5BarFractal OR Down6BarFractal);
//Removing false fractals:
DownSignal = Flip(Ref(Up,-1), Ref(Down,-1));
UpSignal = Flip(Ref(Down,-1), Ref(Up,-1));
LastHigh[0] = H[0];
LastLow[0] = L[0];
LastLowIndex = 0;
LastHighIndex = 0;
Valid = 0;
for (i=1; i < BarCount; i++) { LastHigh[i] = LastHigh[i-1]; LastLow[i] = LastLow[i-1]; if (Up[i]) { Valid[i] = True; if (DownSignal[i]) { //Sequence of 2 Up Fractals. Validate only the higher one. Valid[i] = H[i] >= H[LastHighIndex];
Valid[LastHighIndex] = H[LastHighIndex] > H[i];
}
LastHigh[i] = Max(H[i], H[LastHighIndex ]);
LastHighIndex = i;
}
if (Down[i])
{
Valid[i] = True;
if (UpSignal[i])
{
//Sequence of 2 Down Fractals. Validate only the lower one.
Valid[i] = L[i] <= L[LastLowIndex]; Valid[LastLowIndex] = L[LastLowIndex] < L[i]; } LastLow[i] = Min(L[i], L[LastLowIndex]); LastLowIndex = i; } } TrixN = Trix(9); TroughLow = Ref(TrixN, -3) > TrixN AND Ref(TrixN, -2) > TrixN AND Ref(TrixN, -1) > TrixN AND Ref(TrixN, 1) > TrixN AND Ref(TrixN, 2) > TrixN AND Ref(TrixN, 3) > TrixN;
TroughHigh = Ref(TrixN, -3) < TrixN AND Ref(TrixN, -2) < TrixN AND Ref(TrixN, -1) < TrixN AND Ref(TrixN, 1) < TrixN AND Ref(TrixN, 2) < TrixN AND Ref(TrixN, 3) < TrixN; //TroughLow = Ref(TrixN, -2) > TrixN AND Ref(TrixN, -1) > TrixN AND Ref(TrixN, 1) > TrixN AND Ref(TrixN, 2) > TrixN;
//TroughHigh = Ref(TrixN, -2) < TrixN AND Ref(TrixN, -1) < TrixN AND Ref(TrixN, 1) < TrixN AND Ref(TrixN, 2) < TrixN; ZeroValid = Cross(TrixN, 0) OR Cross(0, TrixN) OR Ref(Cross(TrixN, 0),1) OR Ref(Cross(0, TrixN),1); ValidLow = TroughLow OR Ref(TroughLow, 1) OR Ref(TroughLow, 2) OR Ref(TroughLow, 3) OR Ref(TroughLow, 4);// OR Ref(TroughLow, 5)); ValidHigh = TroughHigh OR Ref(TroughHigh, 1) OR Ref(TroughHigh, 2) OR Ref(TroughHigh, 3) OR Ref(TroughHigh, 4);// OR Ref(TroughHigh, 5)); //Plot(LastHigh-10 ,"LastHigh", colorBlue, styleLine); //Plot(LastLow-10 ,"LastLow ", colorRed, styleLine); //Plot(Valid*5 + 10 ,"LastLow ", colorGreen, styleLine | styleThick); //PlotShapes( IIf(Down AND Valid,shapeSmallUpTriangle,0) ,colorGreen, 0, L,-12); //PlotShapes( IIf(Up AND Valid,shapeSmallDownTriangle,0) ,colorRed, 0, H,-12); Maxi = Up AND (ValidHigh OR ZeroValid); Mini = Down AND (ValidLow OR ZeroValid); PlotShapes( IIf(Down AND (ValidLow OR ZeroValid),shapeSmallUpTriangle,0) ,colorBlue, 0, L,-12); PlotShapes( IIf(Up AND (ValidHigh OR ZeroValid),shapeSmallDownTriangle,0) ,colorOrange, 0, H,-12); AlertIf(Down AND (ValidLow OR ZeroValid), "SOUND C:\\Windows\\Media\\Chord.wav", "Audio alert", 2); AlertIf(Up AND (ValidHigh OR ZeroValid), "SOUND C:\\Windows\\Media\\Ding.wav", "Audio alert", 2); //Plot(UpSignal*3+5,"UpSignal", colorBlue, styleLine| styleThick); //Plot(DownSignal*3 ,"DownSignal", colorRed, styleLine| styleThick); /* LastMaxi = 0; LastMini = 0; ElliotLines = 0; State = 0; for (i=1; i < BarCount; i++) { State[i] = State[i-1]; if (Maxi[i]) { State[i] = 1;//down } if (Mini[i]) { State[i] = 2; } } PlotShapes(IIf(State > 0, shapeSmallCircle, 0), IIf(State == 1, colorRed, colorBlue), 0, IIf(State == 1, H, L), -5);
*/
//Line = LineArray( x0, y0, x1, y1, 1 );
//Plot( Line, "Trend line", colorBlue );
/*
Wave B
Usually 50% of Wave A
Should not exceed 75% of Wave A
Wave C
either 1 x Wave A
or 1.62 x Wave A
or 2.62 x Wave A
*/
function CorrectiveRatios(StartPrice, A, B, C, RatioDelta, Delta)
{
ALength = abs(startPrice - A); BLength = abs(A-B);
CLength = abs(B-C);
Ratio1 = BLength / CLength ;
Cond1 = Ration1 >= 0.5 - RatioDelta AND ratio1 <= 0.75 + RatioDelta; Cond2 = abs(Clength - ALength) < Delta OR abs(Clength - 1.62 * ALength) < Delta OR abs(CLength - 2.62 * ALength) < Delta; return Cond1 AND Cond2; } function ImpulseRules(StartPrice, One, Two, Three, Four, Five) { //Wave 2 should be beneath wave 1 start: Cond1 = Two > StartPrice AND Two < One; //Wave 4 - the same: Cond2 = Four > Two AND Four < Three; //Wave 5 should be <= wave 3 Cond3 = abs(Three-Two) >= abs(Five - Four);
//Wave 1 should be smaller than wave five, making wave 3 the biggest:
Cond4 = abs(StartPrice - One) < abs(Five - Four); return Cond1 AND Cond2 AND Cond3 AND Cond4; } _SECTION_END(); //3 Gradient Color _SECTION_BEGIN("3 color gradient"); priceAxesWidth=0; dateAxesHeight=0; TitleHeight=0; pxwidth = Status("pxwidth"); pxheight = Status("pxheight"); chartwidth = pxwidth-priceAxesWidth; chartheight = pxheight-dateAxesHeight; topColor=ParamColor("topColor",ColorRGB(207,254,240) ); centerColor=ParamColor("centerColor", ColorRGB(249,236,164)); botColor=ParamColor("BottomColor", ColorRGB( 253,223,196)); priceAxesColor=ParamColor("priceAxesColor", colorWhite ); dateAxesColor=ParamColor("dateAxesColor", colorWhite); relPos=Param("centerPosition%",50,0,100,1)/100; centerHeight=chartheight*Param("centerHeight%",10,0,100,1)/100; x0=0; y0=Max(TitleHeight,chartheight*relPos-centerHeight/2); x1=chartwidth; y1=Min(chartheight,chartheight*relPos+centerHeight/2); GfxSetBkMode( 1 ); GfxSetOverlayMode(1); GfxGradientRect(0,0,chartwidth,TitleHeight, colorWhite ,colorWhite); GfxGradientRect(chartwidth,0,pxwidth,pxheight, priceAxesColor ,priceAxesColor); GfxGradientRect(0,chartheight,chartwidth,pxheight, dateAxesColor ,dateAxesColor); GfxGradientRect(x0,y0,x1,y1, CenterColor ,CenterColor ); GfxGradientRect(0,TitleHeight,chartwidth, y0,topColor, CenterColor ); GfxGradientRect(0,y1,chartwidth, chartheight, CenterColor ,botColor); _SECTION_END(); BEAST BSA _SECTION_BEGIN("Background_Setting"); SetChartBkGradientFill( ParamColor("BgTop", colorBlack), ParamColor("BgBottom", colorBlack),ParamColor("titleblock",colorDarkTeal )); _SECTION_END(); _SECTION_BEGIN("The_Beast_2"); SetBarsRequired(10000,10000); /* this ensures that the charts include all bars AND NOT just those on screen */ Prd1=Param("ATR Period 1-20",4,1,20,1);//{Default = 4 Because most traders use 5} Prd2=Param("LookBack Period 1-20",7,1,20,1);//{Default = 11 Because most traders use 10} //{Green} {Start Long position when Close>Green}
Green=HHV(LLV(L,Prd1)+ATR(Prd1),Prd2);
//{Red} {Stop loss when CloseGreen ,colorBrightGreen,IIf(C < RED,colorRed,colorWhite));
PlotOHLC( HaOpen, HaHigh, HaLow, HaClose, "", color, styleCandle,styleThick );
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) Vol " +WriteVal( V, 1.0 ) +" {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 )) ));
_SECTION_END();
_SECTION_BEGIN("Trailing_Stop_Short");
stoplossPercentage = Param("Stoploss Percentage", 5, 2, 10);
lookbackPeriod = Param("Lookback period", 10, 5, 30);
Plot(HHV(C,lookbackPeriod) - HHV(C,lookbackPeriod) * (stoplossPercentage / 100), "Trailing stoploss", ParamColor( "Color", colorCycle ),ParamStyle("Style",styleLine|Stylehidden ,maskAll));
_SECTION_END();
_SECTION_BEGIN("Trailing_Stop_Long");
//ATR values can be changed from 1 to 3 multiplications in steps of 0.25
//ATR value or the last low pivot value can be selected. This feature can be overridden from the parameter window. It is recommended to use only ATR Value
//Choice of plots line or just dots from the parameter window is also possible
mf = Param("ATR multiplier",3,1,3,0.25);
ap=Param("ATR Period",10,5,30,1);
Lb=Param("Lookback Period",20,10,40,1);
ps=ParamToggle("Use last low pivot","Use,Dont",1);
//Thick = Param("Thick" , 0.02, 0.01, 0.2, 0.01);
t1=HHV(C,Lb);
t2=(mf*ATR(ap));
t3=Trough(C,2,1);
t4=t1-t2;
t5=Min(t4,t3);
if(ps)
{
t6 = t1-t2;
}
else
{
t6=t5;
}
initial=t6;
stop[ 0 ] = Close[ 0 ];
for( i = 1 ; i < BarCount; i++)
{
if( Close[ i ] > stop[ i - 1])
{
temp = t6[ i ];
if( temp > stop[ i - 1 ] ) stop[ i ] = temp;
else stop[ i ] = stop[ i - 1 ];
}
else
stop[ i ] = initial[ i ];
}
Plot(stop,"ATR Stop",ParamColor( "Color", colorSeaGreen ),ParamStyle("Style",styleLine|Stylehidden,maskAll));
_SECTION_END();
_SECTION_BEGIN("Trailing_Lines");
Plot(LLV(HHV(H,5)-ATR(5),8),"",ParamColor( "Color Line 0", colorDarkGreen ),ParamStyle("Style Line 0",styleLine,maskAll));
Plot(LLV(HHV(H,5)-ATR(5),7),"",ParamColor( "Color Line 1", colorDarkGrey),ParamStyle("styleLine 1",styleLine,maskAll));
Plot(LLV(HHV(H,5)-ATR(5),6),"",ParamColor( "Color Line 2", colorDarkGrey ),ParamStyle("Style Line 2",styleLine,maskAll));
Plot(LLV(HHV(H,5)-ATR(5),5),"",ParamColor( "Color Line 3", colorDarkGrey),ParamStyle("Style Line 3",styleLine,maskAll));
Plot(LLV(HHV(H,5)-ATR(5),4),"",ParamColor( "Color Line 4", colorDarkGrey ),ParamStyle("Style Line 4",styleLine,maskAll));
Plot(LLV(HHV(H,5)-ATR(5),3),"",ParamColor( "Color Line 5", colorDarkYellow ),ParamStyle("Style Line 5",styleLine,maskAll));
_SECTION_END();
/*_SECTION_BEGIN("Stop_loss");
lookbackPeriod = Param("Lookback period", 10, 5, 30);
stoplossPercentage = Param("Stoploss Percentage", 5, 2, 10);
Thick = Param("Thick" , 0.02, 0.01, 0.2, 0.01);
StopLoss=(HHV(C,lookbackPeriod) - HHV(C,lookbackPeriod) * (stoplossPercentage / 100));
function SPlot( Pr, Txt, Co, St )
{
PlotOHLC(Pr, Pr,Pr+Thick, Pr+Thick, "",Co,styleCloud );
}
SPlot(StopLoss,"" ,ParamColor( "Color", colorCycle ), 2) ;
_SECTION_END();*/
_SECTION_BEGIN("Pivot_Finder");
/* **********************************
Code to automatically identify pivots
********************************** */
// -- what will be our lookback range for the hh and ll?
farback=Param("How Far back to go",100,0,5000,10);
nBars = Param("Number of bars", 12, 5, 40);
GraphXSpace=7;
// -- Create 0-initialized arrays the size of barcount
aHPivs = H - H;
aLPivs = L - L;
// -- More for future use, not necessary for basic plotting
aHPivHighs = H - H;
aLPivLows = L - L;
aHPivIdxs = H - H;
aLPivIdxs = L - L;
nHPivs = 0;
nLPivs = 0;
lastHPIdx = 0;
lastLPIdx = 0;
lastHPH = 0;
lastLPL = 0;
curPivBarIdx = 0;
// -- looking back from the current bar, how many bars
// back were the hhv and llv values of the previous
// n bars, etc.?
aHHVBars = HHVBars(H, nBars);
aLLVBars = LLVBars(L, nBars);
aHHV = HHV(H, nBars);
aLLV = LLV(L, nBars);
// -- Would like to set this up so pivots are calculated back from
// last visible bar to make it easy to "go back" and see the pivots
// this code would find. However, the first instance of
// _Trace output will show a value of 0
aVisBars = Status("barvisible");
nLastVisBar = LastValue(Highest(IIf(aVisBars, BarIndex(), 0)));
_TRACE("Last visible bar: " + nLastVisBar);
// -- Initialize value of curTrend
curBar = (BarCount-1);
curTrend = "";
if (aLLVBars[curBar] < aHHVBars[curBar]) { curTrend = "D"; } else { curTrend = "U"; } // -- Loop through bars. Search for // entirely array-based approach // in future version for (i=0; i lastHPIdx) {
// -- Bar and price info for candidate pivot
candIdx = curBar - aHHVBars[curBar];
candPrc = aHHV[curBar];
if (
lastHPH < candPrc AND candIdx > lastLPIdx AND
candIdx < curBar) { // -- OK, we'll add this as a pivot... aHPivs[candIdx] = 1; // ...and then rearrange elements in the // pivot information arrays for (j=0; j candPrc AND
candIdx > lastHPIdx AND
candIdx < curBar) { // -- OK, we'll add this as a pivot... aLPivs[candIdx] = 1; // ...and then rearrange elements in the // pivot information arrays for (j=0; j M2, colorLime, colorRed);
shape = Buy * shapeUpArrow + Sell * shapeDownArrow ;
PlotShapes( shape, IIf( Buy, colorGreen, colorRed ),0, IIf( Buy, Low, High ) );
dist = 1.5*ATR(20);
for( i = 0; i < BarCount; i++ ) { if( Buy[i] ) PlotText( "Buy\n@" + Close[i], i, Low[i] - dist[i], colorGreen ); if( Sell[i] ) PlotText( "sell\n@" + Close[i], i, Low[i] + dist[i], colorRed ); } Plot( Close, "Close", mycolor, styleNoTitle ); _SECTION_END(); PH PL LINEAR REGRESSION _SECTION_BEGIN(""); SetBarsRequired(350, -0); parmPlotScoreCard = ParamToggle("Plot KPScoreCard", "No|Yes", 1); parmPlotA900AutoStop = ParamToggle("Plot A900/AutoStop", "No|Yes", 0); parmA900Color = ParamColor("A900 Color", colorWhite); parmA900Style = ParamStyle("A900 Style", styleLine, maskAll); parmAutoStopColor = ParamColor("AutoStop Color", colorYellow); parmAutoStopStyle = ParamStyle("AutoStop Style", styleLine, maskAll); parmPPTextColor = ParamColor("PP Text color", colorBlue); parmPPTrndColorUp = ParamColor("PP Trend Up color", ColorRGB(167,224,243) ); parmPPTrndColorDn = ParamColor("PP Trend Dwn color", ColorRGB(255,192,203) ); parmPPTextOffSet = Param("PP OffSet", 0.60, 0.40, 1.5, 0.1); parmTickMultipler = Param("M/W tick allowance", 1, 0, 10, 1); parmA900AutoStopX = ParamToggle("Plot A900/AutoStop Cross", "No|Yes"); parmA900AutoStopColorX = ParamColor("A900/AutoStop Cross Color", colorBlue); ParmSCThreshold = Param("ScoreCard Threshold", 3, 1, 9, 1); parmVoice = ParamToggle("Voice 123 Setups", "No|Yes", 0); parmAlert = ParamToggle("Alert 123 Setups", "No|Yes", 0); parmPivotPop = ParamToggle("PivotPop", "No|Yes", 1); parmBarCancel = Param("Bar Cancel", 7, 1, 20, 1); parmWaterLevelColor = ParamColor("WalterLevel Color", ColorRGB(127,255,212)); parmWaterLevelStyle = ParamStyle("WaterLevel Style", styleLine, maskAll); parmBBPeriod = Param("Bollinger Band Period", 10, 2, 30, 1); parmBBSD = Param("bollinger Band SD", 0.8, 0.2, 3.0); ParmPlotPPIndicators = ParamToggle("Plot Pivot Pop indicators", "No|Yes", 0); parmBBColor = ParamColor("BBands Color", colorWhite); parmBBStyle = ParamStyle("BBands Style", styleLine, maskAll); ParmDebug = ParamToggle("Debug", "No|Yes", 0); _N(PaneName = Name() + Interval(2)+ _SECTION_NAME()); _N(NewBarName = "NewBar" + PaneName); function NewBarP() { PrevDT = StaticVarGet( NewBarName); DT = LastValue(DateTime()); StaticVarSet( NewBarName,DT); return DT != PrevDT; } function MRoundP(Number, Multiple ) { if(Multiple == 0 ) { xMultiple = 0.01; } else { xMultiple = Multiple; } Divided = Number / xMultiple; intDivided = int(Divided); intDivided = intDivided + round(Divided - intDivided); return intDivided * xMultiple; } ObjAB = CreateObject("Broker.Application"); ticker = objAB.Stocks(Name() ); if(ticker.TickSize == 0) { TickValue = 0.01; } else { TickValue = ticker.TickSize; } NewBarSignal = NewBarP(); KPA900 = E_TSKPA900(Close); KPAutoStop = E_TSKPAUTOSTOP(High,Low,Close); Ctmpl = E_TSKPCOLORTMPL(Open,High,Low,Close,Volume); //ScoreCard KPScoreCard = 0; KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd0 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd1 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd2 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd3 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd4 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd5 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd6 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd7 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd8 > 0, 1, -1);
if(parmDebug == 1)
{
// printf("a900: %0.6f% \nAutoStop: %0.6f%\nScoreCard: %0.0f%\n", KPA900, KPAutoStop, KPScoreCard);
}
if(parmPlotScoreCard == 1)
{
//_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g% (%0.4f%) {{VALUES}}", O, H, L, C, SelectedValue( C - Ref(C, -1)) ));
if( ParamToggle("Tooltip shows", "All Values|Only Prices" ) )
{
// ToolTip=StrFormat("Open: %g\nHigh: %g\nLow: %g\nClose: %g (%.2f%%)\nVolume: "+NumToStr( V, 1 ), O, H, L, C, SelectedValue( ROC( C, 1 )));
}
//Color = IIf(KPScoreCard >= parmSCThreshold, colorBlue, IIf(KPScoreCard <= -parmSCThreshold, colorRed, colorYellow) ); //Plot( C, "Close", Color , styleNoTitle | ParamStyle("OHLC Style") | GetPriceStyle() ); } //user want A900/AutoStop plotted if(parmPlotA900AutoStop == 1) { // Plot(KPA900, "A900", parmA900Color, parmA900Style); // Plot(KPAutoStop, "AutoStop", parmAutoStopColor, parmAutoStopStyle); } // find A900/AutoStop cross over/under with ScoreCard confirmation. XOUp = (KPA900 > KPAutoStop) AND (KPScoreCard >= parmSCThreshold); // New Pivot Low
XODn = (KPA900 < KPAutoStop) AND (KPScoreCard <= -parmSCThreshold); // New Pivot High if(parmDebug == 1) { // printf(WriteIf(XOUp, "before= XOUp: True", "before= XOUp: False") + WriteIf(XODn, " XODn: True\n", " XODn: False\n") ); } //remove duplicate signals XOUp = ExRem(XOUp, XODn); XODn = ExRem(XODn, XOUp); if(parmDebug == 1) { // printf(WriteIf(XOUp, "after= XOUp: True", "after= XOUp: False") + WriteIf(XODn, " XODn: True\n", " XODn: False\n") ); } //find the current Pivot Points - PL and PH //remember XOUp = 1 means a PL and XODn =1 means a PH PLBars = IIf(XOUp, LowestSinceBars(XODn, L ,1), 0); //find the bar that produced the Lowest Low PHBars = IIf(XODn, HighestSinceBars(XOUp, H, 1),0); //find the bar that produced the Highest High //PLPrice = IIf(XOUp, Ref(L, -PLBars), 0); //PHPrice = IIf(XODn, Ref(H, -PHBars),0); PLPrice = Ref(L, -PLBars); PHPrice = Ref(H, -PHBars); //keep track of the previous Pivot Points PrevPLBars = Ref(BarsSince(XOUp), -1) +1; PrevPHBars = Ref(BarsSince(XODn), -1) +1; PrevPLPrice = Ref(PLPrice, -prevPLBars); PrevPHPrice = Ref(PHPrice, -PrevPHBars ); PivotsCloseEnough = TickValue * parmTickMultipler; PLDifference = MroundP(PLPrice - PRevPLPrice, ticker.TickSize); PHDifference = MroundP(PHPrice - PrevPHPrice, ticker.TickSize); PPTrend = IIf(XOUp AND (PLDifference > PivotsCloseEnough) AND PrevPHPrice > PrevPLPrice AND PRevPHPrice > PLPrice, 1,
IIf(XOUp AND (PLDifference < - PivotsCloseEnough) AND PRevPHPrice > PrevPLPrice AND PrevPHPrice > PLPrice, -1,
IIf(XODn AND (PHDifference > PivotsCloseEnough) AND PrevPLPrice < PrevPHprice AND PrevPLPrice < PHPrice, 1, IIf(XODn AND (PHDifference < -PivotsCloseEnough) AND PrevPLPrice < PrevPHPrice AND PrevPLPrice < PHPrice, -1, IIf(XOUp AND (abs(PLDifference) <= PivotsCloseEnough) AND PrevPHPrice > PrevPLPrice AND PRevPHPrice > PLPrice, 2,
IIf(XODn AND (abs(PHDifference) <= PivotsCloseEnough) AND PrevPLPrice < PrevPHPrice AND PrevPLPrice < PHPrice, -2, 0)))) )); if(ParmDebug) { //printf("Current PH Bar: %g% /Price: %g%\n", PHBars, PHPrice); //printf("Current PL Bar: %g% /Price: %g%\n", PLBars, PLPrice); //printf("Previous PH Bar: %g% /Price: %g%\n", PrevPHBars, PrevPHPrice); //printf("Previous PL Bar: %g% /Price: %g%\n", PrevPLBars, PrevPLPrice) ; //printf("PP Trend: %g%\n", PPTrend); //printf("PHPrice - PrevPHPrice: %g%\nPLPrice - PrevPLPrice: %g%\nPivotsCloseEnough: %g%", PHDifference, PLDifference, PivotsCloseEnough); } //PLot pivots as text dist = parmPPTextOffSet * ATR(10); //for( i = 0; i < BarCount -1; i++) for( i = 0; i < BarCount ; i++) { if(XOUp[i ] == 1 AND abs(PPTrend[i]) != 2) //cross up -plot the Pivot Low { PlotText("PL", i - PLBars[i], PLPrice[i] - dist[i] , parmPPTextColor, IIf(PPTrend[i] == 1, parmPPTrndColorUp, IIf(PPTrend[i] == -1, parmPPTrndColorDn, colorYellow) )); } if(XODn[i ] == 1 AND abs(PPTrend[i]) != 2) //cross down - plot the pivot high { PlotText("PH", i - PHBars[i], PHPrice[i] + dist[i], parmPPTextColor, IIf(PPTrend[i] == 1, parmPPTrndColorUp, IIf(PPTrend[i] == -1, parmPPTrndColorDn, colorYellow) )); } if(XOUp[i ] == 1 AND (PPTrend[i]) == 2) // the Pivot Low is a W Bottom { PlotText("PW", i - PLBars[i], PLPrice[i] - dist[i] , parmPPTextColor, colorYellow) ; } if(XODn[i ] == 1 AND PPTrend[i] == -2) //cross down - pivot high is a M Top { PlotText("PM", i - PHBars[i], PHPrice[i] + dist[i], parmPPTextColor, colorYellow) ; } } //end For // Plot A900/AutoStop cross over/under if(parmA900AutoStopX == 1) { PlotShapes(IIf(Cross(KPA900, KPAutoStop), shapeUpTriangle, shapeNone),colorYellow, 0, L, -30); PlotShapes(IIf(Cross(KPAutoStop, KPA900), shapeDownTriangle, shapeNone), colorRed, 0, H , -30); } if(parmPivotPop == 1) { //Kp indicators for Pivot Pop dummy = E_TSKPFAST2(Open, High, Low, Close, Volume); KPFast2 = IIf(tskp_fast2val1 > 0, 1, -1);
//calculations
BarsSinceXOUp =BarsSince(XOUp);
BarsSinceXODn = BarsSince(XODn);
UBB = BBandTop(C, parmBBPeriod, parmBBSD);
LBB = BBandBot(C, parmBBPeriod, parmBBSD);
PopFilter = True;
if(parmDebug == 1)
{
//printf("\nFast2: %1.0f% \nUBB: %0.6f%\nLBB: %0.6f%\nC: %g%\n", KPFast2, UBB, LBB, C);
//printf("Bars since Last XOUp: %1.0f%\nBars since last XODn: %1.0f%\n", BarsSinceXOUp, BarsSinceXODn );
//printf("Bars since PPTrnd =1: %1.0f%\nBars since PPTrnd = -1: %1.0f%\n", BarsSince(PPTrend ==1), BarsSince(PPTrend == -1) );
}
PPopUp = (BarsSince(PPTrend >= 1) < BarsSince(PPTrend <= -1)) AND (BarsSince(XOUp) <= parmBarCancel) AND (KPA900 >= KPAutoStop) AND(KPFast2 == 1) AND (KPScoreCard >= 5)
AND PopFilter AND (C > UBB) AND (C > O) ;
PPopUp = IIf( PPopUp AND Sum(PPopUP, BarsSince(XOUp)+1) == 1, True, False ); //keep only the 1st signal
PPopDn = (BarsSince(PPTrend <= -1) < BarsSince(PPTrend >= 1)) AND (BarsSince(XODn) <= parmBarCancel) AND (KPA900 <= KPAutoStop) AND(KPFast2 == -1) AND (KPScoreCard <= -5) AND PopFilter AND (C < LBB) AND (C < O) ; PPopDn = IIf( PPopDn AND Sum(PPopDn, BarsSince(XODn) + 1) == 1, True, False); //keep only the first signal if(parmDebug == 1) { //printf(WriteIf(PPopUp,"PPopUp: True", "PPopUp: False") + WriteIf(PPopDn, " PPopDn: True\n", " PPopDn: False\n") ); //printf("PPopUp sum: %1.0f% \nPPopDn sum: %1.0f%\n", Sum(PPopUP, BarsSince(XOUp)) , Sum(PPopDn, BarsSince(XODn)) ); } // Plots PlotShapes(IIf(PPopUp, shapeHollowUpArrow, shapeNone), colorYellow, 0, L, -25); PlotShapes(IIf(PPopDn, shapeHollowDownArrow, shapeNone), colorRed, 0, H, -25); if(ParmPlotPPIndicators == 1) //plot the Pivot Pop Indicators { //Plot(UBB, "Upper BB", colorYellow, parmBBStyle); //Plot(LBB, "Lower BB", colorRed, parmBBStyle); if(parmPlotA900AutoStop == 1) { // Plot(KPA900, "A900", parmA900Color, parmA900Style); // Plot(KPAutoStop, "AutoStop", parmAutoStopColor, parmAutoStopStyle); } //Plot( 0.5, "Fast2", IIf(tskp_fast2val1 > 0, parmPPTrndColorUp, parmPPTrndColorDn) , styleArea | styleNoLabel | styleOwnScale , 0, 10);
} //endif parmPlotPPIndicators
} // end if parmPivotPop
// Type 1, 2 or 3 setups
// kp indicators
KPWaterlevel = E_TSKPWATERLEVEL(Open,High,Low,Close,Volume);
dummy = E_TSKPMEDIUM(Close);
KPMediumUp = tskp_mediumup;
KPMediumDn = tskp_mediumdown;
KPMediumMA = tskp_mediumma;
KPMedium = KPMediumUp + KPMediumDn;
//calculations
PLBars = IIf(XOUp, LowestSince(XODn, KPMedium ,1), 0); //find the Lowest Low
PHBars = IIf(XODn, HighestSinceBars(XOUp, KPMedium, 1),0); //find the bar that produced the Highest High
PrevPLMedium = Ref(KPMedium, -prevPLBars);
PrevPHMedium = Ref(KPMEdium, -PrevPHBars );
Type1Filter = IIf(PPopUp AND (LowestSince(XODn, KPMedium, 1) > 0 ) AND (HighestSince(XODn, KPMedium, 1) > 0 ), True, IIf(PPopDn AND (HighestSince(XOUp, KPMedium ,1) < 0) AND (LowestSince(XOUp, KPMedium ,1) < 0), True, False)); Type2Filter = IIf(PPopUp AND LowestSince(XODn, KPMedium, 1) < 0 AND KPMedium > 0, True, IIf(PPopDn AND (HighestSince(XOUp, KPMedium ,1) > 0) AND KPMEdium < 0, True, False)); Type3Filter = IIf(PPopUp AND LowestSince(XODn, KPMedium, 1) < 0 AND KPMedium < 0 AND (KPMedium > KPMediumMA), True, IIf(PPopDn AND (HighestSince(XOUp, KPMedium ,1) > 0) AND KPMEdium > 0 AND(KPMedium < KPMediumMA), True, False)); Type1Buy = PPopUp AND ((Close - Open) >= 0) AND (KPScoreCard >= ParmSCThreshold) AND Type1Filter;
Type1Sell = PPopDn AND ((Close - Open) <= 0) AND (KPScoreCard <= -ParmSCThreshold) AND Type1Filter; Type2Buy = PPopUp AND ((Close - Open) >= 0) AND (KPScoreCard >= ParmSCThreshold) AND Type2Filter AND C > KPWaterLevel;
Type2Sell = PPopDn AND ((Close - Open) <= 0) AND (KPScoreCard <= -ParmSCThreshold) AND Type2Filter AND C < KPWaterLevel; Type3Buy = PPopUp AND ((Close - Open) >= 0) AND (KPScoreCard >= ParmSCThreshold) AND Type3Filter AND C > KPWaterLevel;
Type3Sell = PPopDn AND ((Close - Open) <= 0) AND (KPScoreCard <= -ParmSCThreshold) AND Type3Filter AND C < KPWaterLevel; if(parmDebug == 1) { //printf("Type1Filter: %g%\nType2Filter: %g%\nType3Filter: %g%\n", Type1Filter, Type2Filter, Type3Filter); //printf("KPWaterlevel: %g%\n", KPWaterLevel); //printf("KPMedium: %g%\nKPMediumMA: %g%\n", KPMedium, KPMediumMA); //printf("Highest XOUp Medium: %g%\nLowest XOUp Medium: %g%\n", HighestSince(XOUp, KPMedium, 1), LowestSince(XOUp, KPMedium ,1) ); //printf("Highest XODn Medium: %g%\nLowest XODn Medium: %g%\n", HighestSince(XODn, KPMedium, 1), LowestSince(XODn, KPMedium ,1) ); //printf("Prev PH Medium: %g%:Prev PL Medium: %g%\n", PrevPHMedium, PrevPLMedium); //printf("Type1Buy: %g%:Type1Sell: %g%\n", Type1Buy, Type1Sell); //printf("Type2Buy: %g%:Type2Sell: %g%\n", Type2Buy, Type2Sell); //printf("Type3Buy: %g%:Type3Sell: %g%\n", Type3Buy, Type3Sell); } // Plots PlotShapes(IIf(Type1Buy, shapeDigit1 , IIf(Type1Sell, shapeDigit1, shapeNone)), IIf(Type1Buy, colorBlue, IIf(Type1Sell, colorRed, Null)), 0, IIf(Type1Buy, High, IIf(Type1Sell, L, O)), IIf(Type1Buy, 30, IIf(Type1Sell, -30, 0)) ); PlotShapes(IIf(Type2Buy, shapeDigit2 , IIf(Type2Sell, shapeDigit2, shapeNone)), IIf(Type2Buy, colorBlue, IIf(Type2Sell, colorRed, Null)), 0, IIf(Type2Buy, High, IIf(Type2Sell, L, O)), IIf(Type2Buy, 30, IIf(Type2Sell, -30, 0)) ); PlotShapes(IIf(Type3Buy, shapeDigit3 , IIf(Type3Sell, shapeDigit3, shapeNone)), IIf(Type3Buy, colorBlue, IIf(Type3Sell, colorRed, Null)), 0, IIf(Type3Buy, High, IIf(Type3Sell, L, O)), IIf(Type3Buy, 30, IIf(Type3Sell, -30, 0)) ); //Plot(KPWaterLevel, "KPWaterLevel", parmWaterLevelColor, parmWaterLevelStyle); // HMM how to print Medium on a price chart //voice if(parmVoice ==1) { if(NewBarSignal) { if( LastValue(Ref(Type1Buy, -1)) == 1) Say(Interval(2) + " New Type one buy."); if( LastValue(Ref(Type2Buy, -1)) == 1) Say(Interval(2) + " New Type two buy"); if( LastValue(Ref(Type3Buy, -1)) == 1) Say(Interval(2) + " New Type three buy."); if( LastValue(Ref(Type1Sell,-1)) ==1) Say(Interval(2) + " New Type one sell."); if( LastValue(Ref(Type2Sell,-1)) ==1) Say(Interval(2) + " New Type two sell."); if( LastValue(Ref(Type3Sell,-1)) ==1) Say(Interval(2) + " New Type three sell."); } } //alerts if(parmAlert ==1) { AlertIf(NewbarSignal AND Ref(Type1Buy, -1), "", "Type 1 Buy.", 1, 15, 0); AlertIf(NewbarSignal AND Ref(Type2Buy, -1), "", "Type 2 Buy.", 1, 15, 0); AlertIf(NewbarSignal AND Ref(Type3Buy, -1), "", "Type 3 Buy.", 1, 15, 0); AlertIf(NewbarSignal AND Ref(Type1Sell, -1), "", "Type 1 Sell.", 2, 15, 0); AlertIf(NewbarSignal AND Ref(Type2Sell, -1), "", "Type 2 Sell.", 2, 15, 0); AlertIf(NewbarSignal AND Ref(Type3Sell, -1), "", "Type 3 Sell.", 2, 15, 0); } _SECTION_END(); //********************************* //********************************* _SECTION_BEGIN("Chart Settings"); SetChartOptions(0,chartShowArrows|chartShowDates); SetChartBkColor(ParamColor("Outer Panel",colorPaleBlue)); SetChartBkGradientFill(ParamColor("Upper Chart",1),ParamColor("Lower Chart",23)); _SECTION_END(); //================================================Start Chart Configuration============================================================================ _N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) Vol " +WriteVal( V, 1.0 ) +" {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 )) )); Plot( C, "Close", colorBlue, styleCandle, Zorder = 1); //================================================End Chart Configuration=============================================================================== //====================================Start of Linear Regression Code================================================================================== P = ParamField("Price field",-1); Length = 150; Daysback = Param("Period for Liner Regression Line",Length,1,240,1); shift = Param("Look back period",0,0,240,1); //=============================== Math Formula ======================================================================================================== x = Cum(1); lastx = LastValue( x ) - shift; aa = LastValue( Ref(LinRegIntercept( p, Daysback), -shift) ); bb = LastValue( Ref(LinRegSlope( p, Daysback ), -shift) ); y = Aa + bb * ( x - (Lastx - DaysBack +1 ) ); //==================Plot the Linear Regression Line ==================================================================================================== LRColor = ParamColor("LR Color", colorCycle ); LRStyle = ParamStyle("LR Style"); LRLine = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y, Null ); LRStyle = ParamStyle("LR Style"); Angle = Param("Angle", 0.05, 0, 1.5, 0.01);// A slope higher than 0.05 radians will turn green, less than -0.05 will turn red and anything in between will be white. LRLine = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y, Null ); Pi = 3.14159265 * atan(1); // Pi SlopeAngle = atan(bb)*(180/Pi); LineUp = SlopeAngle > Angle;
LineDn = SlopeAngle < - Angle; if(LineUp) { Plot(LRLine, "Lin. Reg. Line Up", IIf(LineUp, colorBrightGreen, colorWhite), LRStyle); } else { Plot(LRLine, "Lin. Reg. Line Down", IIf(LineDn, colorDarkRed, colorWhite), LRStyle); } //========================== Plot 1st SD Channel ====================================================================================================== SDP = Param("Standard Deviation", 1.5, 0, 6, 0.1); SD = SDP/2; width = LastValue( Ref(SD*StDev(p, Daysback),-shift) ); //Set width of inside chanels here. SDU = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y+width , Null ) ; SDL = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y-width , Null ) ; SDColor = ParamColor("SD Color", colorCycle ); SDStyle = ParamStyle("SD Style"); Plot( SDU , "Upper Lin Reg", colorBrown,SDStyle ); //Inside Regression Lines Plot( SDL , "Lower Lin Reg", colorLime,SDStyle ); //Inside Regression Lines //========================== Plot 2d SD Channel ======================================================================================================== SDP2 = Param("2d Standard Deviation", 2.0, 0, 6, 0.1); SD2 = SDP2/2; width2 = LastValue( Ref(SD2*StDev(p, Daysback),-shift) ); //Set width of outside chanels here. SDU2 = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y+width2 , Null ) ; SDL2 = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y-width2 , Null ) ; SDColor2 = ParamColor("2 SD Color", colorCycle ); SDStyle2 = ParamStyle("2 SD Style"); Plot( SDU2 , "Upper Lin Reg", colorRed,SDStyle2 ); //OutSide Regression Lines Plot( SDL2 , "Lower Lin Reg", colorLime,SDStyle2 ); //OutSide Regression Lines Trend = IIf(LRLine > Ref(LRLine,-1),colorGreen,colorRed);//Changes LR line to green if sloping up and red if sloping down.
Plot( LRLine , "LinReg", Trend, LRSTYLE );
PlotOHLC(SDU,SDL2,SDU2,SDL,"",colorYellow,styleNoLabel | styleCloud);
//============================ End Indicator Code ========================================================================================================
_SECTION_BEGIN(" ");
farback=Param("How Far back to go",100,50,5000,10);
nBars = Param("Number of bars", 12, 5, 40);
aHPivs = H - H;
aLPivs = L - L;
// -- More for future use, not necessary for basic plotting
aHPivHighs = H - H;
aLPivLows = L - L;
aHPivIdxs = H - H;
aLPivIdxs = L - L;
nHPivs = 0;
nLPivs = 0;
lastHPIdx = 0;
lastLPIdx = 0;
lastHPH = 0;
lastLPL = 0;
curPivBarIdx = 0;
// -- looking back from the current bar, how many bars
// back were the hhv and llv values of the previous
// n bars, etc.?
aHHVBars = HHVBars(H, nBars);
aLLVBars = LLVBars(L, nBars);
aHHV = HHV(H, nBars);
aLLV = LLV(L, nBars);
// -- Would like to set this up so pivots are calculated back from
// last visible bar to make it easy to "go back" and see the pivots
// this code would find. However, the first instance of
// _Trace output will show a value of 0
aVisBars = Status("barvisible");
nLastVisBar = LastValue(Highest(IIf(aVisBars, BarIndex(), 0)));
_TRACE("Last visible bar: " + nLastVisBar);
// -- Initialize value of curTrend
curBar = (BarCount-1);
curTrend = "";
if (aLLVBars[curBar] < aHHVBars[curBar]) { curTrend = "D"; } else { curTrend = "U"; } // -- Loop through bars. Search for // entirely array-based approach // in future version for (i=0; i lastHPIdx) {
// -- Bar and price info for candidate pivot
candIdx = curBar - aHHVBars[curBar];
candPrc = aHHV[curBar];
if (
lastHPH < candPrc AND candIdx > lastLPIdx AND
candIdx < curBar) { // -- OK, we'll add this as a pivot... aHPivs[candIdx] = 1; // ...and then rearrange elements in the // pivot information arrays for (j=0; j candPrc AND
candIdx > lastHPIdx AND
candIdx < curBar) {
// -- OK, we'll add this as a pivot...
aLPivs[candIdx] = 1;
// ...and then rearrange elements in the
// pivot information arrays
for (j=0; j
aLPivLows[nLPivs-j] = aLPivLows[nLPivs-(j+1)];
aLPivIdxs[nLPivs-j] = aLPivIdxs[nLPivs-(j+1)];
}
aLPivLows[0] = candPrc;
aLPivIdxs[0] = candIdx;
nLPivs++;
}
}
PlotShapes(
IIf(aHPivs==1, shapeDownArrow, shapeNone), colorRed, 0,
High, Offset=-15);
PlotShapes(
IIf(aLPivs==1, shapeUpArrow , shapeNone), colorGreen, 0,
Low, Offset=-15);
AlertIf( aHPivs==1, "SOUND C:\\Windows\\Media\\Ding.wav", "Sell " + C,2,1+2,1);
AlertIf( aLPivs==1, "SOUND C:\\Windows\\Media\\Ding.wav","Buy " + C,1,1+2,1);
_SECTION_END();
_SECTION_BEGIN("");
n=25; Av=12; Av1=16; Av2=2; stp=2;
Var1= TEMA(Close,n);
Var2= TEMA(var1,av);
Var3= (var1-var2)+var1;
Var1= TEMA(var3,av1);
Var4= MA((var1-var2)+var1,av2);
Var5=(Var1-Var2)+Var1;
//Buy=Cover=Cross(Var5,Var4);
//Sell=Short=Cross(Var4,VAR5);
Buy=Cover=Cross(Var5,Ref(Var5,-1));
Sell=Short=Cross(Ref(Var5,-1),VAR5);
Filter =Buy OR Sell;
Plot( Flip( Buy, Sell ), "Trade", 9, styleArea | styleOwnScale, 0, 1 );
_SECTION_END();
Go long when the VI (or Dmi) goes from less than zero to greater than zero.
Go short when the VI (or Dmi) goes from above zero to less than zero.
period = Param("Period", 14, 2 );
VMP = Sum( abs( H - Ref( L, -1 ) ), period );
VMM = Sum( abs( L - Ref( H, -1 ) ), period );
STR = Sum( ATR( 1 ), period );
VIP = VMP / STR;
VIM = VMM / STR;
Plot( VIP, "VI"+period+"+", colorBlue);
Plot( VIM, "VI"+period+"-", colorRed );
SIMPLE TREND
_SECTION_BEGIN("StockManiacs Trendline - www.stockmaniacs.net");
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
THIS SECTION DRAWS TD TREND LINES */
percent = 0.01 * 1; /* Adjust this percent as necessary, */
firstpointL = 2;
firstpointH = 2;
y0=LastValue(Trough(L,percent,firstpointL));
y1=LastValue(Trough(Ref(L,-1),percent,1));
for( i = 1; i < BarCount AND y0 >= y1; i++ )
{
firstpointL++;
y0=LastValue(Trough(L,percent,firstpointL));
}
x0=BarCount - 1 - LastValue(TroughBars(L,percent,firstpointL));
x1=BarCount - 1 - LastValue(TroughBars(Ref(L,-1),percent,1));
LineL = LineArray( x0, y0, x1, y1, 1 );
/*
Plot(C, "C", colorBlack, styleCandle);
*/
Plot( LineL, " Support Trend line", colorGreen,4 +8 );
yt0=LastValue(Peak(H,percent,firstpointH));
yt1=LastValue(Peak(Ref(H,-1),percent,1));
for(i = 1; i < BarCount AND yt0 <= yt1; i++ ) { firstpointH++; yt0=LastValue(Peak(H,percent,firstpointH)); } xt0=BarCount - 1 - LastValue(PeakBars(H,percent,firstpointH)); xt1=BarCount - 1 - LastValue(PeakBars(Ref(H,-1),percent,1)); LineH = LineArray( xt0, yt0, xt1, yt1, 1 ); Plot( LineH, "Resistance Trend line", colorRed,4 + 8 ); /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ _SECTION_END(); _SECTION_BEGIN("Price"); SetChartOptions(0,chartShowArrows|chartShowDates); _N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) )); Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() ); _SECTION_END(); CANDLE PATTERN HAMMER /******************************************************* Candlestick Commentary Load this file into the Commentary Option of the Analysis tab. Green arrows indicate bullish candles. Red arrows indicate bearish candles. Scroll down the commentary for comments. This is a work in progress. Thanks to all on this forum whose code I may have incorporated into this file. Comments are from Steve Nison "Japanese Candlestick Charting Techniques" and the LitWick web site. **********************************************************/ /*Body Colors*/ whiteBody=C>=O;
blackBody=O>C;
/*Body Size*/
smallBodyMaximum=0.0025;//less than 0.25%
LargeBodyMinimum=0.01;//greater than 1.0%
smallBody=(O>=C*(1-smallBodyMaximum) AND whiteBody)
OR (C>=O*(1-smallBodyMaximum) AND blackBody);
largeBody=(C>=O*(1+largeBodyMinimum) AND whiteBody)
OR C<=O*(1-largeBodyMinimum) AND blackBody; mediumBody=NOT LargeBody AND NOT smallBody; identicalBodies=abs(abs(Ref(O,-1)-Ref(C,-1))-abs(O-C)) < abs(O-C)*smallBodyMaximum; realBodySize=abs(O-C); /*Shadows*/ smallUpperShadow=(whiteBody AND H<=C*(1+smallBodyMaximum)) OR (blackBody AND H<=O*(1+smallBodyMaximum)); smallLowerShadow=(whiteBody AND L>=O*(1-smallBodyMaximum))
OR (blackBody AND L>=C*(1-smallBodyMaximum));
largeUpperShadow=(whiteBody AND H>=C*(1+largeBodyMinimum))
OR (blackBody AND H>=O*(1+largeBodyMinimum));
largeLowerShadow=(whiteBody AND L<=O*(1-largeBodyMinimum)) OR (blackBody AND L<=C*(1-largeBodyMinimum)); /*Gaps*/ upGap= IIf(Ref(blackBody,-1)AND whiteBody AND O>Ref(O,-1),1,
IIf(Ref(blackbody,-1) AND blackBody AND C>Ref(O,-1),1,
IIf(Ref(whiteBody,-1) AND whiteBody AND O>Ref(C,-1),1,
IIf(Ref(whiteBody,-1) AND blackBody AND C>Ref(C,-1),1,0))));
downGap=IIf(Ref(blackBody,-1)AND whiteBody AND C2*realBodySize) OR
(whiteBody AND abs(H-C)>2*realBodySize));
Hammer = (((H-L)>3*(O-C)) AND ((C-L)/(0.001+H-L)>0.6) AND ((O-L)/(0.001+H-L)>0.6));
InvertedHammer = (((H-L)>3*(O-C)) AND ((H-C)/(0.001+H-L)>0.6) AND ((H-O)/(0.001+H-L)>0.6));
//Hammer=smallUpperShadow AND NOT doji AND
// ((blackBody AND abs(C-L)>2*realBodySize) OR
// (whiteBody AND abs(L-O)>2*realBodySize));
tweezerTop=abs(H-Ref(H,-1))<=H*0.0025; tweezerBottom=abs(L-Ref(L,-1))<=L*0.0025; engulfing= IIf(blackBody AND Ref(blackbody,-1) AND CRef(O,-1),1,
IIf(blackBody AND Ref(whiteBody,-1) AND O>Ref(C,-1) AND CRef(C,-1) AND ORef(O,-1)AND ORef(L,-1),1,
IIf(blackBody AND Ref(whiteBody,-1) AND C>Ref(L,-1) AND ORef(L,-1),1,
IIf(whiteBody AND Ref(blackBody,-1) AND O>Ref(L,-1) AND
CRef(C,-1),1,
IIf(blackBody AND Ref(whiteBody,-1) AND C>Ref(O,-1) AND ORef(O,-1),1,
IIf(whiteBody AND Ref(blackBody,-1) AND O>Ref(C,-1) AND
C Ref( High , -1 ) OR Ref(x1, -2) AND Close > Ref( High , -2 )OR Ref(x1, -3) AND Close > Ref( High , -3 );
GetreadyBuy1=((NOT Ref(GetreadyBuy,-1)) AND (NOT Ref(GetreadyBuy,-2)));
GetreadyBuy3=GetreadyBuy1 AND GetReadyBuy;
Buy=Ref(GetreadyBuy, -1) AND C>Ref(L,-1);
Buy1=(NOT Ref(Buy,-1));
Buy3=Buy1 AND Buy;
BuyStop=Ref(GetreadyBuy,-1) AND (Ref(L,-1));
x2=InvertedHammerSpecial;
GetreadySell=Ref(x2, -1) AND Close < Ref( Low , -1 ) OR Ref(x2, -2) AND Close < Ref( Low , -2 )OR Ref(x2, -3) AND Close < Ref( Low , -3 ); GetreadySell1=((NOT Ref(GetreadySell,-1)) AND (NOT Ref(GetreadySell,-2))); GetreadySell3=GetreadySell1 AND GetReadySell; Short=Ref(GetreadySell, -1) AND CRef(L,-2);
Sell1=((NOT Ref(Sell,-1)) AND (NOT Ref(Sell,-2)));
Sell2=Sell1 AND Sell;
Cover1=((NOT Ref(Cover,-1)) AND (NOT Ref(Cover,-2)));
Cover2=Cover1 AND Cover;
_SECTION_BEGIN("Title");
if( Status("action") == actionIndicator )
(
Title = EncodeColor(colorYellow)+ "Winston system - 1-hammer, 2-getready, up/down arrow=Enter position, Orange colour short and white colour long, white dot trailing profit exit long and orange dot trailing profit exit short, triangles are pivot markers" + " - " + Name() + " - " + EncodeColor(colorYellow)+ Interval(2) + EncodeColor(colorWhite) +
" - " + Date() +" - "+"\n" +EncodeColor(colorYellow) + "Vol= "+ WriteVal(V)+"\n"+ EncodeColor(colorYellow)+
WriteIf(x1, "1-Hammer Special"+C+" ","")+
WriteIf(GetreadyBuy3, "2-Get Ready to Buy"+C+" ","")+
WriteIf(Buy3, "BUY AT "+C+" ","")+
WriteIf(BuyStop, "BUYSTOP AT"+Ref(L,-2)+" ","")+
WriteIf(Sell2, "Exit Buy at "+C+" ","")+
WriteIf(x2, "1-Inverted Hammer Special"+C+" ","")+
WriteIf(GetreadySell3, "2-Get Ready to Short"+C+" ","")+
WriteIf(Short3, " SHORT AT "+C+" ","")+
WriteIf(ShortStop, "SHORTSTOP AT "+Ref(H,-2)+" ","")+
WriteIf(Cover2, "Exit short at "+C+" ",""));
Plot(C,"Close",colorWhite,64);
PlotShapes(x1*shapeDigit1,colorWhite,0,L);
PlotShapes(GetreadyBuy3*shapeDigit2,colorWhite,0,L);
PlotShapes(Buy3*shapeUpArrow,colorWhite,0,L,Offset=-45);
PlotShapes(Sell2*shapeSmallCircle,colorWhite,0,H,Offset=45);
PlotShapes(x2*shapeDigit1,colorOrange,0,H,Offset=25);
PlotShapes(GetreadySell3*shapeDigit2,colorOrange,0,H,Offset=25);
PlotShapes(Short3*shapeDownArrow,colorOrange,0,H,Offset=-45);
PlotShapes(Cover2*shapeSmallCircle,colorOrange,0,L,Offset=-45);
AlertIf( Ref(GetreadyBuy3, -1), "SOUND C:\\Windows\\Media\\Ringin.wav", "Get Ready To Buy", 2 );
AlertIf( Ref(Buy3, -1), "SOUND C:\\Windows\\Media\\Ringin.wav", "Buy Now", 2 );
AlertIf( Ref(GetreadySell3, -1), "SOUND C:\\Windows\\Media\\Ringin.wav", "Get Ready To Short", 2 );
AlertIf( Ref(Short3, -1), "SOUND C:\\Windows\\Media\\Ringin.wav", "Short Now", 2 );
RSIperiod = 14; // Param("RSI p",3,14,30,1);
Percent = 5; // Param("ZIG %",8,9,15,1);
EMAperiod = 9; //Param("EMA p",4,5,10,1);
HHVperiod = 8; //Param("HHV p",3,5,10,1);
NumLine = 2; //Param("Num Lines",3,1,20,1);
Base = DEMA(RSI(RSIperiod),EMAperiod);
for( i = 1; i <= numline; i++ ) { ResBase = LastValue(Peak(Base,Percent,i)); SupBase = LastValue(Trough(Base,Percent,i)); Plot(ValueWhen( ResBase==Base, HHV(H,HHVperiod) ), "Resist Level", colorDarkRed, styleLine); Plot(ValueWhen( supbase==Base, LLV(L,HHVperiod) ), "Support Level", colorDarkGreen, styleLine); } //Code to automatically identify pivots //********************************** */ // -- what will be our lookback range for the hh and ll? farback=Param("How Far back to go",100,50,5000,10); nBars = Param("Number of bars", 12, 5, 40); // -- Create 0-initialized arrays the size of barcount aHPivs = H - H; aLPivs = L - L; // -- More for future use, not necessary for basic plotting aHPivHighs = H - H; aLPivLows = L - L; aHPivIdxs = H - H; aLPivIdxs = L - L; nHPivs = 0; nLPivs = 0; lastHPIdx = 0; lastLPIdx = 0; lastHPH = 0; lastLPL = 0; curPivBarIdx = 0; // -- looking back from the current bar, how many bars // back were the hhv and llv values of the previous // n bars, etc.? aHHVBars = HHVBars(H, nBars); aLLVBars = LLVBars(L, nBars); aHHV = HHV(H, nBars); aLLV = LLV(L, nBars); // -- Would like to set this up so pivots are calculated back from // last visible bar to make it easy to "go back" and see the pivots // this code would find. However, the first instance of // _Trace output will show a value of 0 aVisBars = Status("barvisible"); nLastVisBar = LastValue(Highest(IIf(aVisBars, BarIndex(), 0))); _TRACE("Last visible bar: " + nLastVisBar); // -- Initialize value of curTrend curBar = (BarCount-1); curTrend = ""; if (aLLVBars[curBar] < aHHVBars[curBar]) { curTrend = "D"; } else { curTrend = "U"; } // -- Loop through bars. Search for // entirely array-based approach // in future version for (i=0; i
// -- Bar and price info for candidate pivot
candIdx = curBar - aHHVBars[curBar];
candPrc = aHHV[curBar];
if (
lastHPH < candPrc AND candIdx > lastLPIdx AND
candIdx < curBar) { // -- OK, we'll add this as a pivot... aHPivs[candIdx] = 1; // ...and then rearrange elements in the // pivot information arrays for (j=0; j
candIdx > lastHPIdx AND
candIdx < curBar) { // -- OK, we'll add this as a pivot... aLPivs[candIdx] = 1; // ...and then rearrange elements in the // pivot information arrays for (j=0; j
MaxGraph = 10;
Graph1 = C;
Graph1Style=64;
GraphXSpace=5;
/*H&S Neck Line*/
Aper = medt1-startt1;
bper = endt1-medt1;
La = LastValue(ValueWhen(x==medt1,LLV(L,Aper)));
Lb = LastValue(ValueWhen(x==-1+endt1,LLV(L,bper)));
Fa=L==La AND x>startt1 AND x
//-------------------------------------------------------------------------------------------------
/*Inverted H & S*/
tpR = TroughBars( s12, per, 1 ) == 0;
tendt1 = LastValue(ValueWhen(tpr,x,1));
tmedt1 = LastValue(ValueWhen(tpr,x,2));
tstartt1 = LastValue(ValueWhen(tpr,x,3));
tdt1 = tendt1-tstartt1;
C2 = x==tendt1 OR x==tmedt1 OR x==tstartt1;
tendR = LastValue(ValueWhen( tpR, s12, 1 ) );
tmedR = LastValue(ValueWhen( tpR, s12, 2 ) );
tstartR = LastValue( ValueWhen( tpR, s12, 3 ));
//
Filter2=tmedR
Graph1BarColor=IIf(C1 AND Filter1,colorWhite,IIf(C2 AND Filter2,10,1));
/*Inverted H&S Neck Line*/
tAper = tmedt1-tstartt1;tbper=tendt1-tmedt1;
Ha = LastValue(ValueWhen(x==tmedt1,HHV(H,tAper)));
Hb = LastValue(ValueWhen(x==-1+tendt1,HHV(H,tbper)));
tFa = H==Ha AND x>tstartt1 AND x
Filter = Filter1 OR Filter2;
//
NumColumns= 2;/*Graph2=x==-1+tendt1;*/
Column0 = Filter1;
Column1 = Filter2;
Column0Format=Column1Format=1.0;
Column0Name="H&S";
Column1Name="inv H&S";
//-------------------------------------------------------------------------------------------------
Title = EncodeColor(colorGold)+Name()+" - "+EncodeColor(colorBrightGreen)+FullName()+"\n "+
EncodeColor(colorGold)+StrFormat(" - Open %g, Hi %g, Lo %g, Close %g ",O,H,L,C )+EncodeColor(colorRed)+" - "+Date()+
" - Volume :"+WriteVal(V,1.0);
_SECTION_END();
ELLIOTT FRACTAL
//ELLIOT Fractals
_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleCandle
| ParamStyle("Style") | GetPriceStyle() );
// Paste the code below to your price chart somewhere and green ribbon means both
// both MACD and ADX trending up so if the red ribbon shows up the MACD and the ADX
// are both trending down.
_SECTION_BEGIN("trending ribbon");
uptrend=PDI()>MDI()AND Signal()
Plot( 2, /* defines the height of the ribbon in percent of pane width */"ribbon",
IIf( uptrend, colorGreen, IIf( downtrend, colorRed, 0 )), /* choose color */
styleOwnScale|styleArea|styleNoLabel, -0.5, 100 );
_SECTION_END();
_SECTION_END();
_SECTION_BEGIN("LEMA");
P = ParamField("Price field",-1);
Periods = Param("Periods", 20, 2, 200, 1, 10 );
lema = EMA (Close,Periods)+ EMA((Close-EMA(Close,Periods)),Periods);
Plot( lEMA, _DEFAULT_NAME(), ParamColor( "Color", colorCycle ),
ParamStyle("Style") );
_SECTION_END();
_SECTION_BEGIN("ELLIOTT Fractals");
/*
The basic definition of an 'up' fractal is a bar high that is both higher than the two bars immediately preceding it
and higher than the two bars immediately following it.
The lows of the bars are NOT considered in determining the up fractal progression.
If two bars in the progression have equal highs followed by two consecutive bars with lower highs,
then a total of six bars rather than the usual five bars will make up the progression.
The first High becomes the counting fractal. Reverse for 'down' fractals.
The 5 bar formation works best on Daily or longer time frame charts.For intraday data charts we often use 9 bar, 13 bar and 21 bar formations for fractal counting
*/
Up5BarFractal = Ref(H,-2) < H AND Ref(H,-1) < H AND Ref(H,1) < H AND Ref(H,2) < H; Up6BarFractal = Ref(H,-2) < H AND Ref(H,-1) < H AND (H == Ref(H,1)) AND Ref(H,2) < H AND Ref(H,3) < H; Down5BarFractal = Ref(L,-2) > L AND Ref(L,-1) > L AND Ref(L,1) > L AND Ref(L,2) > L;
Down6BarFractal = Ref(L,-2) > L AND Ref(L,-1) > L AND (L == Ref(L,1)) AND Ref(L,2) > L AND Ref(L,3) > L;
//TODO: More filtering: Show only troughs that are around atrough in trix(9).
PlotShapes( IIf(Down5BarFractal ,shapeSmallUpTriangle,0) ,colorBlack, 0, L,-12);
PlotShapes( IIf(Down6BarFractal ,shapeSmallUpTriangle,0) ,colorBlack, 0, L,-12);
PlotShapes( IIf(Up5BarFractal ,shapeSmallDownTriangle,0) ,colorBlack, 0, H,-12);
PlotShapes( IIf(Up6BarFractal ,shapeSmallDownTriangle,0) ,colorBlack, 0, H,-12);
Up = (Up5BarFractal OR Up6BarFractal);
Down = (Down5BarFractal OR Down6BarFractal);
//Removing false fractals:
DownSignal = Flip(Ref(Up,-1), Ref(Down,-1));
UpSignal = Flip(Ref(Down,-1), Ref(Up,-1));
LastHigh[0] = H[0];
LastLow[0] = L[0];
LastLowIndex = 0;
LastHighIndex = 0;
Valid = 0;
for (i=1; i < BarCount; i++) { LastHigh[i] = LastHigh[i-1]; LastLow[i] = LastLow[i-1]; if (Up[i]) { Valid[i] = True; if (DownSignal[i]) { //Sequence of 2 Up Fractals. Validate only the higher one. Valid[i] = H[i] >= H[LastHighIndex];
Valid[LastHighIndex] = H[LastHighIndex] > H[i];
}
LastHigh[i] = Max(H[i], H[LastHighIndex ]);
LastHighIndex = i;
}
if (Down[i])
{
Valid[i] = True;
if (UpSignal[i])
{
//Sequence of 2 Down Fractals. Validate only the lower one.
Valid[i] = L[i] <= L[LastLowIndex]; Valid[LastLowIndex] = L[LastLowIndex] < L[i]; } LastLow[i] = Min(L[i], L[LastLowIndex]); LastLowIndex = i; } } TrixN = Trix(9); TroughLow = Ref(TrixN, -3) > TrixN AND Ref(TrixN, -2) > TrixN AND Ref(TrixN, -1) > TrixN AND Ref(TrixN, 1) > TrixN AND Ref(TrixN, 2) > TrixN AND Ref(TrixN, 3) > TrixN;
TroughHigh = Ref(TrixN, -3) < TrixN AND Ref(TrixN, -2) < TrixN AND Ref(TrixN, -1) < TrixN AND Ref(TrixN, 1) < TrixN AND Ref(TrixN, 2) < TrixN AND Ref(TrixN, 3) < TrixN; //TroughLow = Ref(TrixN, -2) > TrixN AND Ref(TrixN, -1) > TrixN AND Ref(TrixN, 1) > TrixN AND Ref(TrixN, 2) > TrixN;
//TroughHigh = Ref(TrixN, -2) < TrixN AND Ref(TrixN, -1) < TrixN AND Ref(TrixN, 1) < TrixN AND Ref(TrixN, 2) < TrixN; ZeroValid = Cross(TrixN, 0) OR Cross(0, TrixN) OR Ref(Cross(TrixN, 0),1) OR Ref(Cross(0, TrixN),1); ValidLow = TroughLow OR Ref(TroughLow, 1) OR Ref(TroughLow, 2) OR Ref(TroughLow, 3) OR Ref(TroughLow, 4);// OR Ref(TroughLow, 5)); ValidHigh = TroughHigh OR Ref(TroughHigh, 1) OR Ref(TroughHigh, 2) OR Ref(TroughHigh, 3) OR Ref(TroughHigh, 4);// OR Ref(TroughHigh, 5)); //Plot(LastHigh-10 ,"LastHigh", colorBlue, styleLine); //Plot(LastLow-10 ,"LastLow ", colorRed, styleLine); //Plot(Valid*5 + 10 ,"LastLow ", colorGreen, styleLine | styleThick); //PlotShapes( IIf(Down AND Valid,shapeSmallUpTriangle,0) ,colorGreen, 0, L,-12); //PlotShapes( IIf(Up AND Valid,shapeSmallDownTriangle,0) ,colorRed, 0, H,-12); Maxi = Up AND (ValidHigh OR ZeroValid); Mini = Down AND (ValidLow OR ZeroValid); PlotShapes( IIf(Down AND (ValidLow OR ZeroValid),shapeSmallUpTriangle,0) ,colorBlue, 0, L,-12); PlotShapes( IIf(Up AND (ValidHigh OR ZeroValid),shapeSmallDownTriangle,0) ,colorOrange, 0, H,-12); AlertIf(Down AND (ValidLow OR ZeroValid), "SOUND C:\\Windows\\Media\\Chord.wav", "Audio alert", 2); AlertIf(Up AND (ValidHigh OR ZeroValid), "SOUND C:\\Windows\\Media\\Ding.wav", "Audio alert", 2); //Plot(UpSignal*3+5,"UpSignal", colorBlue, styleLine| styleThick); //Plot(DownSignal*3 ,"DownSignal", colorRed, styleLine| styleThick); /* LastMaxi = 0; LastMini = 0; ElliotLines = 0; State = 0; for (i=1; i < BarCount; i++) { State[i] = State[i-1]; if (Maxi[i]) { State[i] = 1;//down } if (Mini[i]) { State[i] = 2; } } PlotShapes(IIf(State > 0, shapeSmallCircle, 0), IIf(State == 1, colorRed, colorBlue), 0, IIf(State == 1, H, L), -5);
*/
//Line = LineArray( x0, y0, x1, y1, 1 );
//Plot( Line, "Trend line", colorBlue );
/*
Wave B
Usually 50% of Wave A
Should not exceed 75% of Wave A
Wave C
either 1 x Wave A
or 1.62 x Wave A
or 2.62 x Wave A
*/
function CorrectiveRatios(StartPrice, A, B, C, RatioDelta, Delta)
{
ALength = abs(startPrice - A); BLength = abs(A-B);
CLength = abs(B-C);
Ratio1 = BLength / CLength ;
Cond1 = Ration1 >= 0.5 - RatioDelta AND ratio1 <= 0.75 + RatioDelta; Cond2 = abs(Clength - ALength) < Delta OR abs(Clength - 1.62 * ALength) < Delta OR abs(CLength - 2.62 * ALength) < Delta; return Cond1 AND Cond2; } function ImpulseRules(StartPrice, One, Two, Three, Four, Five) { //Wave 2 should be beneath wave 1 start: Cond1 = Two > StartPrice AND Two < One; //Wave 4 - the same: Cond2 = Four > Two AND Four < Three; //Wave 5 should be <= wave 3 Cond3 = abs(Three-Two) >= abs(Five - Four);
//Wave 1 should be smaller than wave five, making wave 3 the biggest:
Cond4 = abs(StartPrice - One) < abs(Five - Four); return Cond1 AND Cond2 AND Cond3 AND Cond4; } _SECTION_END(); //3 Gradient Color _SECTION_BEGIN("3 color gradient"); priceAxesWidth=0; dateAxesHeight=0; TitleHeight=0; pxwidth = Status("pxwidth"); pxheight = Status("pxheight"); chartwidth = pxwidth-priceAxesWidth; chartheight = pxheight-dateAxesHeight; topColor=ParamColor("topColor",ColorRGB(207,254,240) ); centerColor=ParamColor("centerColor", ColorRGB(249,236,164)); botColor=ParamColor("BottomColor", ColorRGB( 253,223,196)); priceAxesColor=ParamColor("priceAxesColor", colorWhite ); dateAxesColor=ParamColor("dateAxesColor", colorWhite); relPos=Param("centerPosition%",50,0,100,1)/100; centerHeight=chartheight*Param("centerHeight%",10,0,100,1)/100; x0=0; y0=Max(TitleHeight,chartheight*relPos-centerHeight/2); x1=chartwidth; y1=Min(chartheight,chartheight*relPos+centerHeight/2); GfxSetBkMode( 1 ); GfxSetOverlayMode(1); GfxGradientRect(0,0,chartwidth,TitleHeight, colorWhite ,colorWhite); GfxGradientRect(chartwidth,0,pxwidth,pxheight, priceAxesColor ,priceAxesColor); GfxGradientRect(0,chartheight,chartwidth,pxheight, dateAxesColor ,dateAxesColor); GfxGradientRect(x0,y0,x1,y1, CenterColor ,CenterColor ); GfxGradientRect(0,TitleHeight,chartwidth, y0,topColor, CenterColor ); GfxGradientRect(0,y1,chartwidth, chartheight, CenterColor ,botColor); _SECTION_END(); BEAST BSA _SECTION_BEGIN("Background_Setting"); SetChartBkGradientFill( ParamColor("BgTop", colorBlack), ParamColor("BgBottom", colorBlack),ParamColor("titleblock",colorDarkTeal )); _SECTION_END(); _SECTION_BEGIN("The_Beast_2"); SetBarsRequired(10000,10000); /* this ensures that the charts include all bars AND NOT just those on screen */ Prd1=Param("ATR Period 1-20",4,1,20,1);//{Default = 4 Because most traders use 5} Prd2=Param("LookBack Period 1-20",7,1,20,1);//{Default = 11 Because most traders use 10} //{Green} {Start Long position when Close>Green}
Green=HHV(LLV(L,Prd1)+ATR(Prd1),Prd2);
//{Red} {Stop loss when Close
{
temp = t6[ i ];
if( temp > stop[ i - 1 ] ) stop[ i ] = temp;
else stop[ i ] = stop[ i - 1 ];
}
else
stop[ i ] = initial[ i ];
}
Plot(stop,"ATR Stop",ParamColor( "Color", colorSeaGreen ),ParamStyle("Style",styleLine|Stylehidden,maskAll));
_SECTION_END();
_SECTION_BEGIN("Trailing_Lines");
Plot(LLV(HHV(H,5)-ATR(5),8),"",ParamColor( "Color Line 0", colorDarkGreen ),ParamStyle("Style Line 0",styleLine,maskAll));
Plot(LLV(HHV(H,5)-ATR(5),7),"",ParamColor( "Color Line 1", colorDarkGrey),ParamStyle("styleLine 1",styleLine,maskAll));
Plot(LLV(HHV(H,5)-ATR(5),6),"",ParamColor( "Color Line 2", colorDarkGrey ),ParamStyle("Style Line 2",styleLine,maskAll));
Plot(LLV(HHV(H,5)-ATR(5),5),"",ParamColor( "Color Line 3", colorDarkGrey),ParamStyle("Style Line 3",styleLine,maskAll));
Plot(LLV(HHV(H,5)-ATR(5),4),"",ParamColor( "Color Line 4", colorDarkGrey ),ParamStyle("Style Line 4",styleLine,maskAll));
Plot(LLV(HHV(H,5)-ATR(5),3),"",ParamColor( "Color Line 5", colorDarkYellow ),ParamStyle("Style Line 5",styleLine,maskAll));
_SECTION_END();
/*_SECTION_BEGIN("Stop_loss");
lookbackPeriod = Param("Lookback period", 10, 5, 30);
stoplossPercentage = Param("Stoploss Percentage", 5, 2, 10);
Thick = Param("Thick" , 0.02, 0.01, 0.2, 0.01);
StopLoss=(HHV(C,lookbackPeriod) - HHV(C,lookbackPeriod) * (stoplossPercentage / 100));
function SPlot( Pr, Txt, Co, St )
{
PlotOHLC(Pr, Pr,Pr+Thick, Pr+Thick, "",Co,styleCloud );
}
SPlot(StopLoss,"" ,ParamColor( "Color", colorCycle ), 2) ;
_SECTION_END();*/
_SECTION_BEGIN("Pivot_Finder");
/* **********************************
Code to automatically identify pivots
********************************** */
// -- what will be our lookback range for the hh and ll?
farback=Param("How Far back to go",100,0,5000,10);
nBars = Param("Number of bars", 12, 5, 40);
GraphXSpace=7;
// -- Create 0-initialized arrays the size of barcount
aHPivs = H - H;
aLPivs = L - L;
// -- More for future use, not necessary for basic plotting
aHPivHighs = H - H;
aLPivLows = L - L;
aHPivIdxs = H - H;
aLPivIdxs = L - L;
nHPivs = 0;
nLPivs = 0;
lastHPIdx = 0;
lastLPIdx = 0;
lastHPH = 0;
lastLPL = 0;
curPivBarIdx = 0;
// -- looking back from the current bar, how many bars
// back were the hhv and llv values of the previous
// n bars, etc.?
aHHVBars = HHVBars(H, nBars);
aLLVBars = LLVBars(L, nBars);
aHHV = HHV(H, nBars);
aLLV = LLV(L, nBars);
// -- Would like to set this up so pivots are calculated back from
// last visible bar to make it easy to "go back" and see the pivots
// this code would find. However, the first instance of
// _Trace output will show a value of 0
aVisBars = Status("barvisible");
nLastVisBar = LastValue(Highest(IIf(aVisBars, BarIndex(), 0)));
_TRACE("Last visible bar: " + nLastVisBar);
// -- Initialize value of curTrend
curBar = (BarCount-1);
curTrend = "";
if (aLLVBars[curBar] < aHHVBars[curBar]) { curTrend = "D"; } else { curTrend = "U"; } // -- Loop through bars. Search for // entirely array-based approach // in future version for (i=0; i
// -- Bar and price info for candidate pivot
candIdx = curBar - aHHVBars[curBar];
candPrc = aHHV[curBar];
if (
lastHPH < candPrc AND candIdx > lastLPIdx AND
candIdx < curBar) { // -- OK, we'll add this as a pivot... aHPivs[candIdx] = 1; // ...and then rearrange elements in the // pivot information arrays for (j=0; j
candIdx > lastHPIdx AND
candIdx < curBar) { // -- OK, we'll add this as a pivot... aLPivs[candIdx] = 1; // ...and then rearrange elements in the // pivot information arrays for (j=0; j
shape = Buy * shapeUpArrow + Sell * shapeDownArrow ;
PlotShapes( shape, IIf( Buy, colorGreen, colorRed ),0, IIf( Buy, Low, High ) );
dist = 1.5*ATR(20);
for( i = 0; i < BarCount; i++ ) { if( Buy[i] ) PlotText( "Buy\n@" + Close[i], i, Low[i] - dist[i], colorGreen ); if( Sell[i] ) PlotText( "sell\n@" + Close[i], i, Low[i] + dist[i], colorRed ); } Plot( Close, "Close", mycolor, styleNoTitle ); _SECTION_END(); PH PL LINEAR REGRESSION _SECTION_BEGIN(""); SetBarsRequired(350, -0); parmPlotScoreCard = ParamToggle("Plot KPScoreCard", "No|Yes", 1); parmPlotA900AutoStop = ParamToggle("Plot A900/AutoStop", "No|Yes", 0); parmA900Color = ParamColor("A900 Color", colorWhite); parmA900Style = ParamStyle("A900 Style", styleLine, maskAll); parmAutoStopColor = ParamColor("AutoStop Color", colorYellow); parmAutoStopStyle = ParamStyle("AutoStop Style", styleLine, maskAll); parmPPTextColor = ParamColor("PP Text color", colorBlue); parmPPTrndColorUp = ParamColor("PP Trend Up color", ColorRGB(167,224,243) ); parmPPTrndColorDn = ParamColor("PP Trend Dwn color", ColorRGB(255,192,203) ); parmPPTextOffSet = Param("PP OffSet", 0.60, 0.40, 1.5, 0.1); parmTickMultipler = Param("M/W tick allowance", 1, 0, 10, 1); parmA900AutoStopX = ParamToggle("Plot A900/AutoStop Cross", "No|Yes"); parmA900AutoStopColorX = ParamColor("A900/AutoStop Cross Color", colorBlue); ParmSCThreshold = Param("ScoreCard Threshold", 3, 1, 9, 1); parmVoice = ParamToggle("Voice 123 Setups", "No|Yes", 0); parmAlert = ParamToggle("Alert 123 Setups", "No|Yes", 0); parmPivotPop = ParamToggle("PivotPop", "No|Yes", 1); parmBarCancel = Param("Bar Cancel", 7, 1, 20, 1); parmWaterLevelColor = ParamColor("WalterLevel Color", ColorRGB(127,255,212)); parmWaterLevelStyle = ParamStyle("WaterLevel Style", styleLine, maskAll); parmBBPeriod = Param("Bollinger Band Period", 10, 2, 30, 1); parmBBSD = Param("bollinger Band SD", 0.8, 0.2, 3.0); ParmPlotPPIndicators = ParamToggle("Plot Pivot Pop indicators", "No|Yes", 0); parmBBColor = ParamColor("BBands Color", colorWhite); parmBBStyle = ParamStyle("BBands Style", styleLine, maskAll); ParmDebug = ParamToggle("Debug", "No|Yes", 0); _N(PaneName = Name() + Interval(2)+ _SECTION_NAME()); _N(NewBarName = "NewBar" + PaneName); function NewBarP() { PrevDT = StaticVarGet( NewBarName); DT = LastValue(DateTime()); StaticVarSet( NewBarName,DT); return DT != PrevDT; } function MRoundP(Number, Multiple ) { if(Multiple == 0 ) { xMultiple = 0.01; } else { xMultiple = Multiple; } Divided = Number / xMultiple; intDivided = int(Divided); intDivided = intDivided + round(Divided - intDivided); return intDivided * xMultiple; } ObjAB = CreateObject("Broker.Application"); ticker = objAB.Stocks(Name() ); if(ticker.TickSize == 0) { TickValue = 0.01; } else { TickValue = ticker.TickSize; } NewBarSignal = NewBarP(); KPA900 = E_TSKPA900(Close); KPAutoStop = E_TSKPAUTOSTOP(High,Low,Close); Ctmpl = E_TSKPCOLORTMPL(Open,High,Low,Close,Volume); //ScoreCard KPScoreCard = 0; KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd0 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd1 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd2 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd3 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd4 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd5 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd6 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd7 > 0, 1, -1);
KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd8 > 0, 1, -1);
if(parmDebug == 1)
{
// printf("a900: %0.6f% \nAutoStop: %0.6f%\nScoreCard: %0.0f%\n", KPA900, KPAutoStop, KPScoreCard);
}
if(parmPlotScoreCard == 1)
{
//_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g% (%0.4f%) {{VALUES}}", O, H, L, C, SelectedValue( C - Ref(C, -1)) ));
if( ParamToggle("Tooltip shows", "All Values|Only Prices" ) )
{
// ToolTip=StrFormat("Open: %g\nHigh: %g\nLow: %g\nClose: %g (%.2f%%)\nVolume: "+NumToStr( V, 1 ), O, H, L, C, SelectedValue( ROC( C, 1 )));
}
//Color = IIf(KPScoreCard >= parmSCThreshold, colorBlue, IIf(KPScoreCard <= -parmSCThreshold, colorRed, colorYellow) ); //Plot( C, "Close", Color , styleNoTitle | ParamStyle("OHLC Style") | GetPriceStyle() ); } //user want A900/AutoStop plotted if(parmPlotA900AutoStop == 1) { // Plot(KPA900, "A900", parmA900Color, parmA900Style); // Plot(KPAutoStop, "AutoStop", parmAutoStopColor, parmAutoStopStyle); } // find A900/AutoStop cross over/under with ScoreCard confirmation. XOUp = (KPA900 > KPAutoStop) AND (KPScoreCard >= parmSCThreshold); // New Pivot Low
XODn = (KPA900 < KPAutoStop) AND (KPScoreCard <= -parmSCThreshold); // New Pivot High if(parmDebug == 1) { // printf(WriteIf(XOUp, "before= XOUp: True", "before= XOUp: False") + WriteIf(XODn, " XODn: True\n", " XODn: False\n") ); } //remove duplicate signals XOUp = ExRem(XOUp, XODn); XODn = ExRem(XODn, XOUp); if(parmDebug == 1) { // printf(WriteIf(XOUp, "after= XOUp: True", "after= XOUp: False") + WriteIf(XODn, " XODn: True\n", " XODn: False\n") ); } //find the current Pivot Points - PL and PH //remember XOUp = 1 means a PL and XODn =1 means a PH PLBars = IIf(XOUp, LowestSinceBars(XODn, L ,1), 0); //find the bar that produced the Lowest Low PHBars = IIf(XODn, HighestSinceBars(XOUp, H, 1),0); //find the bar that produced the Highest High //PLPrice = IIf(XOUp, Ref(L, -PLBars), 0); //PHPrice = IIf(XODn, Ref(H, -PHBars),0); PLPrice = Ref(L, -PLBars); PHPrice = Ref(H, -PHBars); //keep track of the previous Pivot Points PrevPLBars = Ref(BarsSince(XOUp), -1) +1; PrevPHBars = Ref(BarsSince(XODn), -1) +1; PrevPLPrice = Ref(PLPrice, -prevPLBars); PrevPHPrice = Ref(PHPrice, -PrevPHBars ); PivotsCloseEnough = TickValue * parmTickMultipler; PLDifference = MroundP(PLPrice - PRevPLPrice, ticker.TickSize); PHDifference = MroundP(PHPrice - PrevPHPrice, ticker.TickSize); PPTrend = IIf(XOUp AND (PLDifference > PivotsCloseEnough) AND PrevPHPrice > PrevPLPrice AND PRevPHPrice > PLPrice, 1,
IIf(XOUp AND (PLDifference < - PivotsCloseEnough) AND PRevPHPrice > PrevPLPrice AND PrevPHPrice > PLPrice, -1,
IIf(XODn AND (PHDifference > PivotsCloseEnough) AND PrevPLPrice < PrevPHprice AND PrevPLPrice < PHPrice, 1, IIf(XODn AND (PHDifference < -PivotsCloseEnough) AND PrevPLPrice < PrevPHPrice AND PrevPLPrice < PHPrice, -1, IIf(XOUp AND (abs(PLDifference) <= PivotsCloseEnough) AND PrevPHPrice > PrevPLPrice AND PRevPHPrice > PLPrice, 2,
IIf(XODn AND (abs(PHDifference) <= PivotsCloseEnough) AND PrevPLPrice < PrevPHPrice AND PrevPLPrice < PHPrice, -2, 0)))) )); if(ParmDebug) { //printf("Current PH Bar: %g% /Price: %g%\n", PHBars, PHPrice); //printf("Current PL Bar: %g% /Price: %g%\n", PLBars, PLPrice); //printf("Previous PH Bar: %g% /Price: %g%\n", PrevPHBars, PrevPHPrice); //printf("Previous PL Bar: %g% /Price: %g%\n", PrevPLBars, PrevPLPrice) ; //printf("PP Trend: %g%\n", PPTrend); //printf("PHPrice - PrevPHPrice: %g%\nPLPrice - PrevPLPrice: %g%\nPivotsCloseEnough: %g%", PHDifference, PLDifference, PivotsCloseEnough); } //PLot pivots as text dist = parmPPTextOffSet * ATR(10); //for( i = 0; i < BarCount -1; i++) for( i = 0; i < BarCount ; i++) { if(XOUp[i ] == 1 AND abs(PPTrend[i]) != 2) //cross up -plot the Pivot Low { PlotText("PL", i - PLBars[i], PLPrice[i] - dist[i] , parmPPTextColor, IIf(PPTrend[i] == 1, parmPPTrndColorUp, IIf(PPTrend[i] == -1, parmPPTrndColorDn, colorYellow) )); } if(XODn[i ] == 1 AND abs(PPTrend[i]) != 2) //cross down - plot the pivot high { PlotText("PH", i - PHBars[i], PHPrice[i] + dist[i], parmPPTextColor, IIf(PPTrend[i] == 1, parmPPTrndColorUp, IIf(PPTrend[i] == -1, parmPPTrndColorDn, colorYellow) )); } if(XOUp[i ] == 1 AND (PPTrend[i]) == 2) // the Pivot Low is a W Bottom { PlotText("PW", i - PLBars[i], PLPrice[i] - dist[i] , parmPPTextColor, colorYellow) ; } if(XODn[i ] == 1 AND PPTrend[i] == -2) //cross down - pivot high is a M Top { PlotText("PM", i - PHBars[i], PHPrice[i] + dist[i], parmPPTextColor, colorYellow) ; } } //end For // Plot A900/AutoStop cross over/under if(parmA900AutoStopX == 1) { PlotShapes(IIf(Cross(KPA900, KPAutoStop), shapeUpTriangle, shapeNone),colorYellow, 0, L, -30); PlotShapes(IIf(Cross(KPAutoStop, KPA900), shapeDownTriangle, shapeNone), colorRed, 0, H , -30); } if(parmPivotPop == 1) { //Kp indicators for Pivot Pop dummy = E_TSKPFAST2(Open, High, Low, Close, Volume); KPFast2 = IIf(tskp_fast2val1 > 0, 1, -1);
//calculations
BarsSinceXOUp =BarsSince(XOUp);
BarsSinceXODn = BarsSince(XODn);
UBB = BBandTop(C, parmBBPeriod, parmBBSD);
LBB = BBandBot(C, parmBBPeriod, parmBBSD);
PopFilter = True;
if(parmDebug == 1)
{
//printf("\nFast2: %1.0f% \nUBB: %0.6f%\nLBB: %0.6f%\nC: %g%\n", KPFast2, UBB, LBB, C);
//printf("Bars since Last XOUp: %1.0f%\nBars since last XODn: %1.0f%\n", BarsSinceXOUp, BarsSinceXODn );
//printf("Bars since PPTrnd =1: %1.0f%\nBars since PPTrnd = -1: %1.0f%\n", BarsSince(PPTrend ==1), BarsSince(PPTrend == -1) );
}
PPopUp = (BarsSince(PPTrend >= 1) < BarsSince(PPTrend <= -1)) AND (BarsSince(XOUp) <= parmBarCancel) AND (KPA900 >= KPAutoStop) AND(KPFast2 == 1) AND (KPScoreCard >= 5)
AND PopFilter AND (C > UBB) AND (C > O) ;
PPopUp = IIf( PPopUp AND Sum(PPopUP, BarsSince(XOUp)+1) == 1, True, False ); //keep only the 1st signal
PPopDn = (BarsSince(PPTrend <= -1) < BarsSince(PPTrend >= 1)) AND (BarsSince(XODn) <= parmBarCancel) AND (KPA900 <= KPAutoStop) AND(KPFast2 == -1) AND (KPScoreCard <= -5) AND PopFilter AND (C < LBB) AND (C < O) ; PPopDn = IIf( PPopDn AND Sum(PPopDn, BarsSince(XODn) + 1) == 1, True, False); //keep only the first signal if(parmDebug == 1) { //printf(WriteIf(PPopUp,"PPopUp: True", "PPopUp: False") + WriteIf(PPopDn, " PPopDn: True\n", " PPopDn: False\n") ); //printf("PPopUp sum: %1.0f% \nPPopDn sum: %1.0f%\n", Sum(PPopUP, BarsSince(XOUp)) , Sum(PPopDn, BarsSince(XODn)) ); } // Plots PlotShapes(IIf(PPopUp, shapeHollowUpArrow, shapeNone), colorYellow, 0, L, -25); PlotShapes(IIf(PPopDn, shapeHollowDownArrow, shapeNone), colorRed, 0, H, -25); if(ParmPlotPPIndicators == 1) //plot the Pivot Pop Indicators { //Plot(UBB, "Upper BB", colorYellow, parmBBStyle); //Plot(LBB, "Lower BB", colorRed, parmBBStyle); if(parmPlotA900AutoStop == 1) { // Plot(KPA900, "A900", parmA900Color, parmA900Style); // Plot(KPAutoStop, "AutoStop", parmAutoStopColor, parmAutoStopStyle); } //Plot( 0.5, "Fast2", IIf(tskp_fast2val1 > 0, parmPPTrndColorUp, parmPPTrndColorDn) , styleArea | styleNoLabel | styleOwnScale , 0, 10);
} //endif parmPlotPPIndicators
} // end if parmPivotPop
// Type 1, 2 or 3 setups
// kp indicators
KPWaterlevel = E_TSKPWATERLEVEL(Open,High,Low,Close,Volume);
dummy = E_TSKPMEDIUM(Close);
KPMediumUp = tskp_mediumup;
KPMediumDn = tskp_mediumdown;
KPMediumMA = tskp_mediumma;
KPMedium = KPMediumUp + KPMediumDn;
//calculations
PLBars = IIf(XOUp, LowestSince(XODn, KPMedium ,1), 0); //find the Lowest Low
PHBars = IIf(XODn, HighestSinceBars(XOUp, KPMedium, 1),0); //find the bar that produced the Highest High
PrevPLMedium = Ref(KPMedium, -prevPLBars);
PrevPHMedium = Ref(KPMEdium, -PrevPHBars );
Type1Filter = IIf(PPopUp AND (LowestSince(XODn, KPMedium, 1) > 0 ) AND (HighestSince(XODn, KPMedium, 1) > 0 ), True, IIf(PPopDn AND (HighestSince(XOUp, KPMedium ,1) < 0) AND (LowestSince(XOUp, KPMedium ,1) < 0), True, False)); Type2Filter = IIf(PPopUp AND LowestSince(XODn, KPMedium, 1) < 0 AND KPMedium > 0, True, IIf(PPopDn AND (HighestSince(XOUp, KPMedium ,1) > 0) AND KPMEdium < 0, True, False)); Type3Filter = IIf(PPopUp AND LowestSince(XODn, KPMedium, 1) < 0 AND KPMedium < 0 AND (KPMedium > KPMediumMA), True, IIf(PPopDn AND (HighestSince(XOUp, KPMedium ,1) > 0) AND KPMEdium > 0 AND(KPMedium < KPMediumMA), True, False)); Type1Buy = PPopUp AND ((Close - Open) >= 0) AND (KPScoreCard >= ParmSCThreshold) AND Type1Filter;
Type1Sell = PPopDn AND ((Close - Open) <= 0) AND (KPScoreCard <= -ParmSCThreshold) AND Type1Filter; Type2Buy = PPopUp AND ((Close - Open) >= 0) AND (KPScoreCard >= ParmSCThreshold) AND Type2Filter AND C > KPWaterLevel;
Type2Sell = PPopDn AND ((Close - Open) <= 0) AND (KPScoreCard <= -ParmSCThreshold) AND Type2Filter AND C < KPWaterLevel; Type3Buy = PPopUp AND ((Close - Open) >= 0) AND (KPScoreCard >= ParmSCThreshold) AND Type3Filter AND C > KPWaterLevel;
Type3Sell = PPopDn AND ((Close - Open) <= 0) AND (KPScoreCard <= -ParmSCThreshold) AND Type3Filter AND C < KPWaterLevel; if(parmDebug == 1) { //printf("Type1Filter: %g%\nType2Filter: %g%\nType3Filter: %g%\n", Type1Filter, Type2Filter, Type3Filter); //printf("KPWaterlevel: %g%\n", KPWaterLevel); //printf("KPMedium: %g%\nKPMediumMA: %g%\n", KPMedium, KPMediumMA); //printf("Highest XOUp Medium: %g%\nLowest XOUp Medium: %g%\n", HighestSince(XOUp, KPMedium, 1), LowestSince(XOUp, KPMedium ,1) ); //printf("Highest XODn Medium: %g%\nLowest XODn Medium: %g%\n", HighestSince(XODn, KPMedium, 1), LowestSince(XODn, KPMedium ,1) ); //printf("Prev PH Medium: %g%:Prev PL Medium: %g%\n", PrevPHMedium, PrevPLMedium); //printf("Type1Buy: %g%:Type1Sell: %g%\n", Type1Buy, Type1Sell); //printf("Type2Buy: %g%:Type2Sell: %g%\n", Type2Buy, Type2Sell); //printf("Type3Buy: %g%:Type3Sell: %g%\n", Type3Buy, Type3Sell); } // Plots PlotShapes(IIf(Type1Buy, shapeDigit1 , IIf(Type1Sell, shapeDigit1, shapeNone)), IIf(Type1Buy, colorBlue, IIf(Type1Sell, colorRed, Null)), 0, IIf(Type1Buy, High, IIf(Type1Sell, L, O)), IIf(Type1Buy, 30, IIf(Type1Sell, -30, 0)) ); PlotShapes(IIf(Type2Buy, shapeDigit2 , IIf(Type2Sell, shapeDigit2, shapeNone)), IIf(Type2Buy, colorBlue, IIf(Type2Sell, colorRed, Null)), 0, IIf(Type2Buy, High, IIf(Type2Sell, L, O)), IIf(Type2Buy, 30, IIf(Type2Sell, -30, 0)) ); PlotShapes(IIf(Type3Buy, shapeDigit3 , IIf(Type3Sell, shapeDigit3, shapeNone)), IIf(Type3Buy, colorBlue, IIf(Type3Sell, colorRed, Null)), 0, IIf(Type3Buy, High, IIf(Type3Sell, L, O)), IIf(Type3Buy, 30, IIf(Type3Sell, -30, 0)) ); //Plot(KPWaterLevel, "KPWaterLevel", parmWaterLevelColor, parmWaterLevelStyle); // HMM how to print Medium on a price chart //voice if(parmVoice ==1) { if(NewBarSignal) { if( LastValue(Ref(Type1Buy, -1)) == 1) Say(Interval(2) + " New Type one buy."); if( LastValue(Ref(Type2Buy, -1)) == 1) Say(Interval(2) + " New Type two buy"); if( LastValue(Ref(Type3Buy, -1)) == 1) Say(Interval(2) + " New Type three buy."); if( LastValue(Ref(Type1Sell,-1)) ==1) Say(Interval(2) + " New Type one sell."); if( LastValue(Ref(Type2Sell,-1)) ==1) Say(Interval(2) + " New Type two sell."); if( LastValue(Ref(Type3Sell,-1)) ==1) Say(Interval(2) + " New Type three sell."); } } //alerts if(parmAlert ==1) { AlertIf(NewbarSignal AND Ref(Type1Buy, -1), "", "Type 1 Buy.", 1, 15, 0); AlertIf(NewbarSignal AND Ref(Type2Buy, -1), "", "Type 2 Buy.", 1, 15, 0); AlertIf(NewbarSignal AND Ref(Type3Buy, -1), "", "Type 3 Buy.", 1, 15, 0); AlertIf(NewbarSignal AND Ref(Type1Sell, -1), "", "Type 1 Sell.", 2, 15, 0); AlertIf(NewbarSignal AND Ref(Type2Sell, -1), "", "Type 2 Sell.", 2, 15, 0); AlertIf(NewbarSignal AND Ref(Type3Sell, -1), "", "Type 3 Sell.", 2, 15, 0); } _SECTION_END(); //********************************* //********************************* _SECTION_BEGIN("Chart Settings"); SetChartOptions(0,chartShowArrows|chartShowDates); SetChartBkColor(ParamColor("Outer Panel",colorPaleBlue)); SetChartBkGradientFill(ParamColor("Upper Chart",1),ParamColor("Lower Chart",23)); _SECTION_END(); //================================================Start Chart Configuration============================================================================ _N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) Vol " +WriteVal( V, 1.0 ) +" {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 )) )); Plot( C, "Close", colorBlue, styleCandle, Zorder = 1); //================================================End Chart Configuration=============================================================================== //====================================Start of Linear Regression Code================================================================================== P = ParamField("Price field",-1); Length = 150; Daysback = Param("Period for Liner Regression Line",Length,1,240,1); shift = Param("Look back period",0,0,240,1); //=============================== Math Formula ======================================================================================================== x = Cum(1); lastx = LastValue( x ) - shift; aa = LastValue( Ref(LinRegIntercept( p, Daysback), -shift) ); bb = LastValue( Ref(LinRegSlope( p, Daysback ), -shift) ); y = Aa + bb * ( x - (Lastx - DaysBack +1 ) ); //==================Plot the Linear Regression Line ==================================================================================================== LRColor = ParamColor("LR Color", colorCycle ); LRStyle = ParamStyle("LR Style"); LRLine = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y, Null ); LRStyle = ParamStyle("LR Style"); Angle = Param("Angle", 0.05, 0, 1.5, 0.01);// A slope higher than 0.05 radians will turn green, less than -0.05 will turn red and anything in between will be white. LRLine = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y, Null ); Pi = 3.14159265 * atan(1); // Pi SlopeAngle = atan(bb)*(180/Pi); LineUp = SlopeAngle > Angle;
LineDn = SlopeAngle < - Angle; if(LineUp) { Plot(LRLine, "Lin. Reg. Line Up", IIf(LineUp, colorBrightGreen, colorWhite), LRStyle); } else { Plot(LRLine, "Lin. Reg. Line Down", IIf(LineDn, colorDarkRed, colorWhite), LRStyle); } //========================== Plot 1st SD Channel ====================================================================================================== SDP = Param("Standard Deviation", 1.5, 0, 6, 0.1); SD = SDP/2; width = LastValue( Ref(SD*StDev(p, Daysback),-shift) ); //Set width of inside chanels here. SDU = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y+width , Null ) ; SDL = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y-width , Null ) ; SDColor = ParamColor("SD Color", colorCycle ); SDStyle = ParamStyle("SD Style"); Plot( SDU , "Upper Lin Reg", colorBrown,SDStyle ); //Inside Regression Lines Plot( SDL , "Lower Lin Reg", colorLime,SDStyle ); //Inside Regression Lines //========================== Plot 2d SD Channel ======================================================================================================== SDP2 = Param("2d Standard Deviation", 2.0, 0, 6, 0.1); SD2 = SDP2/2; width2 = LastValue( Ref(SD2*StDev(p, Daysback),-shift) ); //Set width of outside chanels here. SDU2 = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y+width2 , Null ) ; SDL2 = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y-width2 , Null ) ; SDColor2 = ParamColor("2 SD Color", colorCycle ); SDStyle2 = ParamStyle("2 SD Style"); Plot( SDU2 , "Upper Lin Reg", colorRed,SDStyle2 ); //OutSide Regression Lines Plot( SDL2 , "Lower Lin Reg", colorLime,SDStyle2 ); //OutSide Regression Lines Trend = IIf(LRLine > Ref(LRLine,-1),colorGreen,colorRed);//Changes LR line to green if sloping up and red if sloping down.
Plot( LRLine , "LinReg", Trend, LRSTYLE );
PlotOHLC(SDU,SDL2,SDU2,SDL,"",colorYellow,styleNoLabel | styleCloud);
//============================ End Indicator Code ========================================================================================================
_SECTION_BEGIN(" ");
farback=Param("How Far back to go",100,50,5000,10);
nBars = Param("Number of bars", 12, 5, 40);
aHPivs = H - H;
aLPivs = L - L;
// -- More for future use, not necessary for basic plotting
aHPivHighs = H - H;
aLPivLows = L - L;
aHPivIdxs = H - H;
aLPivIdxs = L - L;
nHPivs = 0;
nLPivs = 0;
lastHPIdx = 0;
lastLPIdx = 0;
lastHPH = 0;
lastLPL = 0;
curPivBarIdx = 0;
// -- looking back from the current bar, how many bars
// back were the hhv and llv values of the previous
// n bars, etc.?
aHHVBars = HHVBars(H, nBars);
aLLVBars = LLVBars(L, nBars);
aHHV = HHV(H, nBars);
aLLV = LLV(L, nBars);
// -- Would like to set this up so pivots are calculated back from
// last visible bar to make it easy to "go back" and see the pivots
// this code would find. However, the first instance of
// _Trace output will show a value of 0
aVisBars = Status("barvisible");
nLastVisBar = LastValue(Highest(IIf(aVisBars, BarIndex(), 0)));
_TRACE("Last visible bar: " + nLastVisBar);
// -- Initialize value of curTrend
curBar = (BarCount-1);
curTrend = "";
if (aLLVBars[curBar] < aHHVBars[curBar]) { curTrend = "D"; } else { curTrend = "U"; } // -- Loop through bars. Search for // entirely array-based approach // in future version for (i=0; i
// -- Bar and price info for candidate pivot
candIdx = curBar - aHHVBars[curBar];
candPrc = aHHV[curBar];
if (
lastHPH < candPrc AND candIdx > lastLPIdx AND
candIdx < curBar) { // -- OK, we'll add this as a pivot... aHPivs[candIdx] = 1; // ...and then rearrange elements in the // pivot information arrays for (j=0; j
candIdx > lastHPIdx AND
candIdx < curBar) {
// -- OK, we'll add this as a pivot...
aLPivs[candIdx] = 1;
// ...and then rearrange elements in the
// pivot information arrays
for (j=0; j
aLPivLows[nLPivs-j] = aLPivLows[nLPivs-(j+1)];
aLPivIdxs[nLPivs-j] = aLPivIdxs[nLPivs-(j+1)];
}
aLPivLows[0] = candPrc;
aLPivIdxs[0] = candIdx;
nLPivs++;
}
}
PlotShapes(
IIf(aHPivs==1, shapeDownArrow, shapeNone), colorRed, 0,
High, Offset=-15);
PlotShapes(
IIf(aLPivs==1, shapeUpArrow , shapeNone), colorGreen, 0,
Low, Offset=-15);
AlertIf( aHPivs==1, "SOUND C:\\Windows\\Media\\Ding.wav", "Sell " + C,2,1+2,1);
AlertIf( aLPivs==1, "SOUND C:\\Windows\\Media\\Ding.wav","Buy " + C,1,1+2,1);
_SECTION_END();
_SECTION_BEGIN("");
n=25; Av=12; Av1=16; Av2=2; stp=2;
Var1= TEMA(Close,n);
Var2= TEMA(var1,av);
Var3= (var1-var2)+var1;
Var1= TEMA(var3,av1);
Var4= MA((var1-var2)+var1,av2);
Var5=(Var1-Var2)+Var1;
//Buy=Cover=Cross(Var5,Var4);
//Sell=Short=Cross(Var4,VAR5);
Buy=Cover=Cross(Var5,Ref(Var5,-1));
Sell=Short=Cross(Ref(Var5,-1),VAR5);
Filter =Buy OR Sell;
Plot( Flip( Buy, Sell ), "Trade", 9, styleArea | styleOwnScale, 0, 1 );
_SECTION_END();
27 July 2011
AFL LINKS
http://www.wisestocktrader.com/indicators/1169-robert-alternet
http://www.amibrokerforum.com/index.php/topic,29.0.html
http://www.amibrokerforum.com/index.php/topic,5.0.html
http://www.amibrokerforum.com/index.php/topic,117.0.html
http://www.amibrokerforum.com/index.php/topic,106.0.html
http://www.amibrokerforum.com/index.php/topic,29.0.html
http://www.amibrokerforum.com/index.php/topic,5.0.html
http://www.amibrokerforum.com/index.php/topic,117.0.html
http://www.amibrokerforum.com/index.php/topic,106.0.html
25 July 2011
VSA links
http://mediaserver.fxstreet.com/Reports/a31390c6-809d-4554-802a-0bb98e818cfe/312ff44f-51ca-4003-969b-3cba7ac97b60.pdf
http://tradingwyckoffmethod.com/lang/zh-hk/2010/08/what-is-price-and-volume-analysis-or-better-known-as-volume-spread-analysis-vsa/
http://www.informedtrades.com/blogs/magic/3195-wyckoffs-course-lesson-1-page2.html
http://www.therogueinvestor.com/vsa-r/
http://www.traderszone.com/system-reviews/1608-volume-spread-analysis.html
http://www.tradeguider.com/free/vsa.pdf
http://tradingwyckoffmethod.com/lang/zh-hk/2010/08/what-is-price-and-volume-analysis-or-better-known-as-volume-spread-analysis-vsa/
http://www.informedtrades.com/blogs/magic/3195-wyckoffs-course-lesson-1-page2.html
http://www.therogueinvestor.com/vsa-r/
http://www.traderszone.com/system-reviews/1608-volume-spread-analysis.html
http://www.tradeguider.com/free/vsa.pdf
18 July 2011
Projection Oscillator for AmiBroker for Amibroker (AFL)
Developed by Mel Widner, Ph.D., the Projection Oscillator is a by-product of his Projection Bands (see Projection Bands). The Projection Oscillator is basically a slope-adjusted Stochastic. Where the Stochastic Oscillator (see Stochastic Oscillator) shows the relationship of the current price to its minimum and maximum prices over a recent time period, the Projection Oscillator shows the same thing, but the minimum and maximum prices are adjusted up/down by the slope of the prices regression line. This adjustment makes the Projection Oscillator more responsive to short-term price moves than an equi-period Stochastic.
Put another way, the Projection Oscillator shows where the current priceis relative to the Projection bands. A value of 50 indicates that thecurrent price is exactly in the middle of the bands. A value of 100indicates that prices are touching the top band. A value of 0 indicatesthat prices are touching the bottom band.
Interpretation
The Projection Oscillator can be used as both a short- and intermediate-term trading oscillator depending on the number of time periods used when calculating the oscillator. When displaying a short-term Projection Oscillator(e.g., 10-20 days), it is popular to use a 3-day trigger line.
There are several ways to interpret a Projection Oscillator.
Overbought/oversold. Buy when the oscillator falls below a specific level (e.g., 20) and then rises above that level, and sell when the Oscillator rises above a specific level (e.g., 80) and then falls below that level. High values (i.e., above 80) indicate excessive optimism. Low values (i.e., below 20) indicate excessive pessimism.
However, before basing any trade off of strict overbought/oversold levels, you should first qualify the trendiness of the market using indicators such as r-squared (see r-squared) or CMO (see Chande Momentum Oscillator). If these indicators suggest a non-trending market, then trades based on strict overbought/oversold levels should produce the best results. If a trending market is suggested, then you can use the oscillator to enter trades in the direction of the trend.
Crossovers. Buy when the oscillator crosses above its trigger (dotted) line and sell when the oscillator crosses below its trigger line. You may want to qualify your trades by requiring that the crossovers occur above the 70 level or below the 30 level.
Divergences. You may consider selling if prices are making a series of new highs and the oscillator is failing to surpass its previous highs. You may consider buying if prices are making a series of new lows and the oscillator is failing to surpass its previous low. You may qualify your trades by requiring that the divergence occur above the 70 level orbelow the 30 level.
_SECTION_BEGIN("PROJECTION OSCILLATOR");
SetChartBkColor(colorBlack);
pp = Param(" Period", 14, 1, 150, 1);
xx= Cum(1)*Cum(1);
yy=(Sum(Cum(1),pp))*(Sum(Cum(1),pp));
SHIGH=((pp*(Sum(Cum(1)*High,pp)))-(Sum(Cum(1),pp)*(Sum(High,pp))))/((pp*(Sum(xx,pp))-yy));
SLOW=((pp*(Sum(Cum(1)*Low,pp)))-(Sum(Cum(1),pp)*(Sum(Low,pp))))/((pp*(Sum(xx,pp))-yy));
UPPBAND=Max(High,
Max( Ref(High,-1) + 1 * SHIGH,
Max( Ref(High,-2) + 2 * SHIGH,
Max( Ref(High,-3) + 3 * SHIGH,
Max( Ref(High,-4) + 4 * SHIGH,
Max( Ref(High,-5) + 5 * SHIGH,
Max( Ref(High,-6) + 6 * SHIGH,
Max( Ref(High,-7) + 7 * SHIGH,
Max( Ref(High,-8) + 8 * SHIGH ,
Max( Ref(High,-9) + 9 * SHIGH,
Max( Ref(High,-10) + 10 * SHIGH,
Max( Ref(High,-11) + 11 * SHIGH,
Max( Ref(High,-12) + 12 * SHIGH,
Ref(High,-13) + 13 *SHIGH)))))))))))));
LPBAND=Min(Low,
Min( Ref(Low,-1) + 1 * SLOW,
Min( Ref(Low,-2) + 2 * SLOW,
Min( Ref(Low,-3) + 3 * SLOW,
Min( Ref(Low,-4) + 4 * SLOW,
Min( Ref(Low,-5) + 5 * SLOW,
Min( Ref(Low,-6) + 6 * SLOW ,
Min( Ref(Low,-7) + 7 * SLOW,
Min( Ref(Low,-8) + 8 * SLOW,
Min( Ref(Low,-9) + 9 * SLOW,
Min( Ref(Low,-10) + 10 * SLOW,
Min( Ref(Low,-11) + 11 * SLOW,
Min( Ref(Low,-12) + 12 * SLOW,
Ref(Low,-13) + 13 * SLOW)))))))))))));
PO=100*(Close-LPBAND)/(UPPBAND-LPBAND);
Plot(PO,"",colorYellow,styleLine);
Plot(20,"",colorRed,styleDashed);
Plot(50,"",colorYellow,styleDashed);
Plot(80,"",colorRed,styleDashed);
_SECTION_END();
Put another way, the Projection Oscillator shows where the current priceis relative to the Projection bands. A value of 50 indicates that thecurrent price is exactly in the middle of the bands. A value of 100indicates that prices are touching the top band. A value of 0 indicatesthat prices are touching the bottom band.
Interpretation
The Projection Oscillator can be used as both a short- and intermediate-term trading oscillator depending on the number of time periods used when calculating the oscillator. When displaying a short-term Projection Oscillator(e.g., 10-20 days), it is popular to use a 3-day trigger line.
There are several ways to interpret a Projection Oscillator.
Overbought/oversold. Buy when the oscillator falls below a specific level (e.g., 20) and then rises above that level, and sell when the Oscillator rises above a specific level (e.g., 80) and then falls below that level. High values (i.e., above 80) indicate excessive optimism. Low values (i.e., below 20) indicate excessive pessimism.
However, before basing any trade off of strict overbought/oversold levels, you should first qualify the trendiness of the market using indicators such as r-squared (see r-squared) or CMO (see Chande Momentum Oscillator). If these indicators suggest a non-trending market, then trades based on strict overbought/oversold levels should produce the best results. If a trending market is suggested, then you can use the oscillator to enter trades in the direction of the trend.
Crossovers. Buy when the oscillator crosses above its trigger (dotted) line and sell when the oscillator crosses below its trigger line. You may want to qualify your trades by requiring that the crossovers occur above the 70 level or below the 30 level.
Divergences. You may consider selling if prices are making a series of new highs and the oscillator is failing to surpass its previous highs. You may consider buying if prices are making a series of new lows and the oscillator is failing to surpass its previous low. You may qualify your trades by requiring that the divergence occur above the 70 level orbelow the 30 level.
_SECTION_BEGIN("PROJECTION OSCILLATOR");
SetChartBkColor(colorBlack);
pp = Param(" Period", 14, 1, 150, 1);
xx= Cum(1)*Cum(1);
yy=(Sum(Cum(1),pp))*(Sum(Cum(1),pp));
SHIGH=((pp*(Sum(Cum(1)*High,pp)))-(Sum(Cum(1),pp)*(Sum(High,pp))))/((pp*(Sum(xx,pp))-yy));
SLOW=((pp*(Sum(Cum(1)*Low,pp)))-(Sum(Cum(1),pp)*(Sum(Low,pp))))/((pp*(Sum(xx,pp))-yy));
UPPBAND=Max(High,
Max( Ref(High,-1) + 1 * SHIGH,
Max( Ref(High,-2) + 2 * SHIGH,
Max( Ref(High,-3) + 3 * SHIGH,
Max( Ref(High,-4) + 4 * SHIGH,
Max( Ref(High,-5) + 5 * SHIGH,
Max( Ref(High,-6) + 6 * SHIGH,
Max( Ref(High,-7) + 7 * SHIGH,
Max( Ref(High,-8) + 8 * SHIGH ,
Max( Ref(High,-9) + 9 * SHIGH,
Max( Ref(High,-10) + 10 * SHIGH,
Max( Ref(High,-11) + 11 * SHIGH,
Max( Ref(High,-12) + 12 * SHIGH,
Ref(High,-13) + 13 *SHIGH)))))))))))));
LPBAND=Min(Low,
Min( Ref(Low,-1) + 1 * SLOW,
Min( Ref(Low,-2) + 2 * SLOW,
Min( Ref(Low,-3) + 3 * SLOW,
Min( Ref(Low,-4) + 4 * SLOW,
Min( Ref(Low,-5) + 5 * SLOW,
Min( Ref(Low,-6) + 6 * SLOW ,
Min( Ref(Low,-7) + 7 * SLOW,
Min( Ref(Low,-8) + 8 * SLOW,
Min( Ref(Low,-9) + 9 * SLOW,
Min( Ref(Low,-10) + 10 * SLOW,
Min( Ref(Low,-11) + 11 * SLOW,
Min( Ref(Low,-12) + 12 * SLOW,
Ref(Low,-13) + 13 * SLOW)))))))))))));
PO=100*(Close-LPBAND)/(UPPBAND-LPBAND);
Plot(PO,"",colorYellow,styleLine);
Plot(20,"",colorRed,styleDashed);
Plot(50,"",colorYellow,styleDashed);
Plot(80,"",colorRed,styleDashed);
_SECTION_END();
15 July 2011
How to Set Protective Stops Using the Wave Principle
How to Set Protective Stops Using the Wave Principle
The 3 simple rules of Elliott wave analysis can help commodity traders manage risk, ride market trends and spot price reversals.
EWI's Chief Commodities Analyst Jeffrey Kennedy values the Wave Principle not only as an analytical tool, but also as a real-time trading tool. In this excerpt from Jeffrey's Trader's Classroom Collection Vol. 2, he shows you how the Wave Principle's built-in rules can help you set your protective stops when trading.
Over the years that I've worked with Elliott wave analysis, I've learned that you can glean much of the information you require as a trader - such as where to place protective or trailing stops - from the three cardinal rules of the Wave Principle:
1. Wave two can never retrace more than 100% of wave one.
2. Wave four may never end in the price territory of wave one.
3. Wave three may never be the shortest impulse wave of waves one, three and five.
Let's begin with rule No. 1: Wave two will never retrace more than 100% of wave one. In Figure 4-1, we have a five wave advance followed by a three-wave decline, which we will call waves (1) and (2). An important thing to remember about second waves is that they usually retrace more than half of wave one, most often making a .618 Fibonacci retracement of wave one. So in anticipation of a third-wave rally - which is where prices normally travel the farthest in the shortest amount of time - you should look to buy at or near the .618 retracement of wave one.
http://www.elliottwave.com/images/freeupdates/TCC%20Vol%202.JPG
Where to place the stop: Once a long position is initiated, a protective stop can be placed one tick below the origin of wave (1). If wave two retraces more than 100% of wave one, the move can no longer be labeled wave two.
Now let's examine rule No. 2: Wave four will never end in the price territory of wave one. This rule is useful because it can help you set protective stops in anticipation of catching a fifth-wave move to new highs. The most common Fibonacci retracement for fourth waves is .382 retracement of wave three.
http://www.elliottwave.com/images/freeupdates/TCC%20Vol%202%204-2.JPG
Where to place the stop: As shown in Figure 4-2, the protective stop should go one tick below the extreme of wave (1). Something is wrong with the wave count of what you have labeled as wave four heads into the price territory of wave one.
And, finally, rule No. 3: Wave three will never be the shortest impulse wave of waves one, three and five. Typically, wave three is the wave that travels the farthest in an impulse wave or five-wave move, but not always. In certain situations (such as within a Diagonal Triangle), wave one travels farther than wave three.
Where to place the stop: When this happens, you consider a short position with a protective stop one tick above the point where wave (5) becomes longer than wave (3) (see Figure 4-3). Why? If you have labeled price action correctly, wave five will not surpass wave three in length; when wave three is already shorter than wave one, it cannot also be shorter than wave five. So if wave five does cover more distance in terms of price than wave three - thus breaking Elliott's third cardinal rule - then it's time to re-think your wave count.
The 3 simple rules of Elliott wave analysis can help commodity traders manage risk, ride market trends and spot price reversals.
EWI's Chief Commodities Analyst Jeffrey Kennedy values the Wave Principle not only as an analytical tool, but also as a real-time trading tool. In this excerpt from Jeffrey's Trader's Classroom Collection Vol. 2, he shows you how the Wave Principle's built-in rules can help you set your protective stops when trading.
Over the years that I've worked with Elliott wave analysis, I've learned that you can glean much of the information you require as a trader - such as where to place protective or trailing stops - from the three cardinal rules of the Wave Principle:
1. Wave two can never retrace more than 100% of wave one.
2. Wave four may never end in the price territory of wave one.
3. Wave three may never be the shortest impulse wave of waves one, three and five.
Let's begin with rule No. 1: Wave two will never retrace more than 100% of wave one. In Figure 4-1, we have a five wave advance followed by a three-wave decline, which we will call waves (1) and (2). An important thing to remember about second waves is that they usually retrace more than half of wave one, most often making a .618 Fibonacci retracement of wave one. So in anticipation of a third-wave rally - which is where prices normally travel the farthest in the shortest amount of time - you should look to buy at or near the .618 retracement of wave one.
http://www.elliottwave.com/images/freeupdates/TCC%20Vol%202.JPG
Where to place the stop: Once a long position is initiated, a protective stop can be placed one tick below the origin of wave (1). If wave two retraces more than 100% of wave one, the move can no longer be labeled wave two.
Now let's examine rule No. 2: Wave four will never end in the price territory of wave one. This rule is useful because it can help you set protective stops in anticipation of catching a fifth-wave move to new highs. The most common Fibonacci retracement for fourth waves is .382 retracement of wave three.
http://www.elliottwave.com/images/freeupdates/TCC%20Vol%202%204-2.JPG
Where to place the stop: As shown in Figure 4-2, the protective stop should go one tick below the extreme of wave (1). Something is wrong with the wave count of what you have labeled as wave four heads into the price territory of wave one.
And, finally, rule No. 3: Wave three will never be the shortest impulse wave of waves one, three and five. Typically, wave three is the wave that travels the farthest in an impulse wave or five-wave move, but not always. In certain situations (such as within a Diagonal Triangle), wave one travels farther than wave three.
Where to place the stop: When this happens, you consider a short position with a protective stop one tick above the point where wave (5) becomes longer than wave (3) (see Figure 4-3). Why? If you have labeled price action correctly, wave five will not surpass wave three in length; when wave three is already shorter than wave one, it cannot also be shorter than wave five. So if wave five does cover more distance in terms of price than wave three - thus breaking Elliott's third cardinal rule - then it's time to re-think your wave count.
11 July 2011
William Alligator
William Alligator in an important tool for AB. I don't know is there anybody has or not? If has, may be we don't know what's its implecation (pardon me if sentence making wrong gramartically).
If knows I will hope discussion to all. regards...
This is an accurate Alligator indicator based on the mid price and smoothed as Bill Williams specifies. This Alligator is also projected into the future as Williams prefers.
Bill Williams describes the Alligator as being like a compass which keeps your trading in the right direction. The Alligator helps you spot a real trend and stay out of range-bound trading, which always result in losses. The Alligator is the combination of three balance lines:
Alligator’s Jaw (the blue line) – 13-period moving average at the mid price (High+Low)/2, which is offset 8 bars into the future;
Alligator’s Teeth (the red line) – 8-period moving average at the mid price (High+Low)/2, which is offset 5 bars into the future;
Alligator’s Lips (the green line) – 5-period moving average at the mid price (High+Low)/2, which is offset 2 bars into the future.
What the Alligator does?
The Alligator identifies trending & non-trending markets. It also specifies the direction of the trend.
Basic Rules
If all three lines are intertwined, the Alligator is asleep and the market is range-bound. The longer it sleeps, the hungrier it gets. When it wakes up from a long sleep it chases the price much farther, therefore price movements are much stronger.
When the Alligator is asleep, stay away.
If the Alligator is not asleep, the market is either[b] uptrending or downtrending:
- if the price is above the Alligator’s mouth then it’s an uptrend;
- if the price is below the Alligator’s mouth then it’s a downtrend.
Once the Alligator wakes up, it opens its mouth (the three lines diverge) and starts hunting. Having eaten enough, it goes to sleep again (the three Lines converge), so it’s time to take profits.
Quick tips how to use "William Alligator"
Buy when candelstick is above the blue line (jaws) / Pass Jaws line.
Sell when candelstick is under / pass jaws line.
If knows I will hope discussion to all. regards...
This is an accurate Alligator indicator based on the mid price and smoothed as Bill Williams specifies. This Alligator is also projected into the future as Williams prefers.
Bill Williams describes the Alligator as being like a compass which keeps your trading in the right direction. The Alligator helps you spot a real trend and stay out of range-bound trading, which always result in losses. The Alligator is the combination of three balance lines:
Alligator’s Jaw (the blue line) – 13-period moving average at the mid price (High+Low)/2, which is offset 8 bars into the future;
Alligator’s Teeth (the red line) – 8-period moving average at the mid price (High+Low)/2, which is offset 5 bars into the future;
Alligator’s Lips (the green line) – 5-period moving average at the mid price (High+Low)/2, which is offset 2 bars into the future.
What the Alligator does?
The Alligator identifies trending & non-trending markets. It also specifies the direction of the trend.
Basic Rules
If all three lines are intertwined, the Alligator is asleep and the market is range-bound. The longer it sleeps, the hungrier it gets. When it wakes up from a long sleep it chases the price much farther, therefore price movements are much stronger.
When the Alligator is asleep, stay away.
If the Alligator is not asleep, the market is either[b] uptrending or downtrending:
- if the price is above the Alligator’s mouth then it’s an uptrend;
- if the price is below the Alligator’s mouth then it’s a downtrend.
Once the Alligator wakes up, it opens its mouth (the three lines diverge) and starts hunting. Having eaten enough, it goes to sleep again (the three Lines converge), so it’s time to take profits.
Quick tips how to use "William Alligator"
Buy when candelstick is above the blue line (jaws) / Pass Jaws line.
Sell when candelstick is under / pass jaws line.
William Alligator
William Alligator in an important tool for AB. I don't know is there anybody has or not? If has, may be we don't know what's its implecation (pardon me if sentence making wrong gramartically).
If knows I will hope discussion to all. regards...
This is an accurate Alligator indicator based on the mid price and smoothed as Bill Williams specifies. This Alligator is also projected into the future as Williams prefers.
Bill Williams describes the Alligator as being like a compass which keeps your trading in the right direction. The Alligator helps you spot a real trend and stay out of range-bound trading, which always result in losses. The Alligator is the combination of three balance lines:
Alligator’s Jaw (the blue line) – 13-period moving average at the mid price (High+Low)/2, which is offset 8 bars into the future;
Alligator’s Teeth (the red line) – 8-period moving average at the mid price (High+Low)/2, which is offset 5 bars into the future;
Alligator’s Lips (the green line) – 5-period moving average at the mid price (High+Low)/2, which is offset 2 bars into the future.
What the Alligator does?
The Alligator identifies trending & non-trending markets. It also specifies the direction of the trend.
Basic Rules
If all three lines are intertwined, the Alligator is asleep and the market is range-bound. The longer it sleeps, the hungrier it gets. When it wakes up from a long sleep it chases the price much farther, therefore price movements are much stronger.
When the Alligator is asleep, stay away.
If the Alligator is not asleep, the market is either[b] uptrending or downtrending:
- if the price is above the Alligator’s mouth then it’s an uptrend;
- if the price is below the Alligator’s mouth then it’s a downtrend.
Once the Alligator wakes up, it opens its mouth (the three lines diverge) and starts hunting. Having eaten enough, it goes to sleep again (the three Lines converge), so it’s time to take profits.
Quick tips how to use "William Alligator"
Buy when candelstick is above the blue line (jaws) / Pass Jaws line.
Sell when candelstick is under / pass jaws line.
If knows I will hope discussion to all. regards...
This is an accurate Alligator indicator based on the mid price and smoothed as Bill Williams specifies. This Alligator is also projected into the future as Williams prefers.
Bill Williams describes the Alligator as being like a compass which keeps your trading in the right direction. The Alligator helps you spot a real trend and stay out of range-bound trading, which always result in losses. The Alligator is the combination of three balance lines:
Alligator’s Jaw (the blue line) – 13-period moving average at the mid price (High+Low)/2, which is offset 8 bars into the future;
Alligator’s Teeth (the red line) – 8-period moving average at the mid price (High+Low)/2, which is offset 5 bars into the future;
Alligator’s Lips (the green line) – 5-period moving average at the mid price (High+Low)/2, which is offset 2 bars into the future.
What the Alligator does?
The Alligator identifies trending & non-trending markets. It also specifies the direction of the trend.
Basic Rules
If all three lines are intertwined, the Alligator is asleep and the market is range-bound. The longer it sleeps, the hungrier it gets. When it wakes up from a long sleep it chases the price much farther, therefore price movements are much stronger.
When the Alligator is asleep, stay away.
If the Alligator is not asleep, the market is either[b] uptrending or downtrending:
- if the price is above the Alligator’s mouth then it’s an uptrend;
- if the price is below the Alligator’s mouth then it’s a downtrend.
Once the Alligator wakes up, it opens its mouth (the three lines diverge) and starts hunting. Having eaten enough, it goes to sleep again (the three Lines converge), so it’s time to take profits.
Quick tips how to use "William Alligator"
Buy when candelstick is above the blue line (jaws) / Pass Jaws line.
Sell when candelstick is under / pass jaws line.
09 July 2011
afl links
http://www.traderszone.com/personal-trading-systems/
http://www.wisestocktrader.com/indicators/990-atr-based-trailing-stop
http://www.traderszone.com/trading-software-exchange/1684-atr-based-stoploss-buy-sell-afl.html
http://www.wisestocktrader.com/indicators/1504-countback
http://www.wisestocktrader.com/indicators/990-atr-based-trailing-stop
http://www.traderszone.com/trading-software-exchange/1684-atr-based-stoploss-buy-sell-afl.html
http://www.wisestocktrader.com/indicators/1504-countback
Subscribe to:
Posts (Atom)
My Blog List
Total Pageviews
Search This Blog
Followers
Blog Archive
-
▼
2011
(71)
-
▼
July
(17)
- csv
- SUCCESS!!!???
- example afl write
- example afl write
- example afl write
- BASIC AFL
- AFL LINKS
- VSA links
- Projection Oscillator for AmiBroker for Amibroker ...
- How to Set Protective Stops Using the Wave Principle
- William Alligator
- William Alligator
- afl links
- Turtle Trading System:
- Ilmu Saham | ISX Stock Market Resource Center AMIB...
- Economic and Technical Market Indicators for Stock...
- How Do I Determine My Stock Sell Points?
-
▼
July
(17)