Stock Portfolio Organizer

The ultimate porfolio management solution.

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

WiseTrader Toolbox

#1 Selling Amibroker Plugin featuring:

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

Price Break Indicator for Amibroker (AFL)

Copy & Paste Friendly
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
_SECTION_BEGIN("3 Price Break");
Title = Name()+ " Price Break Indicator." ;
//+ "  Trend is " + Trend_Text + ".  SEQUENCE IS " + Sequence_Text;
Plot(C,Title,colorBlack,styleCandle);
 
/////////   Parameters  ////////
 
nBars_To_Scan = Param("Number of bars to Scan",20, 10,480, 10);     //Number of bars to include in scan
PB_Interval = Param("Number of Bars for Price Break",3,2,3,1);
 
/////////  Use Array of Prices and Price Breaks to Look Back and Determine What Price Break is For Current Bar
Seedbar = nBars_To_Scan + 1;                    //Need an initial value to start the PB process
if (BarCount > Seedbar)                      //Make sure there are enough bars available to evaluate
{
                                             
Price[0]= LastValue(Ref(C,-Seedbar));           //Seed the 0 Bar in the Array with Values
Trend[0]=1;                                     //1 = Long, 0=Short
Sequence[0]=0;                                  //Sequence counter - counts number of new price breaks
Price_Break[0] = LastValue(Ref(C,-Seedbar));
High_C1[0] = LastValue(Ref(C,-Seedbar));        //Highest Close 1 Ago
High_C2[0]= LastValue(Ref(C,-Seedbar));         //Highest Close 2 Ago
High_C3[0]= LastValue(Ref(C,-Seedbar));         //Highest Close 3 Ago
Low_C1[0] = LastValue(Ref(C,-Seedbar));         //Lowest Close 1 Ago
Low_C2[0] = LastValue(Ref(C,-Seedbar));         //Lowest Close 2 Ago
Low_C3[0] = LastValue(Ref(C,-Seedbar));         //Lowest Close 3 Ago
                                             
for ( i=1; i < Seedbar ; i++)            //Cycle through prices filling in price array and caculating price breaks
{                                          
    Prior = i-1;                                    //Index for Prior entry in array.  Set the current array values to
    Trend[i]=Trend[Prior];                      //prior values to make sure everything that isn't changed later
    Price_Break[i] = Price_Break[Prior];            //gets carried forward to the next row in the array.
            Low_C1[i] = Low_C1[Prior];          //Carryover current values
            Low_C2[i] = Low_C2[Prior];
            Low_C3[i] = Low_C3[Prior]; 
            High_C1[i] = High_C1[Prior];            //Carryover current values
            High_C2[i] = High_C2[Prior];
            High_C3[i] = High_C3[Prior];
            Sequence[i] = Sequence[Prior];
 
    Price[i] = LastValue (Ref (C,-(Seedbar-i)));    //Seedbar is the bar just in front of where I start the method.  Works since i starts at 1
 
    if (Price[i] >Price[Prior] AND Trend[Prior] == 1 )   // If Close is Greater than the prior close And the Trend is Long
    {       if (Price[i] >High_C1[Prior])            //If the Close is greater than the last highest close
            {                                   //Test For Price Break.  The IIF is there to accomodate a 2 price or 3 price break option
                                                //based on the PB_Interval parameter
            Price_Break[i] = IIf(PB_Interval == 3,High_C3[Prior],IIf(PB_Interval == 2,High_C2[Prior],High_C3[Prior])); 
                                                //The 3PB method says I take the highest close 4 ago as the new price break.
            Sequence[i] = Sequence[i] + 1;      //Increment Sequence if Price Break
            High_C3[i] = High_C2[Prior];            //Stacking the higher closes like this avoids having to go back and iterate through the.
            High_C2[i] = High_C1[Prior];            //closes to find and count the higher closes.  They are just carried forward in the stack.
            High_C1[i] = Price[i];              //When a higher close occurs, it is put on the top of the stack, each close below is
            }                                   //pushed down in sequence, and the earliest (farthest back) close goes away.
    }      
 
    if (Price[i] >Price[Prior] AND Trend[Prior] == 0 )   // If Close is Greater than the prior close And the Trend is Short
    {       if (Price[i] >Price_Break[Prior])        //If Close > Price Break in trend is Short, Reverse and go Long
            {
            High_C1[i] = High_C2[i] = High_C3[i] = Price[i];                //Initialize sequence of new Highs
            Price_Break[i] = Price[i];              //Set new value for Price Break
            Trend[i] = 1;                           //Set the trend Long
            Sequence = 0;
            }
    }      
 
    if (Price[i] <Price[Prior] AND Trend[Prior] ==0) // If The Close is less than the prior close And the Trend is Short
    {       if (Price[i] <Low_C1[Prior])         //If the Close is less than the last lowest close
            {
            Price_Break[i] = IIf(PB_Interval == 3,Low_C3[Prior],IIf(PB_Interval == 2,Low_C2[Prior],Low_C3[Prior])); //Test For Price Break
            Sequence[i] = Sequence[i] + 1;      //Increment Sequence if Price Break
            Low_C3[i] = Low_C2[Prior];          //Update sequence of new Lows
            Low_C2[i] = Low_C1[Prior];
            Low_C1[i] = Price [i];
            }
    }      
 
    if (Price[i] <Price[Prior] AND Trend[Prior] ==1) // If The Close is less than the prior close And the Trend is Long
    {       if (Price[i] < Price_Break[Prior])               //If Close < Price Break in Long Trend, reverse and go Short
            {
            Low_C1[i] = Low_C2[i] = Low_C3[i] = Price[i];   //Initialize sequence of new Lows
            Price_Break[i] = Price[i];                          //Set new value for Price Break
            Trend[i] = 0;                               //Set Trend Short
            Sequence = 0;
            }
    }      
 
////  Plot the Price Breaks.
Bar_x1=BarCount - (nBars_To_Scan - Prior );
Bar_x2=BarCount - ( nBars_To_Scan - i);
PB_Color = IIf(Trend[i] == 1,colorGreen, colorRed);
Plot(LineArray(Bar_x1,Price_Break[i],Bar_x2,Price_Break[i],extend=0),"",PB_Color,styleThick);
Sequence_Text = NumToStr(Sequence,format=1.0);
Trend_Text = WriteIf(Trend[i] > 0, "Long","Short");
 
}                                               //Close the For Loop
 
}                                               //Close the first test for sufficient bars to do the study
_SECTION_END();
 
 
SetChartOptions(0,chartShowArrows|chartShowDates);
GraphXSpace=5;
Plot(C,"",colorBlack,styleCandle);
 
_SECTION_BEGIN("Magnified Market Price");
//by Vidyasagar, (E? ??? C?????? ??? ???? ?IC?? ?O??? C???EI?)//
FS=Param("Font Size",35,11,100,1);
GfxSelectFont("Times New Roman", FS, 700, True );
GfxSetBkMode( colorWhite );
GfxSetTextColor( ParamColor("Color",colorGreen) );
Hor=Param("Horizontal Position",750,1,1200,1);
Ver=Param("Vertical Position",1,1,830,1);
GfxTextOut(""+C, Hor , Ver );
YC=TimeFrameGetPrice("C",inDaily,-1);
DD=Prec(C-YC,2);
xx=Prec((DD/YC)*100,2);
GfxSelectFont("Times New Roman", 11, 700, True );
GfxSetBkMode( colorWhite );
GfxSetTextColor(ParamColor("Color",colorGreen) );
GfxTextOut(""+DD+" ("+xx+"%)", Hor , Ver+45 );
_SECTION_END();
 
 
_SECTION_BEGIN("Price");
//SetChartBkColor( colorBlack );
Col_1 = IIf(EMA(RSI(39),30) > Ref(EMA(RSI(39),30),-1),colorGreen,colorRed);
//Plot( C, "", col_1, styleBar);
Plot(C,"",Col_1,128);
 
_SECTION_END();
 
Plot(EMA(C,10), "EMA(10)", colorRed, styleLine| styleNoLabel);
Plot(EMA(C,50), "EMA(50)", colorBlue, styleLine| styleNoLabel);
Plot(MA(C,200), "MA(200)", colorRed, styleThick| styleNoLabel);
_SECTION_END();
 
_SECTION_BEGIN("Phase");
RCP = C > EMA(C,50) AND EMA(C,50) < MA(C,200); // Recovery                         Blue
ACP = C > EMA(C,50) AND C > MA(C,200) AND EMA(C,50) < MA(C,200); // Accumulation   seagreen
BLP = C > EMA(C,50) AND C > MA(C,200) AND EMA(C,50) > MA(C,200); // Bullish        Limegreen
WRP = C < EMA(C,50) AND EMA(C,50) > MA(C,200); // Warning                          Pink
DSP = C < EMA(C,50) AND C < MA(C,200) AND EMA(C,50) > MA(C,200); // Distribution   Orange
BRP = C < EMA(C,50) AND C < MA(C,200) AND EMA(C,50) < MA(C,200); // Bearish        Red
 
//Plot( 1, "", IIf(RCP, colorBlue, IIf(ACP, colorSeaGreen, IIf(BLP, colorDarkGreen, IIf(WRP, colorOrange, IIf(DSP, colorRed, IIf(BRP, colorDarkRed, 0)))))), styleOwnScale|styleArea|styleNoLabel, -0.1, 50 );
Plot( 1, "", IIf(RCP, colorBlue, IIf(ACP, colorAqua, IIf(BLP, colorLime, IIf(WRP, colorPink, IIf(DSP, colorOrange, IIf(BRP, colorRed, 0)))))), styleOwnScale|styleArea|styleNoLabel, -0.1, 50 );
 
Buy_cross1050 = Cross(EMA(Close,10),EMA(Close,50));
 
Sell_cross1050 = Cross(EMA(Close,50),EMA(Close,10));
 
 
 
Buy_cross1050 = ExRem(Buy_cross1050, Sell_cross1050  );
sell_cross1050 = ExRem(sell_cross1050, buy_cross1050  );
dist = 1.5*ATR(10);
for( i = 0; i < BarCount; i++ )
{
 
HH1 = HHV(H,20);
LL1 = LLV(L,20);
 
if( Buy_cross1050[i] ) PlotText( "A=" + HH1[ i ], i, L[ i ]-dist[i], colorBlack, colorLime);
if( sell_cross1050[i] ) PlotText( "A=" + LL1[ i ], i, H[ i ]+dist[i], colorLightYellow, colorRed);
}
 
 
PlotShapes(Buy_cross1050*shapeUpArrow,colorGreen, 0, Low, Offset =-12);
PlotShapes(sell_cross1050*shapeDownArrow,colorRed, 0, High, Offset =-12);
 
pds = 20;
DonchianUpper =HHV(Ref(H,-1),pds);
DonchianLower = LLV(Ref(L,-1),pds);
 
 
Buy_Price = C;
Sell_Price = C;
 
BuySL  = DonchianLower ;
SellSL = DonchianUpper;
 
BPdiff = HH1 - BuySL ;
SPdiff = LL1 - SellSL;
 
SwingBuy = (BPdiff/BuySL)*100 ;
SwingSell = (SPdiff/SellSL)*100 ;
 
BuyTarget = Buy_Price + BPdiff ;
SellTarget = Sell_Price + SPdiff ;
 
 
 
// Exploration
 
Filter=Buy_cross1050 OR sell_cross1050;// OR Buy_cross10200 OR sell_cross10200;// OR Buy_cross50200 OR sell_cross50200;
mytimenum = DateTimeConvert( 1, DateTime() );
 
AddColumn( IIf(Buy_cross1050,C,IIf(sell_cross1050,-C,Null)) ,"A=Cross",1.1,colorBlack,IIf(Buy_cross1050,colorLightGrey,IIf(sell_cross1050,colorLightGrey,colorLightGrey)));
AddColumn( IIf(Buy_cross1050,HH1,IIf(sell_cross1050,-LL1,Null)) ,"Enter",1.1,colorBlack,IIf(Buy_cross1050,colorGreen,IIf(sell_cross1050,colorRed,colorLightGrey)));
AddColumn( IIf(Buy_cross1050 ,Prec(SwingBuy,1),IIf(Sell_cross1050 ,Prec(SwingSell,1),Null)) ,"%SWING",1.1,colorBlack,IIf(Buy_cross1050 ,colorLightGrey,IIf(Sell_cross1050 ,colorLightGrey,colorLightGrey)));
 
AddColumn( mytimenum,"TimeNum",colorBlack);
SetSortColumns(-6);
_SECTION_END();
 
_SECTION_BEGIN( "Fundamental Data" );
 
    if ( ParamToggle( "Show Columns in AA", "Off,On", 1 ) )
    {
        AddColumn( GetFnData( "EPS" ), "EPS" );
        AddColumn( GetFnData( "EPSEstCurrentYear" ), "EPS Est Current Year" );
        AddColumn( GetFnData( "EPSEstNextYear" ), "EPS Est Next Year" );
        AddColumn( GetFnData( "EPSEstNextQuarter" ), "EPS Est Next Quarter" );
        AddColumn( GetFnData( "PEGRatio" ), "PEG Ratio" );
        AddColumn( GetFnData( "SharesFloat" ), "Shares Float", 1.0 );
        AddColumn( GetFnData( "SharesOut" ), "Shares Out", 1.0 );
        AddColumn(GetFnData("DividendPayDate"),"Dividend Pay Date");
        AddColumn(GetFnData("ExDividendDate"),"Ex Dividend Date");
        AddColumn( GetFnData( "BookValuePerShare" ), "Book Value Per Share" );
        AddColumn( GetFnData( "DividendPerShare" ), "Dividend Per Share" );
        AddColumn( GetFnData( "ProfitMargin" ), "Profit Margin" );
        AddColumn( GetFnData( "OperatingMargin" ), "Operating Margin" );
        AddColumn( GetFnData( "OneYearTargetPrice" ), "One Year Target Price" );
        AddColumn( GetFnData( "ReturnOnAssets" ), "Return On Assets" );
        AddColumn( GetFnData( "ReturnOnEquity" ), "Return On Equity" );
        AddColumn( GetFnData( "QtrlyRevenueGrowth" ), "Qtrly Revenue Growth" );
        AddColumn( GetFnData( "GrossProfitPerShare" ), "Gross Profit Per Share" );
        AddColumn( GetFnData( "SalesPerShare" ), "Sales Per Share" );
        AddColumn( GetFnData( "EBITDAPerShare" ), "EBITDA Per Share" );
        AddColumn( GetFnData( "QtrlyEarningsGrowth" ), "Qtrly Earnings Growth" );
        AddColumn( GetFnData( "InsiderHoldPercent" ), "Insider Hold Percent" );
        AddColumn( GetFnData( "InstitutionHoldPercent" ), "Institution Hold Percent" );
        AddColumn( GetFnData( "SharesShort" ), "Shares Short", 1.0 );
        AddColumn( GetFnData( "SharesShortPrevMonth" ), "Shares Short Prev Month", 1.0 );
        AddColumn( GetFnData( "ForwardDividendPerShare" ), "Forward Dividend Per Share" );
        AddColumn( GetFnData( "ForwardEPS" ), "Forward EPS" );
        AddColumn( GetFnData( "OperatingCashFlow" ), "Operating Cash Flow", 1.0 );
        AddColumn( GetFnData( "LeveredFreeCashFlow" ), "Levered Free Cash Flow", 1.0 );
        AddColumn( GetFnData( "Beta" ), "Beta" );
        AddColumn( GetFnData( "LastSplitRatio" ), "Last Split Ratio" );
        AddColumn(GetFnData("LastSplitDate"),"Last Split Date");
    }
 
    _SECTION_END();
Back