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 ....
Market Profile for Amibroker (AFL)
Rating:
5 / 5 (Votes 1)
Tags:
market profile, amibroker, intraday
Calculate the market profile.
Similar Indicators / Formulas
OHLC indicator
Submitted
by godisbogus about 15 years ago
1 Minute inside 6 bar consolidation
Submitted
by alvaroaltair almost 11 years ago
INTRADAY AVERAGE VOLUME
Submitted
by shethia over 14 years ago
MultiCharts
Submitted
by janet0211 almost 15 years ago
Real Time Daily Price Levels
Submitted
by kaiji about 15 years ago
MPLite --KAKA+ Heinkin Ashi +NickMA
Submitted
by bestnifty almost 15 years ago
Indicator / Formula
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 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 | _SECTION_BEGIN ( "MarketProfile" ); //------------------------------------------------------------------------------ // // Formula Name: Market Profile // // Use with 5/15min chart // Originial - From AFL library // Edited by - Milind / KAKA //Market Profile 10/12/2009 //------------------------------------------------------------------------------ // This is a modified version of afl date 09/19/2009 as listed above // Contains a couple changes: // 1) a more correct (but not complete) calculation of POC. // 2) attempt to avoid the out of bound runtime error that // sometimes occurs. See below: // // Here are changes to emulate the arrays x[] and total[] so // that the array size are not limited by Barcount. // Now one probably should not get the out of bound error even // if the density or ticksize is smaller. Of course, there will // be more overhead in calculation. // johncw 20091010 // Wrapper start _N (VarKey = NumToStr ( GetChartID (), 1.0, False ) + "_" ); _N (VarTotal = "V_T" + VarKey); _N (VarX = "V_x" + VarKey); function L_StaticVarSet(L_name, L_value) { local L_name, L_value; StaticVarSet (L_name + VarKey, L_value); } function L_StaticVarGet(L_name) { local L_name; return ( StaticVarGet (L_name + VarKey)); } function x_g(L_idx) { local L_idx; return VarGet (VarX + L_idx); } function x_s(L_idx, L_value) { local L_idx, L_value; VarSet (VarX + L_idx, L_value); } function total_g(L_idx) { local L_idx; return VarGet (VarTotal+L_idx); } function total_s(L_idx, L_value) { local L_idx, L_value, L_name; VarSet (VarTotal+L_idx, L_value); } // Wrapper end //------------------------------------------------------------------------------ PlotOHLC ( O , H , L , C , "Price" , IIf ( C > O , colorGreen , colorRed ), styleCandle ); EnMP2= ParamList ( "MarketProfile" , "Solid|Lines|Letters" ); styleLines = ParamStyle ( "Style" , styleLine , maskAll ); Type= ParamList ( "Type" , "Price Profile|Volume Profile" ); Period= ParamList ( "Base" , "Hourly|Daily|Weekly|Monthly" ,1); Den = Param ( "Density" , 1, 0.25, 100, 0.25); // Resolution in terms of $ percent= Param ( "Value Area" , 70, 1, 100, 1); ViewTPOCount= ParamToggle ( "Show TPO Count" , "No|Yes" ,1); Viewvalues= ParamToggle ( "Show Values" , "No|Yes" ,1); ViewPREVIOUS = ParamToggle ( "Previous Values" , "No|Yes" ,1); ViewVALVAH = ParamToggle ( "Show VAL VAH Line" , "No|Yes" ,1); Viewfill = ParamToggle ( "Show VA Fill" , "No|Yes" ,0); Colorpoc= ParamColor ( "Color POC" , colorYellow ); Colorfill= ParamColor ( "Color Fill" , ColorRGB (20,40,60)); EnIB = ParamToggle ( "Show Initial Balance" , "Yes|No" ); IBBars = Param ( "Initial Balance Bars" , 2, 0, 10, 1); if (Period== "Daily" ){ BarsInDay = BarsSince ( Day () != Ref ( Day (), -1)); Bot = TimeFrameGetPrice ( "L" , inDaily , 0); Top = TimeFrameGetPrice ( "H" , inDaily , 0); Vol = TimeFrameGetPrice ( "V" , inDaily , 0); } if (Period== "Hourly" ){ BarsInDay = BarsSince ( Minute () != Ref ( Minute (), -1)); Bot = TimeFrameGetPrice ( "L" , in5Minute , 0); Top = TimeFrameGetPrice ( "H" , in5Minute , 0); Vol = TimeFrameGetPrice ( "V" , in5Minute , 0); } if (Period== "Weekly" ){ BarsInDay = BarsSince ( DayOfWeek () < Ref ( DayOfWeek (), -1 )); Bot = TimeFrameGetPrice ( "L" , inWeekly , 0); Top = TimeFrameGetPrice ( "H" , inWeekly , 0); Vol = TimeFrameGetPrice ( "V" , inWeekly , 0); } if (Period== "Monthly" ){ BarsInDay = BarsSince ( Month () != Ref ( Month (), -1)); Bot = TimeFrameGetPrice ( "L" , inMonthly , 0); Top = TimeFrameGetPrice ( "H" , inMonthly , 0); Vol = TimeFrameGetPrice ( "V" , inMonthly , 0); } CurTop = HHV ( H ,BarsInDay+1); Curbot = LLV ( L ,BarsInDay+1); Range = Highest (Top-Bot); TodayRange = Top - Bot; AveRange = Sum (Top-Bot,30)/30; LAveRange = AveRange[ BarCount -1]; // Initialization baseX = 0; baseY = floor (Bot[0]/Den)*Den; relTodayRange = 0; firstVisBar = Status ( "firstvisiblebar" ); lastVisBar = Status ( "lastvisiblebar" ); D=.0005; //total=0; totaldn=0; totalup=0; shiftup=0; shiftdn=0; startr=0; i0 = 0; i1 = 0; for (i=0; i< BarCount ; i++) { x_s(i, 0); // should not need this if (BarsInDay[i] == 0 AND i < firstVisBar) { i0 = i; } if (BarsInDay[i] == 0 AND i >= lastVisBar) { i1 = i; } } i1 = BarCount -1; for (i=i0; i<=i1; i++) { if (BarsInDay[i] == 0) { baseX = i; baseY = floor (Bot[i]/Den)*Den; maxY = floor (Top[i]/Den)*Den; relTodayRange = (maxY-baseY)/Den; for (j=0; j <= relTodayRange; j++) { x_s(j, 0); } } range_x=lastVisBar-firstVisBar; spread = Param ( "X Space" , 80, 1, 200, 1); tpl = Param ( "Time Per Letter (mins)" , 30, 1, 360, 1); Intervalmin= Interval ()/60; flt = Param ( "First Letter (Bars)" , 1, 1, 60, 1); teb= ParamToggle ( "To Each Bar" , "No|Yes" ); Color= Param ( "Color Threshold" ,20,1,50,1); stopg=0; stopr=0; new=0; Voloumeunit=Vol[i]/ LastValue (BarsInDay); if (EnMP2 == "Letters" ) { for (j=0; j<= relTodayRange; j++) { if ( L [i] <= baseY+j*Den AND H [i] >= baseY+j*Den) { PlotText ( StrExtract ( " A , B , C , D , E , F , G , H , I , J , K , L , M , N , O , P , Q , R , S , T , U , V , W , X , Y , Z, a , b , c , d , e , f , g , h , i , j , k , L , m , n ,o , p , q , r , s , t , u , v , w , x , y , z " , IIf (BarsInDay[i]<flt,0, ceil (BarsInDay[i]/(tpl/Intervalmin))-0)), baseX+ IIf (teb==1,BarsInDay[i],x_g(j)*(range_x/spread)), baseY+j*Den, colorWhite , ColorHSB (10+(( ceil (BarsInDay[i]/(tpl/Intervalmin)))*Color),160,140)); x_s(j, x_g(j)+1); } } } else if (EnMP2 == "Lines" OR EnMP2 == "Solid" ) { for (j=0; j<= relTodayRange; j++) { if ( L [i] <= baseY+j*Den AND H [i] >= baseY+j*Den) { if (Type== "Price Profile" ){x_s(j, x_g(j)+1);} else if (Type== "Volume Profile" ){x_s(j, x_g(j)+ round ( V [i]/Voloumeunit));} } } } // Draw Initial Balance after 11am bar is complete if (BarsInDay[i] == IBBars+1 AND EnIB == 0) { Line1 = LineArray (i-2, curtop[i-1],i+7, curtop[i-1],0, True ); Plot (Line1, "" , colorLightGrey , styleLine + styleDashed | styleNoRescale ); Line1 = LineArray (i-2, curbot[i-1],i+7, curbot[i-1],0, True ); Plot (Line1, "" , colorLightGrey , styleLine + styleDashed | styleNoRescale ); } // Examine x[j] if ((i < BarCount - 1 AND BarsInDay[i+1] == 0) OR i == BarCount -1) { maxXj = 0; maxj = 0; midrange = int (relTodayRange/2)+1; for (j=0; j<= relTodayRange; j++) { if (maxXj < x_g(j)) { maxXj = x_g(j); maxj = j; L_StaticVarSet( "Maxj" ,j); new=j; } else if ( MaxXj == x_g(j)) { if ( abs (midrange-j) < abs (midrange-L_StaticVarGet( "Maxj" ))) { maxXj = x_g(j); maxj = j; L_StaticVarSet( "Maxj" ,j); new=j; } } } total_s(0, 0); for ( n = 1; n <= relTodayRange; n++ ) { total_s(n, x_g(n) + total_g(n-1)); } Value_area=(total_g(relTodayRange)*percent)/100; for ( a = 1; a <= relTodayRange; a++ ) { if (Maxj-a>0 AND Maxj+a<relTodayRange) { if (MaxXj+total_g(Maxj+a)-total_g(Maxj)+(total_g(maxj)-MaxXj)-total_g(Maxj-(a+1))>=Value_area) {shiftup=a; shiftdn=a; break ;} } else if (Maxj-a<1 ) { if (MaxXj+total_g(Maxj+a)-total_g(Maxj)+(total_g(maxj)-MaxXj)>=Value_area){shiftup=a; shiftdn=maxj-1; break ;} } else if (Maxj+a>relTodayRange ) { if (MaxXj+total_g(relTodayRange)-total_g(Maxj)+(total_g(maxj)-MaxXj)-total_g(Maxj-(a+1)) >=Value_area){shiftup=relTodayRange-maxj; shiftdn=a; break ;} } } Vah = LineArray (baseX, baseY+(maxj+shiftup)*Den, i, baseY+(maxj+shiftup)*Den,0, True ); Val = LineArray (baseX, baseY+(maxj-shiftdn)*Den, i, baseY+(maxj-shiftdn)*Den,0, True ); Vah1 = LineArray (i, baseY+(maxj+shiftup)*Den, i+BarsInDay[i], baseY+(maxj+shiftup)*Den,0, True ); Val1 = LineArray (i, baseY+(maxj-shiftdn)*Den, i+BarsInDay[i], baseY+(maxj-shiftdn)*Den,0, True ); poc = LineArray (baseX, baseY+maxj*Den, i, baseY+maxj*Den,0, True ); poc1 = LineArray (i, baseY+maxj*Den, i+BarsInDay[i], baseY+maxj*Den,0, True ); if (ViewVALVAH==1) { Plot (Vah, "" , ParamColor ( "Color_VA" , colorBlueGrey ), styleLine | styleNoRescale ); Plot (Val, "" , ParamColor ( "Color_VA" , colorLightBlue ), styleLine | styleNoRescale ); Plot (poc, "" ,Colorpoc, styleLine | styleNoRescale ); } if (ViewPREVIOUS==1) { Plot (Vah1, "" , ParamColor ( "Color_VA" , colorBlueGrey ), styleDashed | styleNoRescale ); Plot (Val1, "" , ParamColor ( "Color_VA" , colorLightBlue ), styleDashed | styleNoRescale ); Plot (poc1, "" ,Colorpoc, styleDashed | styleNoRescale ); } if (Viewvalues==1) { PlotText ( "" +(baseY+maxj*Den),i-5,baseY+maxj*Den,Colorpoc); PlotText ( "" +(baseY+(maxj+shiftup)*Den),i-5,baseY+(maxj+shiftup)*Den, colorWhite ); PlotText ( "" +(baseY+(maxj-shiftdn)*Den),i-5,baseY+(maxj-shiftdn)*Den, colorWhite ); if (ViewTPOCount==1){ PlotText ( "" +(total_g(maxj)-MaxXj)+ " / " +(total_g(maxj-shiftdn-1)),basex,bot[i]-(Top[i]-bot[i])*0.05, ParamColor ( "Color_Below_VA" , colorGrey40 )); PlotText ( "" +(total_g(relTodayRange)-total_g(maxj))+ " / " +(total_g(relTodayRange)-total_g(maxj+shiftup)),basex,Top[i], ParamColor ( "Color_Above_VA" , colorGrey40 )); } } } if (i < BarCount - 1 AND BarsInDay[i+1] == 0 OR i == BarCount -1) { for (p = 1; p < relTodayRange+1; p++){ line = LineArray (baseX, baseY+p*Den, baseX+x_g(p), baseY+p*Den); line2 = LineArray (baseX, baseY+(p-1)*Den, baseX+x_g(p-1), baseY+(p-1)*Den); if (EnMP2 == "Solid" ) { PlotOHLC ( Line, Line, Line2, Line2, "" , IIf (p>(maxj+shiftup), ParamColor ( "Color_Above_VA" , colorGrey40 ), IIf (p<=(maxj+shiftup) AND p>(maxj-shiftdn), ParamColor ( "Color_VA" , colorBlueGrey ), ParamColor ( "Color_Below_VA" , colorGrey40 ))) , styleCloud | styleNoRescale | styleNoLabel ); } if (EnMP2 == "Lines" ) { Plot (line, "" , IIf (p>(maxj+shiftup), ParamColor ( "Color_Above_VA" , colorGrey40 ), IIf (p<=(maxj+shiftup) AND p>(maxj-shiftdn), ParamColor ( "Color_VA" , colorBlueGrey ), ParamColor ( "Color_Below_VA" , colorGrey40 ))) , styleLines| styleNoLabel ); } } if (Viewfill==1){ PlotOHLC (Vah,Vah,Val,Val, "" ,Colorfill, styleCloud | styleNoRescale | styleNoLabel );} } } _SECTION_END (); |
5 comments
Leave Comment
Please login here to leave a comment.
Back
Recently was looking into this AFL in TJ.
Found that there are bugs, not properly done and check before uploading to here.
1) On line 102-107 for hourly timeframe
KH:Why hourly is using Minute() ?
KH:Why use in5Minute and not inHourly
2) Hourly timeframe cannot be used.
=> Because the Plot()/PlotOHLC() were using in the huge looping, this will cause the amibroker raise the exception of more than 500 calls.
Therefore not suggest to use in hourly timeframe set.
3) The program seen to me there are bugs which not able to figure yet regardless of timeframe set. It keep plotting the Vah & Val, Vah1 & val1, and overwrite the plotting of Poc/Poc1 (Yellow color) and never appear.
Also I doubt the algorithm is correct.
Please kindly solve the problem.
If not, i don’t suggest anyone use this script in hourly
@kevinhand, actually it should not matter because when you use in5minute in TimeFrameSet when your current interval is inHourly, the timeframe will default to inHourly. AB will only act if you use a HIGHER TF than the one that is current while using TimeFrameSet.
It doesn’t work for Bank Nifty and few other stocks.
Hey what is the ideal density for Density for Indian Markets as you have given Density in terms of Dollars: ‘Den = Param(“Density”, 1, 0.25, 100, 0.25); // Resolution in terms of $’
The formula works good. just go to parameters and change density to 100.
THANKS TO THE UPLOADER.
Can somebody upload eod market profile afl code please.
thanks in advance.