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

2 Timeframes Candlestick Bar Chart for Amibroker (AFL)
kaiji
about 15 years ago
Amibroker (AFL)

Rating:
5 / 5 (Votes 1)
Tags:
amibroker

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

Kavach Of Karna v2
Submitted by hbkwarez over 10 years ago
Advanced Elliott Waves
Submitted by MarcosEn over 13 years ago
3_6Day GuaiLiLv
Submitted by motorfly over 13 years ago
Williams Alligator System
Submitted by durgesh1712 over 13 years ago
*Level Breakout system*
Submitted by Tinych over 13 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
_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

1. Mehul Patel

error in afl please solve and update

2. administrator

Hi Mehul this formula is fine it just needs the newest beta of Amibroker.

Leave Comment

Please login here to leave a comment.

Back