Stock Portfolio Organizer
The ultimate porfolio management solution.
WiseTrader Toolbox
#1 Selling Amibroker Plugin featuring:
2 Timeframes Candlestick Bar Chart for Amibroker (AFL)
Specially designed for use in day trading AND to save chart space. This chart will displays 2 sets of candlestick bars. One for the time Interval set for your chart- for example 1 Minute. The higher timeframe candlestick bars are created by using gfx Low-level graphics and will display according to the parameters you set- for example 5 minutes.
Then please observe this AFL code uses the function ColorBlend(ColorFrom, ColorTo, Factor) which was introduced in version 5.21 Beta.
By Jorgen Wallgren
Similar Indicators / Formulas
Indicator / Formula
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 | _SECTION_BEGIN ( "2 Timeframes Candlestick Bar Chart" ); // Specially designed for use in day trading and to save chart space. This chart will displays 2 sets // of candlestick bars. One for the time interval set for your chart- for example 1 Minute. // The higher timeframe candlestick bars are created by using gfx low-level graphics AND will display // according to the parameters you set- for example 5 minutes. // I got the idea from David's (dbwyatt_1999) 2 Timeframe chart code which was shared by him on the AmiBroker List. // It uses TimeFrame functions with the PlotOHLC function using styleCloud. So I was thinking it would look // very nice using low-level graphics instead. Little bit more complicated, but I got a few great pointers from Herman! // If your chart background turns pink- please read the error message in the upper left corner of the chart. // Then please observe this AFL code uses ColorBlend(ColorFrom, ColorTo, Factor) which was introduced in Version 5.21 beta. // The rules are simple- time frames from 1 up to 60 minutes AND Lower time frame must be smaller than the Higher time frame. Version (5.21); SetChartOptions (2, chartShowDates ); Title = Name (); //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // PARAMETERS AND SETTINGS: //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ChartLum = Param ( "Chart Background Color Intensity" , 0.40, 0, 1, 0.01); TFMinShort = Param ( "Short Timeframe (Minutes)" , 1, 1, 60, 1); TFMinLong = Param ( "Long Timeframe (Minutes)" , 5, 1, 60, 1); OnSTFBars = ParamToggle ( "Short TF Bars" , "Off, On" , 1); OnLTFBars = ParamToggle ( "Long TF Bars" , "Off, On" , 1); BarLum1 = Param ( "Short TF Bar Color Intensity" , 0, 0, 1, 0.01); BarLum2 = Param ( "Long TF Bar Color Intensity" , 0.70, 0, 1, 0.01); SetChartBkColor (ColorBlend( colorLightBlue , colorWhite , ChartLum)); // Bar Colors for the Short Timeframe candlestick bars: LineColor = ColorBlend( colorBlack , colorWhite , BarLum1); UpBarColor = ColorBlend( colorBrightGreen , colorWhite , BarLum1); DnBarColor = ColorBlend( colorRed , colorWhite , BarLum1); // Bar Colors For The Long Timeframe candlestick bars: TFLineColor = ColorBlend( colorBlack , colorWhite , BarLum2 - 0.1); TFUpBarColor = ColorBlend( colorBrightGreen , colorWhite , BarLum2); TFDnBarColor = ColorBlend( colorRed , colorWhite , BarLum2); //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // FUNCTIONS: //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX function GetVisibleBarCount() { lvb = Status ( "lastvisiblebar" ); fvb = Status ( "firstvisiblebar" ); return Min ( Lvb - fvb, BarCount - fvb ); } function GfxConvertBarToPixelX( bar ) { lvb = Status ( "lastvisiblebar" ); fvb = Status ( "firstvisiblebar" ); pxchartleft = Status ( "pxchartleft" ); pxchartwidth = Status ( "pxchartwidth" ); return pxchartleft + bar * pxchartwidth / ( Lvb - fvb + 1 ); } function GfxConvertValueToPixelY( Value ) { local Miny, Maxy, pxchartbottom, pxchartheight; Miny = Status ( "axisminy" ); Maxy = Status ( "axismaxy" ); pxchartbottom = Status ( "pxchartbottom" ); pxchartheight = Status ( "pxchartheight" ); return pxchartbottom - floor ( 0.5 + ( Value - Miny ) * pxchartheight/ ( Maxy - Miny ) ); } StaticVarKey = Name (); procedure xStaticVarSet(SName, SValue) { global StaticVarKey; if (StaticVarKey != "" ) StaticVarSet (Sname + StaticVarKey, Svalue); } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // MAIN PROGRAM: //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX if ( Interval () != TFMinShort * 60) { Title = Title + "\n" + "\n" + "ALERT, ALERT, ALERT!!!" + "\n" + "Set the chart time Interval to: " + NumToStr (TFMinShort, 1.0, 1) + " Minute(s) or change the Short Timeframe Parameter setting." ; OnSTFBars = 0; OnLTFBars = 0; SetChartBkColor ( colorRose ); } if (TFMinShort >= TFMinLong) { Title = Title + "\n" + "\n" + "ALERT, ALERT, ALERT!!!" + "\n" + "The Long Timeframe setting must be longer than the Short Timeframe!" ; OnSTFBars = 0; OnLTFBars = 0; SetChartBkColor ( colorRose ); } if (OnSTFBars) { BarColor = IIf ( Close > Open , UpBarColor, DnBarColor); SetBarFillColor (BarColor); Plot ( Close , "" , LineColor, styleCandle ); } else Plot ( Close , "" , colorBlack , styleCandle | styleNoDraw ); TFSec = in1Minute * TFMinLong; TimeFrameSet (TFSec); TFOpen = Open ; TFHigh = High ; TFLow = Low ; TFClose = Close ; TFBarIndex = BarIndex (); TFLastBarIndex = LastValue ( BarIndex ()); TimeFrameRestore (); TFOpen = TimeFrameExpand (TFOpen, TFSec, expandFirst); TFHigh = TimeFrameExpand (TFHigh, TFSec, expandFirst); TFLow = TimeFrameExpand (TFLow, TFSec, expandFirst); TFClose = TimeFrameExpand (TFClose, TFSec, expandFirst); TFBarIndex = TimeFrameExpand (TFBarIndex, TFSec, expandLast + 1); TFLastBarIndex = TimeFrameExpand (TFLastBarIndex, TFSec, expandLast + 1); CandleTop = Max (TFOpen, TFClose); CandleBottom = Min (TFOpen, TFClose); //============================================================================ // GFX LOW-LEVEL GRAPHICS SECTION. // DRAWING THE LONG TIMEFRAME CANDLESTICK BARS: //============================================================================ if (OnLTFBars) { GfxSetOverlayMode (1); AllVisibleBars = GetVisibleBarCount(); fvb = Status ( "firstvisiblebar" ); ChartWidth = GfxConvertBarToPixelX(AllVisibleBars ); PixBar = ChartWidth / AllVisibleBars; Adjust = Pixbar * 0.35; TFMinutes = TFMinLong / TFMinShort; NewTFBar = IIf (TFBarIndex != Ref (TFBarIndex, -1), 1, 0); BarInd = BarIndex (); TFLastBarIndex = LastValue (TFLastBarIndex); // DRAW BAR HISTORY AND THE CURRENT BAR: for (i = 0; i < AllVisibleBars; i++) { x1 = GfxConvertBarToPixelX(i) * NewTFBar[i + fvb] - Adjust; if (BarInd[i + fvb] < TFLastBarIndex AND NewTFBar[i + fvb] == 1) { Counter = 0; for (n = i + 1; NewTFBar[n + fvb] == 0 AND n + fvb < BarCount -1; n++) Counter++; x2 = GfxConvertBarToPixelX(i + Counter) * NewTFBar[i + fvb] + 1 + Adjust; } if (TFBarIndex[i + fvb] == TFLastBarIndex) x2 = GfxConvertBarToPixelX(i + TFMinutes - 1) * NewTFBar[i + fvb] + 1 + Adjust; y1 = GfxConvertValueToPixelY(CandleTop[i + fvb]); y2 = GfxConvertValueToPixelY(CandleBottom[i + fvb]); yH = GfxConvertValueToPixelY(TFHigh[i + fvb]); yL = GfxConvertValueToPixelY(TFLow[i + fvb]); // Candle Body: GfxSelectPen (TFLineColor, 0); FillColor = IIf (TFOpen[i + fvb] < TFClose[i + fvb], TFUpBarColor,TFDnBarColor); GfxSelectSolidBrush (FillColor); if (y1 == y2){y1 = y1 - Adjust; y2 = y2 + Adjust; GfxSelectSolidBrush (TFLineColor);} if (x1 > 0){ GfxRectangle ( x1, y1, x2, y2); // Candle High and Low: GfxSelectPen (TFLineColor, 2); GfxMoveTo (x2+(x1-x2)/2, y1); GfxLineTo (x2+(x1-x2)/2, yH); GfxMoveTo (x2+(x1-x2)/2, y2); GfxLineTo (x2+(x1-x2)/2, yL); RequestTimedRefresh (0); } } } _SECTION_END (); |
2 comments
Leave Comment
Please login here to leave a comment.
Back
error in afl please solve and update
Hi Mehul this formula is fine it just needs the newest beta of Amibroker.