Join useThinkScript to post your question to a community of 21,000+ developers and traders.
not possible with thinkorswimI want to be able to highlight x amount of candles on my intraday chart and see the volume profile for the highlighted portion only. How can I do this?
Any suggestions of a good free charting platform that will allow me to do this?not possible with thinkorswim
I want to be able to highlight x amount of candles on my intraday chart and see the volume profile for the highlighted portion only. How can I do this?
Any suggestions of a good free charting platform that will allow me to do this?
On the other hand, I also need something where I can see 1 volume profile for last 20 days. I select 20 days in ToS and it shows me 20 different ones. I would like it to be one big volume profile. It seems to work fine for 1 year chart.Hi @Shinthus, here is another cog indicator https://usethinkscript.com/threads/center-of-gravity-cog-indicator-for-thinkorswim.138/ I think this might be the cog indicator you're looking for if you were in bluesgirl's chatroom. (I'm in the same room That's similar to what she uses. From what I understand with the cog indicator is you want to play the edges and also look at the curves of the waves. So if the waves are starting to curl up price may have found a bottom and start to move up. Maybe similar to boillinger bands.
As for volume profile here is a picture of the study I use on TOS. It looks at the volume profile for every individual day, so the levels are pretty much the same across all time frames. I can post the settings I have if you're interested
I like to mark off the Value area Highs/Lows (the yellow lines) and the point of control (red line). I use these lines as support/resistance and targets for the next day.
@Pumper this video will show you how to set it up to your liking.On the other hand, I also need something where I can see 1 volume profile for last 20 days. I select 20 days in ToS and it shows me 20 different ones. I would like it to be one big volume profile. It seems to work fine for 1 year chart.
declare Hide_On_Daily;
input RthBegin = 0930; #hint RthBegin: Regular Trading Hours Begin.
input RthEnd = 1600; #hint RthEnd: Regular Trading Hours End.
input AtrLength = 4; #hint AtrLength: Length for Average True Range Calculation.
input RoundingFunction = .5; #hint RoundingFunction: Round to nearest ?
input MaxRisk = 2.00; #hint MaxRisk: Maximum Risk around pivots.
def o = open;
def h = high;
def l = low;
def c = close;
def ATR = HighestAll(if isNaN(c[-1])
then if Average(TrueRange(h, c, l), AtrLength) < MaxRisk
then Average(TrueRange(h, c, l), AtrLength)
else MaxRisk
else double.nan);
def locate = isNaN(close[13]) and !isNaN(close[14]);
def RTH = SecondsFromTime(RthBegin) > 0 and
SecondsTillTime(RthEnd) >= 0;
def cond = RTH != RTH[1];
profile vol = VolumeProfile("startNewProfile" = cond,
"onExpansion" = no,
"numberOfProfiles" = 20,
"pricePerRow" = PricePerRow.TICKSIZE,
"value area percent" = 68.4);
def poc = if RTH
then Round(vol.GetPointOfControl() / RoundingFunction, 0) * RoundingFunction
else Double.NaN;
def Poc1 = if !RTH and RTH[1]
then poc[1]
else Poc1[1];
def Poc2 = if !RTH and RTH[1]
then Poc1[1]
else Poc2[1];
def Poc3 = if !RTH and RTH[1]
then Poc2[1]
else Poc3[1];
def Poc4 = if !RTH and RTH[1]
then Poc3[1]
else Poc4[1];
def Poc5 = if !RTH and RTH[1]
then Poc4[1]
else Poc5[1];
def Poc6 = if !RTH and RTH[1]
then Poc5[1]
else Poc6[1];
def Poc7 = if !RTH and RTH[1]
then Poc6[1]
else Poc7[1];
def Poc8 = if !RTH and RTH[1]
then Poc7[1]
else Poc8[1];
def Poc9 = if !RTH and RTH[1]
then Poc8[1]
else Poc9[1];
def Poc10 = if !RTH and RTH[1]
then Poc9[1]
else Poc10[1];
plot pc = HighestAll(if isNaN(c[-1])
then poc
else double.nan);
pc.SetStyle(Curve.Firm);
pc.SetLineWeight(2);
addCloud(pc-ATR, pc+ATR, createColor(100,100,100), createColor(100,100,100));
addChartBubble(locate, pc, "POC", createColor(100,100,100), yes);
plot pc1 = HighestAll(if isNaN(c[-1])
then Poc1
else double.nan);
pc1.SetStyle(Curve.Long_Dash);
addCloud(pc1-ATR, pc1+ATR, color.gray, color.gray);
addChartBubble(locate, pc1, "POC 1", createColor(100,100,100), yes);
plot pc2 = HighestAll(if isNaN(c[-1])
then poc2
else double.nan);
pc2.SetStyle(Curve.Long_Dash);
addCloud(pc2-ATR, pc2+ATR, color.gray, color.gray);
addChartBubble(locate, pc2, "POC 2", createColor(100,100,100), yes);
plot pc3 = HighestAll(if isNaN(c[-1])
then poc3
else double.nan);
pc3.SetStyle(Curve.Long_Dash);
addCloud(pc3-ATR, pc3+ATR, color.gray, color.gray);
addChartBubble(locate, pc3, "POC 3", createColor(100,100,100), yes);
plot pc4 = HighestAll(if isNaN(c[-1])
then poc4
else double.nan);
pc4.SetStyle(Curve.Long_Dash);
addCloud(pc4-ATR, pc4+ATR, color.gray, color.gray);
addChartBubble(locate, pc4, "POC 4", createColor(100,100,100), yes);
plot pc5 = HighestAll(if isNaN(c[-1])
then poc5
else double.nan);
pc5.SetStyle(Curve.Long_Dash);
addCloud(pc5-ATR, pc5+ATR, color.gray, color.gray);
addChartBubble(locate, pc5, "POC 5", createColor(100,100,100), yes);
plot pc6 = HighestAll(if isNaN(c[-1])
then poc6
else double.nan);
pc6.SetStyle(Curve.Long_Dash);
addCloud(pc6-ATR, pc6+ATR, color.gray, color.gray);
addChartBubble(locate, pc6, "POC 6", createColor(100,100,100), yes);
plot pc7 = HighestAll(if isNaN(c[-1])
then poc7
else double.nan);
pc7.SetStyle(Curve.Long_Dash);
addCloud(pc7-ATR, pc7+ATR, color.gray, color.gray);
addChartBubble(locate, pc7, "POC 7", createColor(100,100,100), yes);
plot pc8 = HighestAll(if isNaN(c[-1])
then poc8
else double.nan);
pc8.SetStyle(Curve.Long_Dash);
addCloud(pc8-ATR, pc8+ATR, color.gray, color.gray);
addChartBubble(locate, pc8, "POC 8", createColor(100,100,100), yes);
plot pc9 = HighestAll(if isNaN(c[-1])
then poc9
else double.nan);
pc9.SetStyle(Curve.Long_Dash);
addCloud(pc9-ATR, pc9+ATR, color.gray, color.gray);
addChartBubble(locate, pc9, "POC 9", createColor(100,100,100), yes);
plot pc10 = HighestAll(if isNaN(c[-1])
then poc10
else double.nan);
pc10.SetStyle(Curve.Long_Dash);
addCloud(pc10-ATR, pc10+ATR, color.gray, color.gray);
addChartBubble(locate, pc10, "POC 10", createColor(100,100,100), yes);
pc.AssignValueColor(if (pc == pc1) or (pc == pc2) or (pc == pc3) or (pc == pc4) or (pc == pc5) or (pc == pc6) or (pc == pc7) or (pc == pc8) or (pc == pc9) or (pc == pc10) then color.dark_green else color.orange);
pc1.AssignValueColor(if (pc1 == pc) or (pc1 == pc2) or (pc1 == pc3) or (pc1 == pc4) or (pc1 == pc5) or (pc1 == pc6) or (pc1 == pc7) or (pc1 == pc8) or (pc1 == pc9) or (pc1 == pc10) then color.dark_green else color.orange);
pc2.AssignValueColor(if (pc2 == pc) or (pc2 == pc1) or (pc2 == pc3) or (pc2 == pc4) or (pc2 == pc5) or (pc2 == pc6) or (pc2 == pc7) or (pc2 == pc8) or (pc2 == pc9) or (pc2 == pc10) then color.dark_green else color.orange);
pc3.AssignValueColor(if (pc3 == pc) or (pc3 == pc1) or (pc3 == pc2) or (pc3 == pc4) or (pc3 == pc5) or (pc3 == pc6) or (pc3 == pc7) or (pc3 == pc8) or (pc3 == pc9) or (pc3 == pc10) then color.dark_green else color.orange);
pc4.AssignValueColor(if (pc4 == pc) or (pc4 == pc1) or (pc4 == pc2) or (pc4 == pc3) or (pc4 == pc5) or (pc4 == pc6) or (pc4 == pc7) or (pc4 == pc8) or (pc4 == pc9) or (pc4 == pc10) then color.dark_green else color.orange);
pc5.AssignValueColor(if (pc5 == pc) or (pc5 == pc1) or (pc5 == pc2) or (pc5 == pc3) or (pc5 == pc4) or (pc5 == pc6) or (pc5 == pc7) or (pc5 == pc8) or (pc5 == pc9) or (pc5 == pc10) then color.dark_green else color.orange);
pc6.AssignValueColor(if (pc6 == pc) or (pc6 == pc1) or (pc6 == pc2) or (pc6 == pc3) or (pc6 == pc4) or (pc6 == pc5) or (pc6 == pc7) or (pc6 == pc8) or (pc6 == pc9) or (pc6 == pc10) then color.dark_green else color.orange);
pc7.AssignValueColor(if (pc7 == pc) or (pc7 == pc1) or (pc7 == pc2) or (pc7 == pc3) or (pc7 == pc4) or (pc7 == pc5) or (pc7 == pc6) or (pc7 == pc8) or (pc7 == pc9) or (pc7 == pc10) then color.dark_green else color.orange);
pc8.AssignValueColor(if (pc8 == pc) or (pc8 == pc1) or (pc8 == pc2) or (pc8 == pc3) or (pc8 == pc4) or (pc8 == pc5) or (pc8 == pc6) or (pc8 == pc7) or (pc8 == pc9) or (pc8 == pc10) then color.dark_green else color.orange);
pc9.AssignValueColor(if (pc9 == pc) or (pc9 == pc1) or (pc9 == pc2) or (pc9 == pc3) or (pc9 == pc4) or (pc9 == pc5) or (pc9 == pc6) or (pc9 == pc7) or (pc9 == pc8) or (pc9 == pc10) then color.dark_green else color.orange);
pc10.AssignValueColor(if (pc10 == pc) or (pc10 == pc1) or (pc10 == pc2) or (pc10 == pc3) or (pc10 == pc4) or (pc10 == pc5) or (pc10 == pc6) or (pc10 == pc7) or (pc10 == pc8) or (pc10 == pc9) then color.dark_green else color.orange);
# Custom Multi Plot ThinkScript by 7of9 for BRT
# Modifed by RK for colored bubbles and bubbles on Right Edge
# and changed Plot...LinesPastOpen to 8hrs from 0
# edited 3/5/19
# Inputs
input PlotPreMktLinesHrsPastOpen = 4;
input PlotRegMktLinesHrsPastOpen = 0;
input PlotYesterdayMktLinesHrsPastOpen = 0;
input PlotActiveRegMktLinesOnPrevDays = 0;
input DisplayPreMarketPriceBubbles = yes;
input DisplayCurrentDayPriceBubbles = yes;
input DisplayPreviousDayPriceBubbles = yes;
input DisplayPreMarketPriceBubblesRightEdge = no;
input DisplayCurrentDayPriceBubblesRightEdge = no;
input DisplayPreviousDayPriceBubblesRightEdge = no;
# Pre market / Regular market definitions
def ExtPMOut = PlotPreMktLinesHrsPastOpen * 3610000;
def ExtRMOut = PlotRegMktLinesHrsPastOpen * 3610000;
def ExtYMOut = PlotYesterdayMktLinesHrsPastOpen * 3610000;
def MktPlot = GetLastDay() - PlotActiveRegMktLinesOnPrevDays <= GetDay() and GetLastYear() - 0 <= GetYear();
def PMhrs = RegularTradingStart (GetYYYYMMDD()) > GetTime();
def RMhrs = RegularTradingStart (GetYYYYMMDD()) < GetTime();
def PMplots = RegularTradingStart (GetYYYYMMDD()) > GetTime() - ExtPMOut;
def RMplots = RegularTradingStart (GetYYYYMMDD()) > GetTime() - ExtRMOut;
def YMplots = RegularTradingStart (GetYYYYMMDD()) > GetTime() - ExtYMOut;
def PMStart = RMhrs[1] and PMhrs;
def RMStart = PMhrs[1] and RMhrs;
def PMHigh = CompoundValue(1, if PMStart then high else if PMhrs then Max(high, PMHigh[1]) else PMHigh[1], 0);
def PMLow = CompoundValue (1, if PMStart then low else if PMhrs then Min(low, PMLow[1]) else PMLow[1], 0);
def bar = BarNumber();
def highBar = if PMhrs and high == PMHigh then bar else Double.NaN;
def lowBar = if PMhrs and low == PMLow then bar else Double.NaN;
# Current price line tracker code
plot PriceLine = HighestAll (if IsNaN(close[-1]) and !IsNaN(close) then close else Double.NaN);
PriceLine.SetDefaultColor (Color.GRAY);
PriceLine.SetStyle (Curve.SHORT_DASH);
# Pre market open code
def HidePMO = if GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN then yes else no;
def day = GetDay();
def PMopenBar = day != day[1];
def PMOpen = if PMopenBar then open else PMOpen[1];
plot PMO = if HidePMO and MktPlot and PMplots then PMOpen else Double.NaN;
PMO.SetDefaultColor (CreateColor (234, 136, 255));
# Pre market high code
def HidePMH = if GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN then yes else no;
def PMHighBar = if bar == HighestAll(highBar) then PMHigh else PMHighBar[1];
plot PMH = if HidePMH and PMplots and PMHighBar > 0 then PMHighBar else Double.NaN;
PMH.SetDefaultColor (CreateColor (116, 189, 232));
# Pre market low code
def HidePML = if GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN then yes else no;
def PMLowBar = if bar == HighestAll(lowBar) then PMLow else PMLowBar[1];
plot PML = if HidePML and PMplots and PMLowBar > 0 then PMLowBar else Double.NaN;
PML.SetDefaultColor (CreateColor (116, 189, 232));
# Current day open code
def HideCDO = if GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN then yes else no;
def CDOpen = if !day then Double.NaN else open (period = "day");
plot CDO = if HideCDO and MktPlot and RMplots then CDOpen else Double.NaN;
CDO.SetDefaultColor (Color.WHITE);
CDO.SetStyle (Curve.SHORT_DASH);
#Current day high code
def HideCDH = if GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN then yes else no;
def CDHigh = if !day then Double.NaN else high (period = "day");
plot CDH = if HideCDH and MktPlot and RMplots then CDHigh else Double.NaN;
CDH.SetDefaultColor (Color.GREEN);
CDH.SetStyle (Curve.SHORT_DASH);
#Current day low code
def HideCDL = if GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN then yes else no;
def CDLow = if !day then Double.NaN else low (period = "day");
plot CDL = if HideCDL and MktPlot and RMplots then CDLow else Double.NaN;
CDL.SetDefaultColor (Color.RED);
CDL.SetStyle (Curve.SHORT_DASH);
#Previous day high code
def HidePDH = if GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN then yes else no;
def PDHigh = if !day then Double.NaN else high (period = "day")[1];
plot PDH = if HidePDH and MktPlot and YMplots then PDHigh else Double.NaN;
PDH.SetDefaultColor (CreateColor (116, 189, 232));
PDH.SetStyle (Curve.SHORT_DASH);
#Previous day low code
def HidePDL = if GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN then yes else no;
def PDLow = if !day then Double.NaN else low (period = "day")[1];
plot PDL = if HidePDL and MktPlot and YMplots then PDLow else Double.NaN;
PDL.SetDefaultColor (CreateColor (116, 189, 232));
PDL.SetStyle (Curve.SHORT_DASH);
#Previous day close code
def HidePDC = if GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN then yes else no;
def PDClose = if !day then Double.NaN else close (period = "day")[1];
plot PDC = if HidePDC and MktPlot and YMplots then PDClose else Double.NaN;
PDC.SetDefaultColor (CreateColor (231, 190, 0));
PDC.SetStyle (Curve.SHORT_DASH);
#Pre market bubbles code
def PMBubbles = if GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN then DisplayPreMarketPriceBubbles else no;
AddChartBubble (PMopenBar and PMBubbles, PMO, ("PMO:") + PMO,
CreateColor (234, 136, 255));
AddChartBubble (highBar and PMBubbles, PMH, ("PMH:") + PMH,
CreateColor (116, 189, 232));
AddChartBubble (lowBar and PMBubbles, PML, ("PML:") + PML,
CreateColor (116, 189, 232), no);
###############
################edited by rk .. ADDING PRICE PM BUBBLES RIGHT EDGE
AddChartBubble(BarNumber() == HighestAll(BarNumber()) and
DisplayPreMarketPriceBubblesRightEdge, PMO, "PMO:" + PMO, CreateColor(234, 136, 255), no);
AddChartBubble(BarNumber() == HighestAll(BarNumber()) and
DisplayPreMarketPriceBubblesRightEdge, PMH, "PMH:" + PMH, CreateColor(116, 189, 232), no);
AddChartBubble(BarNumber() == HighestAll(BarNumber()) and
DisplayPreMarketPriceBubblesRightEdge, PML, "PML:" + PML, CreateColor(116, 189, 232), no);
###############end edit by rk
###############
#Current day bubbles code
def CDBubbles = if GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN then DisplayCurrentDayPriceBubbles else no;
def CDFirstBar = SecondsFromTime (0800) >= 0 and SecondsFromTime (0800) < 60;
AddChartBubble (CDFirstBar and CDBubbles, CDO, ("CDO:") + CDO,
CreateColor (255, 255, 255));
AddChartBubble (CDFirstBar and CDBubbles, CDH, ("CDH:") + CDH,
CreateColor (0, 255, 0));
AddChartBubble (CDFirstBar and CDBubbles, CDL, ("CDL:") + CDL,
CreateColor (255, 0, 0), no);
###############
################edited by rk .. ADDING PRICE CD BUBBLES RIGHT EDGE
AddChartBubble(BarNumber() == HighestAll(BarNumber()) and
DisplayCurrentDayPriceBubblesRightEdge, CDO, "CDO:" + CDO, CreateColor(255, 255, 255), no);
AddChartBubble(BarNumber() == HighestAll(BarNumber()) and
DisplayCurrentDayPriceBubblesRightEdge, CDH, "CDH:" + CDH, CreateColor(0, 255, 0), no);
AddChartBubble(BarNumber() == HighestAll(BarNumber()) and
DisplayCurrentDayPriceBubblesRightEdge, CDL, "CDL:" + CDL, CreateColor(255, 0, 0), no);
################end edit by rk
###############
#Previous day bubbles code
def PDBubbles = if GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN then DisplayPreviousDayPriceBubbles else no;
def PDFirstBar = SecondsFromTime (0700) >= 0 and SecondsFromTime (0700) < 60;
AddChartBubble (PDFirstBar and PDBubbles, PDH, ("PDH:") + PDH,
CreateColor (116, 189, 232));
AddChartBubble (PDFirstBar and PDBubbles, PDL, ("PDL:") + PDL,
CreateColor (116, 189, 232), no);
AddChartBubble (PDFirstBar and PDBubbles, PDC, ("PDC:") + PDC,
CreateColor (231, 190, 0));
###############
################edited by rk .. ADDING PRICE PD BUBBLES RIGHT EDGE
AddChartBubble(BarNumber() == HighestAll(BarNumber()) and
DisplayCurrentDayPriceBubblesRightEdge, PDH, "PDH:" + PDH, CreateColor(116, 189, 232), no);
AddChartBubble(BarNumber() == HighestAll(BarNumber()) and
DisplayCurrentDayPriceBubblesRightEdge, PDL, "PDL:" + PDL, CreateColor(116, 204, 232), no);
AddChartBubble(BarNumber() == HighestAll(BarNumber()) and
DisplayCurrentDayPriceBubblesRightEdge, PDC, "PDC:" + PDC, CreateColor(231, 190, 0), no);
################end edit by rk
###############
Horserider, can you share the code for the Volume Profile Labels for VAH, POC, and VAL? That would be amazing. Thank you
# Points Of Control Support / Resistance Areas
# Mobius
# V01.03.08.2016
# Locates last 10 Points of Control based on RTH only
#
# Modified version 1 by Sleepz - Usethinkscript request: The two things I'm seeking are:
# 1. how can I get, let's say, the POC from 5 days ago to begin at the end of the RTH session 5 days ago (but not go on further to the left).?
# 2. and, if that's possible, how can I get the bubble to display also at the origin point of the POC extension? (It already displays on the Right Edge.)
# Added an option to extend the POC's based upon the POC for each day during RTH based upon ticksize(), rounded to 2 digits rather than Mobius's smoothed approach
# Added a #VolumeProfile_RTH_ext script that I did quite awhile ago to help test the modified script. One can display it or not at the 'input showVOLProfile_RTH_ext'. It also can be removed after testing if not wanted.
declare hide_on_daily;
input UseRoundingFunction = yes; #hint UseRoundingFunction: Select YES (Mobius default)to use POC based upon Mobius' RoundingFunction input and RoundingDigit; NO to use POC for each day during RTH based upon ticksize(), rounded to 2 digits
input RoundingFunction = 0.5; #hint RoundingFunction: Round to nearest ?
input RoundingDigit = 0;
input RthBegin = 0930; #hint RthBegin: Regular Trading Hours Begin.
input RthEnd = 1600; #hint RthEnd: Regular Trading Hours End.
input AtrLength = 4; #hint AtrLength: Length for Average True Range Calculation.
input MaxRisk = 2.00; #hint MaxRisk: Maximum Risk around pivots.
def o = open;
def h = high;
def l = low;
def c = close;
def RTH = SecondsFromTime(RthBegin) > 0 and SecondsTillTime(RthEnd) >= 0;
def cond = RTH != RTH[1];
def last = if IsNaN(close[-1]) and !IsNaN(close) then BarNumber() else last[1];
def capture = CompoundValue(1, if BarNumber() > HighestAll(last) then 0 else if SecondsFromTime(1600) == 0 then capture[1] + 1 else capture[1], 0);
def dayCount = CompoundValue(1, if capture != capture[1] then dayCount[1] + 1 else dayCount[1], 0);
def thisDay = (HighestAll(dayCount) - dayCount) ;
def ATR = HighestAll(if IsNaN(c[-1])
then if Average(TrueRange(h, c, l), AtrLength) < MaxRisk
then Average(TrueRange(h, c, l), AtrLength)
else MaxRisk
else Double.NaN);
profile vol = VolumeProfile("startNewProfile" = cond,
"onExpansion" = no,
"numberOfProfiles" = 20,
"pricePerRow" = PricePerRow.TICKSIZE,
"value area percent" = 68.4);
def poc = if RTH or thisDay == 1
then if UseRoundingFunction == yes then Round(vol.GetPointOfControl() / RoundingFunction, RoundingDigit) * RoundingFunction else Round(vol.GetPointOfControl(), 2)
else Double.NaN;
def Poc1 = if UseRoundingFunction == yes and !RTH and RTH[1]
then poc[1] else if UseRoundingFunction == no and thisDay == 2 and RTH then poc
else Poc1[1];
def Poc2 = if UseRoundingFunction == yes and !RTH and RTH[1]
then Poc1[1] else if UseRoundingFunction == no and thisDay == 3 and RTH then poc
else Poc2[1];
def Poc3 = if UseRoundingFunction == yes and !RTH and RTH[1]
then Poc2[1] else if UseRoundingFunction == no and thisDay == 4 and RTH then poc
else Poc3[1];
def Poc4 = if UseRoundingFunction == yes and !RTH and RTH[1]
then Poc3[1] else if UseRoundingFunction == no and thisDay == 5 and RTH then poc
else Poc4[1];
def Poc5 = if UseRoundingFunction == yes and !RTH and RTH[1]
then Poc4[1] else if UseRoundingFunction == no and thisDay == 6 and RTH then poc
else Poc5[1];
plot pc = if thisDay > 1 then Double.NaN else HighestAll(if IsNaN(c[-1])
then poc
else Double.NaN);
pc.SetStyle(Curve.FIRM);
pc.SetLineWeight(2);
AddCloud(pc - ATR, pc + ATR, CreateColor(100, 100, 100), CreateColor(100, 100, 100));
AddChartBubble(BarNumber() == HighestAll(BarNumber()), pc, "POC", CreateColor(100, 100, 100), yes);
plot pc1 = if thisDay > 1 then Double.NaN else HighestAll(if IsNaN(c[-1])
then Poc1
else Double.NaN);
pc1.SetStyle(Curve.LONG_DASH);
AddCloud(pc1 - ATR, pc1 + ATR, Color.GRAY, Color.GRAY);
AddChartBubble(thisDay == 1 and thisDay[1] == 2, pc1, "POC 1", CreateColor(100, 100, 100), yes);
plot pc2 = if thisDay > 2 then Double.NaN else HighestAll(if IsNaN(c[-1])
then Poc2
else Double.NaN);
pc2.SetStyle(Curve.LONG_DASH);
AddCloud(pc2 - ATR, pc2 + ATR, Color.GRAY, Color.GRAY);
AddChartBubble(thisDay == 2 and thisDay[1] == 3, pc2, "POC 2", CreateColor(100, 100, 100), yes);
plot pc3 = if thisDay > 3 then Double.NaN else HighestAll(if IsNaN(c[-1])
then Poc3
else Double.NaN);
pc3.SetStyle(Curve.LONG_DASH);
AddCloud(pc3 - ATR, pc3 + ATR, Color.GRAY, Color.GRAY);
AddChartBubble(thisDay == 3 and thisDay[1] == 4, pc3, "POC 3", CreateColor(100, 100, 100), yes);
plot pc4 = if thisDay > 4 then Double.NaN else HighestAll(if IsNaN(c[-1])
then Poc4
else Double.NaN);
pc4.SetStyle(Curve.LONG_DASH);
AddCloud(pc4 - ATR, pc4 + ATR, Color.GRAY, Color.GRAY);
AddChartBubble(thisDay == 4 and thisDay[1] == 5, pc4, "POC 4", CreateColor(100, 100, 100), yes);
plot pc5 = if thisDay > 5 then Double.NaN else HighestAll(if IsNaN(c[-1])
then Poc5
else Double.NaN);
pc5.SetStyle(Curve.LONG_DASH);
AddCloud(pc5 - ATR, pc4 + ATR, Color.GRAY, Color.GRAY);
AddChartBubble(thisDay == 5 and thisDay[1] == 6, pc5, "POC 5", CreateColor(100, 100, 100), yes);
pc.AssignValueColor(if (pc == pc1) or (pc == pc2) or (pc == pc3) or (pc == pc4) or (pc == pc5) then Color.DARK_GREEN else Color.ORANGE);
pc1.AssignValueColor(if (pc1 == pc) or (pc1 == pc2) or (pc1 == pc3) or (pc1 == pc4) or (pc1 == pc5) then Color.DARK_GREEN else Color.ORANGE);
pc2.AssignValueColor(if (pc2 == pc) or (pc2 == pc1) or (pc2 == pc3) or (pc2 == pc4) or (pc2 == pc5) then Color.DARK_GREEN else Color.ORANGE);
pc3.AssignValueColor(if (pc3 == pc) or (pc3 == pc1) or (pc3 == pc2) or (pc3 == pc4) or (pc3 == pc5) then Color.DARK_GREEN else Color.ORANGE);
pc4.AssignValueColor(if (pc4 == pc) or (pc4 == pc1) or (pc4 == pc2) or (pc4 == pc3) or (pc4 == pc5) then Color.DARK_GREEN else Color.ORANGE);
pc5.AssignValueColor(if (pc5 == pc) or (pc5 == pc1) or (pc5 == pc2) or (pc5 == pc3) or (pc5 == pc4) then Color.DARK_GREEN else Color.ORANGE);
#VolumeProfile_RTH_ext
input showVOLProfile_RTH_ext = no;
profile vola = VolumeProfile("startNewProfile" = cond and SecondsTillTime(RthEnd) >= 0, "onExpansion" = no, "numberOfProfiles" = 1000, pricePerRow = PricePerRow.TICKSIZE);
def pca = if IsNaN(vola.GetPointOfControl()) then pca[1] else vola.GetPointOfControl();
def hVA = if IsNaN(vola.GetHighestValueArea()) then hVA[1] else vola.GetHighestValueArea();
def lVA = if IsNaN(vola.GetLowestValueArea()) then lVA[1] else vola.GetLowestValueArea();
def poc_ = if !RTH or IsNaN(close) then poc_[1] else pca;
def ub = if !RTH or IsNaN(close) then ub[1] else hVA;
def lb = if !RTH or IsNaN(close) then lb[1] else lVA;
plot VPOC = if showVOLProfile_RTH_ext == no then Double.NaN else poc_;
plot VAH = if showVOLProfile_RTH_ext == no then Double.NaN else ub;
plot VAL = if showVOLProfile_RTH_ext == no then Double.NaN else lb;
VPOC.SetDefaultColor(Color.MAGENTA);
VAH.SetDefaultColor(Color.WHITE);
VAL.SetDefaultColor(Color.WHITE);
VPOC.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
VAH.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
VAL.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
def showpointofcontrol = if showVOLProfile_RTH_ext == no then no else yes;
def showvaluearea = if showVOLProfile_RTH_ext == no then no else yes;
def opacity = if showVOLProfile_RTH_ext == no then 0 else 50;
vola.Show(Color.CYAN, if showpointofcontrol then Color.CYAN else Color.CURRENT, if showvaluearea then Color.YELLOW else Color.CURRENT, opacity);
profile volb = VolumeProfile("startNewProfile" = cond, "onExpansion" = no, "numberOfProfiles" = 1000, pricePerRow = PricePerRow.TICKSIZE);
def hProfile = if IsNaN(volb.GetHighest()) then hProfile[1] else volb.GetHighest();
def lProfile = if IsNaN(volb.GetLowest()) then lProfile[1] else volb.GetLowest();
def uprof = if !RTH or IsNaN(close) then uprof[1] else hProfile;
def lprof = if !RTH or IsNaN(close) then lprof[1] else lProfile;
plot ProfileHigh = if showVOLProfile_RTH_ext == no then Double.NaN else uprof;
plot ProfileLow = if showVOLProfile_RTH_ext == no then Double.NaN else lprof;
ProfileHigh.SetDefaultColor(Color.GREEN);
ProfileLow.SetDefaultColor(Color.RED);
ProfileHigh.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
ProfileLow.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
maybe of you look at a two day chart and subtract todays profile from yesterday profile ti might work. just spitballingAnyway I can plot yesterday Volume Profile on today's trading day?
See if this helpsAnyway I can plot yesterday Volume Profile on today's trading day?
#VolumeProfile_PreviousDay_displayed_NextDay
#20190426 Sleepyz
#20210712 Sleepyz - revised to add option for pricePerRowHeightMode rather than just automatic
input pricePerRowHeightMode = {default AUTOMATIC, TICKSIZE, CUSTOM};
input customRowHeight = 1.0;
def height;
switch (pricePerRowHeightMode) {
case AUTOMATIC:
height = PricePerRow.AUTOMATIC;
case TICKSIZE:
height = PricePerRow.TICKSIZE;
case CUSTOM:
height = customRowHeight;
}
input timePerProfile = {CHART, MINUTE, HOUR, default DAY, WEEK, MONTH, "OPT EXP", BAR};
input multiplier = 1;
input profiles = 1000;
input valueAreaPercent = 70;
def period;
def yyyymmdd = GetYYYYMMDD();
def seconds = SecondsFromTime(0);
def month = GetYear() * 12 + GetMonth();
def day_number = DaysFromDate(First(yyyymmdd)) + GetDayOfWeek(First(yyyymmdd));
def dom = GetDayOfMonth(yyyymmdd);
def dow = GetDayOfWeek(yyyymmdd - dom + 1);
def expthismonth = (if dow > 5 then 27 else 20) - dow;
def exp_opt = month + (dom > expthismonth);
switch (timePerProfile) {
case CHART:
period = 0;
case MINUTE:
period = Floor(seconds / 60 + day_number * 24 * 60);
case HOUR:
period = Floor(seconds / 3600 + day_number * 24);
case DAY:
period = CountTradingDays(Min(First(yyyymmdd), yyyymmdd), yyyymmdd) - 1;
case WEEK:
period = Floor(day_number / 7);
case MONTH:
period = Floor(month - First(month));
case "OPT EXP":
period = exp_opt - First(exp_opt);
case BAR:
period = BarNumber() - 1;
}
def count = CompoundValue(1, if period != period[1] then (count[1] + period - period[1]) % multiplier else count[1], 0);
def cond = count < count[1] + period - period[1];
profile vol = VolumeProfile("startNewProfile" = cond, "numberOfProfiles" = profiles, "pricePerRow" = height, "value area percent" = valueAreaPercent, onExpansion = no);
#Prior Day High/Low ValueAreas
def HVA = if IsNaN(vol.GetHighestValueArea()) then HVA[1] else vol.GetHighestValueArea();
def pHVA = CompoundValue(1, if cond then HVA[1] else pHVA[1], Double.NaN);
def LVA = if IsNaN(vol.GetLowestValueArea()) then LVA[1] else vol.GetLowestValueArea();
def pLVA = CompoundValue(1, if cond then LVA[1] else pLVA[1], Double.NaN);
plot PrevHVA = pHVA;
plot PrevLVA = pLVA;
PrevHVA.SetDefaultColor(Color.YELLOW);
PrevLVA.SetDefaultColor(Color.YELLOW);
PrevHVA.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
PrevLVA.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
#Prior Day POC Calculated
def POC = if IsNaN(vol.GetPointOfControl()) and cond then POC[1] else vol.GetPointOfControl();
def pPOC = CompoundValue (1, if cond then POC[1] else pPOC[1], Double.NaN);
plot PrevPOC = pPOC;
PrevPOC.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
PrevPOC.SetDefaultColor(Color.MAGENTA);
Nope. That just displays 3 lines on each day. One being VPOC, and not sure what other 2 are.. but definitely doesn't look like a volume profile plotSee if this helps
Code:#VolumeProfile_PreviousDay_displayed_NextDau #20190426 Sleepyz def height = PricePerRow.AUTOMATIC; input timePerProfile = {CHART, MINUTE, HOUR, default DAY, WEEK, MONTH, "OPT EXP", BAR}; input multiplier = 1; input profiles = 1000; input valueAreaPercent = 70; def period; def yyyymmdd = GetYYYYMMDD(); def seconds = SecondsFromTime(0); def month = GetYear() * 12 + GetMonth(); def day_number = DaysFromDate(First(yyyymmdd)) + GetDayOfWeek(First(yyyymmdd)); def dom = GetDayOfMonth(yyyymmdd); def dow = GetDayOfWeek(yyyymmdd - dom + 1); def expthismonth = (if dow > 5 then 27 else 20) - dow; def exp_opt = month + (dom > expthismonth); switch (timePerProfile) { case CHART: period = 0; case MINUTE: period = Floor(seconds / 60 + day_number * 24 * 60); case HOUR: period = Floor(seconds / 3600 + day_number * 24); case DAY: period = CountTradingDays(Min(First(yyyymmdd), yyyymmdd), yyyymmdd) - 1; case WEEK: period = Floor(day_number / 7); case MONTH: period = Floor(month - First(month)); case "OPT EXP": period = exp_opt - First(exp_opt); case BAR: period = BarNumber() - 1; } def count = CompoundValue(1, if period != period[1] then (count[1] + period - period[1]) % multiplier else count[1], 0); def cond = count < count[1] + period - period[1]; profile vol = VolumeProfile("startNewProfile" = cond, "numberOfProfiles" = profiles, "pricePerRow" = height, "value area percent" = valueAreaPercent, onExpansion = no); #Prior Day High/Low ValueAreas def HVA = if IsNaN(vol.GetHighestValueArea()) then HVA[1] else vol.GetHighestValueArea(); def pHVA = CompoundValue(1, if cond then HVA[1] else pHVA[1], Double.NaN); def LVA = if IsNaN(vol.GetLowestValueArea()) then LVA[1] else vol.GetLowestValueArea(); def pLVA = CompoundValue(1, if cond then LVA[1] else pLVA[1], Double.NaN); plot PrevHVA = pHVA; plot PrevLVA = pLVA; PrevHVA.SetDefaultColor(Color.YELLOW); PrevLVA.SetDefaultColor(Color.YELLOW); PrevHVA.SetPaintingStrategy(PaintingStrategy.HORIZONTAL); PrevLVA.SetPaintingStrategy(PaintingStrategy.HORIZONTAL); #Prior Day POC Calculated def POC = if IsNaN(vol.GetPointOfControl()) and cond then POC[1] else vol.GetPointOfControl(); def pPOC = CompoundValue (1, if cond then POC[1] else pPOC[1], Double.NaN); plot PrevPOC = pPOC; PrevPOC.SetPaintingStrategy(PaintingStrategy.HORIZONTAL); PrevPOC.SetDefaultColor(Color.MAGENTA);
The 'other 2' lines are Value Area High and Value Area Low. Those along with the VPOC you correctly identified are the prior day's levels displayed on the next day's chart.Nope. That just displays 3 lines on each day. One being VPOC, and not sure what other 2 are.. but definitely doesn't look like a volume profile plot
I'm looking for a volume PROFILE of the previous day to be plotted on the current day's chart. Don't really care for the VAH/VAL/VPOC.The 'other 2' lines are Value Area High and Value Area Low. Those along with the VPOC you correctly identified are the prior day's levels displayed on the next day's chart.
#VolumeProfile_RTHvOvernight
#JoeBone87 in TSL May 2019 (No Guarantee it will plot but math should be good)
input pricePerRowHeightMode = {AUTOMATIC, default TICKSIZE, CUSTOM};
input customRowHeight = 0.25;
input onExpansion = no;
input profiles = 100;
input showPointOfControl = yes;
input showValueArea = yes;
input valueAreaPercent = 70;
input opacity = 30;
input rthbegin = 0930;
input rthend = 1700;
def count = secondsfromTime(rthbegin) >= 0 and secondstillTime(rthend) > 0;
def cond = count != count[1];
def height;
switch (pricePerRowHeightMode) {
case AUTOMATIC:
height = PricePerRow.AUTOMATIC;
case TICKSIZE:
height = PricePerRow.TICKSIZE;
case CUSTOM:
height = customRowHeight;
}
profile vol = VolumeProfile("startNewProfile" = cond, "onExpansion" = onExpansion, "numberOfProfiles" = profiles, "pricePerRow" = height, "value area percent" = valueAreaPercent);
def con = CompoundValue(1, onExpansion, no);
def pc = if IsNaN(vol.GetPointOfControl()) and con then pc[1] else vol.GetPointOfControl();
def hVA = if IsNaN(vol.GetHighestValueArea()) and con then hVA[1] else vol.GetHighestValueArea();
def lVA = if IsNaN(vol.GetLowestValueArea()) and con then lVA[1] else vol.GetLowestValueArea();
def hProfile = if IsNaN(vol.GetHighest()) and con then hProfile[1] else vol.GetHighest();
def lProfile = if IsNaN(vol.GetLowest()) and con then lProfile[1] else vol.GetLowest();
def plotsDomain = IsNaN(close) == onExpansion;
plot POC = if plotsDomain then pc else Double.NaN;
plot ProfileHigh = if plotsDomain then hProfile else Double.NaN;
plot ProfileLow = if plotsDomain then lProfile else Double.NaN;
plot VAHigh = if plotsDomain then hVA else Double.NaN;
plot VALow = if plotsDomain then lVA else Double.NaN;
DefineGlobalColor("Profile", GetColor(1));
DefineGlobalColor("Point Of Control", GetColor(5));
DefineGlobalColor("Value Area", GetColor(8));
vol.Show(GlobalColor("Profile"), if showPointOfControl then GlobalColor("Point Of Control") else Color.CURRENT, if showValueArea then GlobalColor("Value Area") else Color.CURRENT, opacity);
POC.SetDefaultColor(GlobalColor("Point Of Control"));
POC.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
VAHigh.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
VALow.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
VAHigh.SetDefaultColor(GlobalColor("Value Area"));
VALow.SetDefaultColor(GlobalColor("Value Area"));
ProfileHigh.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
ProfileLow.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
ProfileHigh.SetDefaultColor(GetColor(3));
ProfileLow.SetDefaultColor(GetColor(3));
ProfileHigh.Hide();
ProfileLow.Hide();
input bubbles = yes;
input n = 2;
def n1 = n + 1;
AddChartBubble(bubbles and !IsNaN(close[n1]) and IsNaN(close[n]), VAHigh[n1], "V-VAH", color = Color.YELLOW, yes);
AddChartBubble(bubbles and !IsNaN(close[n1]) and IsNaN(close[n]), VALow[n1], "V-VAL", Color.YELLOW, no);
AddChartBubble(bubbles and !IsNaN(close[n1]) and IsNaN(close[n]), POC[n1], "V-POC", Color.RED, no);
Hello @horserider - when I load the study to TOS -it gives me the following errors:You people really want this? Just a moving average that can be duplicated by using the already existing SMA or EMA in ToS. Here is the POC avg compared to 100 length SMA and EMA.
I doubt it is worth the trouble. If you have a POC that is plotted each day just add something like this :
Code:input length =20; plot smapoc = simpleMovingAvg (poc, length);
Adjust length to fit what you want.
Hello @horserider - when I load the study to TOS -it gives me the following errors:
Expected double at 2:16
No such variable: poc at 2:33
Expected double at 2:16
No such variable: poc at 2:33
Can you please work on it when you have a chance
Start a new thread and receive assistance from our community.
useThinkScript is the #1 community of stock market investors using indicators and other tools to power their trading strategies. Traders of all skill levels use our forums to learn about scripting and indicators, help each other, and discover new ways to gain an edge in the markets.
We get it. Our forum can be intimidating, if not overwhelming. With thousands of topics, tens of thousands of posts, our community has created an incredibly deep knowledge base for stock traders. No one can ever exhaust every resource provided on our site.
If you are new, or just looking for guidance, here are some helpful links to get you started.