Darvas Volume Visualiser
Printed From: BullCharts Forum
Category: BullCharts
Forum Name: BullScript
Forum Discription: Technical discussion related specifically to the BullScript programming language.
URL: http://www.bullcharts.com.au/forum/forum_posts.asp?TID=587
Printed Date: 24 Apr 2025 at 2:00am Software Version: Web Wiz Forums 9.69 - http://www.webwizforums.com
Topic: Darvas Volume Visualiser
Posted By: maximo
Subject: Darvas Volume Visualiser
Date Posted: 18 Oct 2009 at 6:15pm
I have always wondered how the Darvas method of Volume is determined.
Here's an indicator to show the Volume breakout parameter of Darvas.
Set the Max Volume Breakout offset to 1 to show the exact day the increase occured.
The default holding days for this volume increase is 21.
[Description ="Darvas volume signal visualiser"]
volSize := input("Volume Breakout size %",50,0);
{ Set offset to 1 to see exact day of breakout }
volOffset := input("Max volume breakout offset",21,1);
volOk := hhv(V>hist(V,1)*(1+volSize/100),volOffset);
[linestyle =Grounded Bar; color=olive; width=2]
v2:= if(v>1000000000,v*0.15,v);
if (v2>0,v2/100000,0);
[linestyle =Solid; color=blue; width=1]
volOk*1000;
|
Replies:
Posted By: peter1
Date Posted: 25 Oct 2009 at 11:40am
I do not believe it. I was considering a Darvas research project and I need a robust Darvas indicator to find all occurrences of this pattern in a chart. I have been looking at the Darvas indicator for the past week and trying to understand the logic behind the volume indicator. I haven't logged on to this forum for a while and here I see that Maximo has provided some assistance before I've even asked.
With this foresight you should be making a gazillion in the market atm Maximo. I hope you are.
|
Posted By: maximo
Date Posted: 26 Oct 2009 at 3:34am
gazillions you say? I would need a half gazillion to make that much lol. Doing alright though trading futures and forex more than stocks.
I've been trying to develop the logic to detect Ascending triangles in a scan for quite some time. It turns out a variation of darvas logic may be the answer to detecting them effectively. As Darvas is a higher low, one within another one would be 2 consective higher lows or side by side. So began the exercise of uncovering the logic.
Here's a Darvas box confirmation counter I developed over the weekend. The idea behind this is
when the High & Low counts = confirm count then a box is formed.
[Description ="Darvas Works, Max"]
[target =price; linestyle=solid]
bo:= Input("Breakout Period",30,3);
cp:= Input("Confirmation Periods",3,3);
hvp:= Input("Largest volume spike in period: 0=off",15,0);
VolSize:= Input("Volume requirement%",0,0);
CountHi:= if(H>=ref(HHV(H,bo),-1) and H>=ref(HHV(H,cp),-1),1,Prev+1);
[color =Blue; linestyle=solid]
[linestyle =Text; textalign=Above,Center;]
BoxTop:= If(CountHi<=cp and ref(CountHi,1)>1, Right(CountHi,2), undefined);
BoxTop;
High ;
CountLo:= if(H>=ref(HHV(H,bo),-1) or L<ref(LLV(L,cp-1),-1) or CountHi<=2,1,Prev+1);
[color =red]
[linestyle =Text; textalign=Below,Center;]
If (CountLo<=cp and ref(CountLo,1)=2 and ref(CountLo,2)=3 and hist(barssince(BoxTop),1)<20
or CountLo<=cp and ref(CountLo,1)>2 and hist(barssince(BoxTop),1)<20
, Right(CountLo,2), undefined);
Low ;
hvm:= if(hvp=0,15,hvp);
hv:= HHV(((V-ref(V,-1))/ref(V,-1))*100,hvm);
[color =Medium Orchid]
[linestyle =Text; textalign=Below,Center]
If (hvp and CountLo=cp and hist(barssince(BoxTop),1)<20
, round(hv,0) + "%", undefined);
Low *.97;
{ Darvas box rendering }
volOk := if(ref(hv,2*cp)>=Volsize,1,0);
breakoutOk := if(H>=ref(HHV(H,bo),-1),1,0);
firstBoxOk := breakoutOk and volOk;
normalBoxOk := breakoutOk;
dvRes := __Darvas(cp,cp,2,firstBoxOk,firstBoxOk);
TopBox := __DarvasTop(dvRes);
BottomBox := __DarvasBot(dvRes);
BoxNumber := __DarvasBoxNumber(dvRes);
inBox := BoxNumber >= 1;
startOfBox := BoxNumber > hist(BoxNumber,1);
endOfBox := (startOfBox and BoxNumber > 1) or (BoxNumber = 0 and hist(BoxNumber,1)>0);
[drawundefined =gap]
[name =Top Darvas; color=dodger blue; linestyle=HorzStep; target=Price]
TopBox;
[name =Bottom Darvas; color=dodger blue; linestyle=HorzStep]
BottomBox;
[name =Right Darvas Vertical; color=dodger blue; linestyle="Fill Bars"]
if (endOfBox,hist(TopBox,1),undefined);
if (endOfBox,hist(BottomBox,1),undefined);
[name =Left Darvas Vertical; color=dodger blue; linestyle="Fill Bars"]
if (startOfBox,TopBox,undefined);
if (startOfBox,BottomBox,undefined);
|
Posted By: maximo
Date Posted: 07 Nov 2009 at 5:32pm
I added a parcel split/take profit band. The idea being to close half the position at, or above this band.
insert code after line 6:
Flag:=input("Take Profit Band: 1=On",0,0,1); [color=coral] if(flag,ma(H,10,E) + 2.5*ATR(10),undefined);
|
Posted By: maximo
Date Posted: 07 Nov 2009 at 5:52pm
added a moving average for alternate or remaining exit.
insert code after line 6:
average:=Input("Average Period: >0=on",30,0);
[color =lawn green]
if (average>0,ma(C,average,E),undefined);
|
Posted By: maximo
Date Posted: 10 Jan 2010 at 6:23pm
Indicator Update.
1. Corrected the bar numbering
2. Added Parabolic SAR option
[Description ="Darvas Works, Max"]
[target =price; linestyle=solid]
bo:= Input("Breakout Period",30,3);
cp:= Input("Confirmation Periods",3,3);
cper:=cp+1;
hvp:= Input("Largest volume spike in period: 0=off",15,0);
VolSize:= Input("Volume requirement%",0,0);
Flag:= input("Take Profit Band: 1=on",0,0,1);
[color =coral]
if (flag,ma(H,10,E) + 2.5*ATR(10),undefined);
average:= Input("Average Period: >0=on",30,0);
[color =lawn green]
if (average>0,ma(C,average,E),undefined);
CountHi:= if(H>=ref(HHV(H,bo),-1) and H>=ref(HHV(H,cper),-1),1,Prev+1);
[color =Blue; linestyle=solid]
[linestyle =Text; textalign=Above,Center;]
BoxTop:= If(CountHi<=cper and ref(CountHi,1)>2, Right(CountHi-1,2), undefined);
BoxTop;
High ;
CountLo:= if(H>=ref(HHV(H,bo),-1) or L<ref(LLV(L,cper-1),-1) or CountHi<=2,1,Prev+1);
[color =red]
[linestyle =Text; textalign=Below,Center;]
If (CountLo<=cper and ref(CountLo+1,1)=2 and ref(CountLo,2)=3 and hist(barssince(BoxTop),1)<20
or CountLo<=cper and ref(CountLo,1)>2 and hist(barssince(BoxTop),1)<20
, Right(CountLo-1,2), undefined);
Low ;
hvm:= if(hvp=0,15,hvp);
hv:= HHV(((V-ref(V,-1))/ref(V,-1))*100,hvm);
[color =Medium Orchid]
[linestyle =Text; textalign=Below,Center]
If (hvp and CountLo=cp and hist(barssince(BoxTop),1)<20
, round(hv,0) + "%", undefined);
Low *.97;
psar:= Input("Parabolic SAR: >0=on",0,0);
[linestyle =Points; color=Royal Blue]
if (psar,sar(0.01,0.05),undefined);
{ Darvas box rendering }
volOk := if(ref(hv,2*cp)>=Volsize,1,0);
breakoutOk := if(H>=ref(HHV(H,bo),-1),1,0);
firstBoxOk := breakoutOk and volOk;
normalBoxOk := breakoutOk;
dvRes := __Darvas(cp,cp,2,firstBoxOk,firstBoxOk);
TopBox := __DarvasTop(dvRes);
BottomBox := __DarvasBot(dvRes);
BoxNumber := __DarvasBoxNumber(dvRes);
inBox := BoxNumber >= 1;
startOfBox := BoxNumber > hist(BoxNumber,1);
endOfBox := (startOfBox and BoxNumber > 1) or (BoxNumber = 0 and hist(BoxNumber,1)>0);
[drawundefined =gap]
[name =Top Darvas; color=dodger blue; linestyle=HorzStep; target=Price]
TopBox;
[name =Bottom Darvas; color=dodger blue; linestyle=HorzStep]
BottomBox;
[name =Right Darvas Vertical; color=dodger blue; linestyle="Fill Bars"]
if (endOfBox,hist(TopBox,1),undefined);
if (endOfBox,hist(BottomBox,1),undefined);
[name =Left Darvas Vertical; color=dodger blue; linestyle="Fill Bars"]
if (startOfBox,TopBox,undefined);
if (startOfBox,BottomBox,undefined);
|
|