Stock Portfolio Organizer
The ultimate porfolio management solution.
Shares, Margin, CFD's, Futures and Forex
EOD and Realtime
Dividends and Trust Distributions
And Much More ....
WiseTrader Toolbox
#1 Selling Amibroker Plugin featuring:
Advanced Adaptive Indicators
Advanced Pattern Exploration
Neural Networks
And Much More ....
Candlesticks, Condensed for Amibroker (AFL)
Rating:
3 / 5 (Votes 3)
Tags:
amibroker, exploration
Candlesticks, Condensed
Indicator / Formula
Copy & Paste Friendly
//Candlesticks, Condensed
// original written by pasha dave re written by dave in stocks and commodities
SegmentCount = 5;
SegmentDivisor = 100 / SegmentCount;
CandleRange = High - Low;
AvgRange = MA( CandleRange, 6 );
RangeMultiplier = CandleRange / AvgRange;
CandleRange /= 100;
RangeMultiplier = Min( RangeMultiplier, 1 );
HO = round( ( RangeMultiplier * ( High - Open ) / CandleRange ) / SegmentDivisor );
HC = round( ( RangeMultiplier * ( High - Close ) / CandleRange ) / SegmentDivisor );
OL = round( ( RangeMultiplier * ( Open - Low ) / CandleRange ) / SegmentDivisor );
DigitMult = SegmentCount + 1;
// signature is encoded to fit into integer
CandleSignature = DigitMult * DigitMult * HO + DigitMult * HC + OL;
Title = Name() + " " + Date() + " " + StrFormat( "Signature %.0f:%.0f:%.0f", HO, HC, OL );
Plot( C, "Close", colorDefault, styleCandle );
Filter = False;
// statistics
Pct1P = Pct2P = Pct3P = Pct4P = 0;
Avg1P = Avg2P = Avg3P = Avg4P = 0;
// count of occurrence of patterns
Cnt = 0;
MaxSegment = SegmentCount * DigitMult * DigitMult + SegmentCount * DigitMult + SegmentCount;
if( BarCount > MaxSegment )
{
// changes over 1..4 periods
// you can change it to Close - Ref( Close, -1 )
// to get dollar gains instead of percent changes
Chg1P = ROC( Close, 1 );
Chg2P = ROC( Close, 2 );
Chg3P = ROC( Close, 3 );
Chg4P = ROC( Close, 4 );
// number of times given pattern is followed by UP movement
Up1P = Up2P = Up3P = Up4P = 0;
// gain
Gain1P = Gain2P = Gain3P = Gain4P = 0;
for( i = 0; i < BarCount - 4; i++ )
{
sig = CandleSignature[ i ];
if( sig >= 0 && sig <= MaxSegment )
{
Cnt[ sig ]++; // increase occurrence counter for given sig
// if change > 0 increase UP counter
Up1P[ sig ] += Chg1P[ i + 1 ] > 0;
// add change to total gain
Gain1P[ sig ] += Chg1P[ i + 1 ];
Up2P[ sig ] += Chg1P[ i + 2 ] > 0;
Gain2P[ sig ] += Chg1P[ i + 2 ];
Up3P[ sig ] += Chg1P[ i + 3 ] > 0;
Gain3P[ sig ] += Chg1P[ i + 3 ];
Up4P[ sig ] += Chg4P[ i + 1 ] > 0;
Gain4P[ sig ] += Chg4P[ i + 1 ];
}
}
for( sig = 0; sig <= MaxSegment; sig++ )
{
// if any patterns of given signature were found
if( Cnt[ sig ] )
{
qty = Cnt[ sig ];
Pct1P[ sig ] = Up1P[ sig ] / qty;
Pct2P[ sig ] = Up2P[ sig ] / qty;
Pct3P[ sig ] = Up3P[ sig ] / qty;
Pct4P[ sig ] = Up4P[ sig ] / qty;
Avg1P[ sig ] = Gain1P[ sig ] / qty;
Avg2P[ sig ] = Gain2P[ sig ] / qty;
Avg3P[ sig ] = Gain3P[ sig ] / qty;
Avg4P[ sig ] = Gain4P[ sig ] / qty;
}
}
Filter = Cnt;
}
else
{
PopupWindow("Not enough bars in " + Name() + " Please select symbols that have more than " +
MaxSegment + " bars", "Problem" );
}
// multiply factors by 100 to get percents
Pct1P *= 100;
Pct2P *= 100;
Pct3P *= 100;
Pct4P *= 100;
bi = BarIndex();
Sig1 = bi % DigitMult;
Sig2 = floor( bi / DigitMult ) % DigitMult;
Sig3 = floor( bi / ( DigitMult * DigitMult ) );
Signature = 100 * Sig3 + 10 * Sig2 + Sig1;
SetOption("NoDefaultColumns", True );
AddTextColumn( Name(), "Symbol" );
AddColumn( Signature, "Signature", 3.0 );
AddColumn( Cnt, "Count", 1.0 );
AddColumn( Pct1P, "Pct1P%", 1.1 );
AddColumn( Pct2P, "Pct2P%", 1.1 );
AddColumn( Pct3P, "Pct3P%", 1.1 );
AddColumn( Pct4P, "Pct4P%", 1.1 );
AddColumn( Avg1P, "Avg1P%", 1.1 );
AddColumn( Avg2P, "Avg2P%", 1.1 );
AddColumn( Avg3P, "Avg3P%", 1.1 );
AddColumn( Avg4P, "Avg4P%", 1.1 );
3 comments
Leave Comment
Please login here to leave a comment.
Back
hi,can you describe your indicator please with a pict even better
tks
needs a semicolon end line 69
Thanks davidalan