I needed an AFL showing session from 10:00 to 14:00 OHLC as a candle, which I tried to obtain from 2TF candle formula using low level graphic function, but I only able to get OHLC of first candle of the session instead of the whole session. Please help the following code.
_SECTION_BEGIN("Session Timeframe candle");
H_Bar = ParamToggle("Session Bars", "Off, On", 1);
HbarFill = ParamToggle("Session Fill", "Off, On", 0);
H_Upbarcolor=ParamColor("H_Upbarcolor",colorDarkOliveGreen);
H_Dnbarcolor=ParamColor("H_Dnbarcolor",colorDarkRed);
H_Uplinecolor=ParamColor("H_Uplinecolor",colorTurquoise);
H_Dnlinecolor=ParamColor("H_Dnlinecolor",colorOrange);
H_UpWickcolor=ParamColor("H_UpWickclr",colorTurquoise);
H_DnWickcolor=ParamColor("H_DnWickclr",colorOrange);
H_BarLum = Param("H_Bar Clr Intensity", 0.1, 0, 1, 0.01);
H_WickLum = Param("H_Wick Clr Intensity", 0.1, 0, 1, 0.01);
H_Line = Param("H_Bar Line Thickness", 2, 0, 10, 1);
H_Wick = Param("H_Wick Thickness", 4, 0, 20, 1);
//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+1e-9) );
}
// Function to identify session bars (10:00 to 14:00)
function IsSessionTime()
{
hours = Hour();
minutes = Minute();
time = hours + minutes/100;
// Session from 10:00 to 14:00
return time >= 10.00 AND time < 14.00;
}
// Function to get session boundaries
function GetSessionBars()
{
session = IsSessionTime();
sessionStart = session AND !Ref(session, -1);
sessionEnd = !session AND Ref(session, -1);
return sessionStart OR sessionEnd;
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// MAIN PROGRAM:
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
function PlotSessionBars(BarLum, Style)
{
if(H_Bar==1)
{
// Bar Colors For The Session candlestick bars:
TFUpBarColor = ColorBlend(H_Upbarcolor, colorWhite, BarLum);
TFDnBarColor = ColorBlend(H_Dnbarcolor, colorWhite, BarLum);
TFUpWicColor = ColorBlend(H_UpWickcolor, colorWhite, BarLum);
TFDnWicColor = ColorBlend(H_DnWickcolor, colorWhite, BarLum);
// Calculate session OHLC
sessionStart = IsSessionTime() AND !Ref(IsSessionTime(), -1);
sessionMarker = Cum(sessionStart);
TFOpen = ValueWhen(sessionStart, O);
TFHigh = HighestSince(sessionStart, H);
TFLow = LowestSince(sessionStart, L);
TFClose = IIf(IsSessionTime(), C, ValueWhen(IsSessionTime() AND !Ref(IsSessionTime(), 1), C));
// Get session bar index for positioning
TFBarIndex = ValueWhen(sessionStart, BarIndex());
TFLastBarIndex = LastValue(BarIndex());
CandleTop = Max(TFOpen, TFClose);
CandleBottom = Min(TFOpen, TFClose);
//============================================================================
// GFX LOW-LEVEL GRAPHICS SECTION.
// DRAWING THE SESSION CANDLESTICK BARS:
//============================================================================
GfxSetOverlayMode(1);
AllVisibleBars = GetVisibleBarCount();
fvb = Status("firstvisiblebar");
ChartWidth = GfxConvertBarToPixelX(AllVisibleBars);
PixBar = ChartWidth / AllVisibleBars;
Adjust = PixBar * 0.35;
// Identify session bars for drawing
NewTFBar = sessionStart;
SessionActive = IsSessionTime();
// DRAW BAR HISTORY AND THE CURRENT BAR:
for(i = 0; i < AllVisibleBars; i++)
{
currentBar = i + fvb;
if(NewTFBar[currentBar] == 1)
{
// Find session end
sessionEndIndex = currentBar;
for(n = currentBar + 1; n < BarCount AND SessionActive[n]; n++)
{
sessionEndIndex = n;
}
x1 = GfxConvertBarToPixelX(i) - Adjust;
x2 = GfxConvertBarToPixelX(i + (sessionEndIndex - currentBar)) + Adjust;
y1 = GfxConvertValueToPixelY(CandleTop[currentBar]);
y2 = GfxConvertValueToPixelY(CandleBottom[currentBar]);
yH = GfxConvertValueToPixelY(TFHigh[currentBar]);
yL = GfxConvertValueToPixelY(TFLow[currentBar]);
// Candle Body:
LineColor = IIf(TFOpen[currentBar] < TFClose[currentBar], H_Uplinecolor, H_Dnlinecolor);
FillColor = IIf(TFOpen[currentBar] < TFClose[currentBar], TFUpBarColor, TFDnBarColor);
Wickcolor = IIf(TFOpen[currentBar] < TFClose[currentBar], TFUpWicColor, TFDnWicColor);
GfxSetZOrder(-3);
GfxSelectPen(LineColor, H_Line);
if(HbarFill == 1)
{
GfxSelectSolidBrush(FillColor);
}
else
{
GfxSelectStockObject(5);
}
if(y1 == y2)
{
y1 = y1 - Adjust;
y2 = y2 + Adjust;
GfxSelectSolidBrush(FillColor);
}
if(x1 > 0)
{
GfxRectangle(x1, y1, x2, y2);
// Candle High and Low:
GfxSetZOrder(-3);
GfxSelectPen(ColorBlend(WickColor, colorWhite, H_WickLum), H_Wick);
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);
}
}
}
}
}
PlotSessionBars(H_BarLum, "Fill");
_SECTION_END();


