Volatility, Volatility, Volatility – A Building Block for Day Trading the ES.D – Free System

Did that Title get your Attention?

I didn’t say a very good Free System!  This code is really cool so I thought I would share with you.  Take a look at this rather cool picture.

Six Bar Break Out with Volatility Buffer and Volatility Trailing Stop

Thanks to a reader of this blog (AG), I got this idea and programmed a very simple day trading system that incorporated a volatility trailing stop.  I wanted to make sure that I had it programmed correctly and always wanted to draw a box on the chart – thanks to (TJ) from MC forums for getting me going on the graphic aspect of the project.

Since I have run out of time for today – need to get a haircut.  I will have to wait till tomorrow to explain the code.  But real quickly the system.

Buy x% above first y bar high and then set up a trailing stop z% of y bar average range – move to break-even when profits exceed  $w.  Opposite goes for the short side.  One long and one short only allowed during the day and exit all at the close.

What the heck here is the code for the Strategy.

inputs: startTradeTime(930),startTradeBars(6),endTradeTime(1530),
		breakOutVolPer(0.5),trailVolPer(.25),breakEven$(500);
		

vars:	longsToday(0),shortsToday(0),
		longStop(0),shortStop(0),
		longTrail(0),shortTrail(0),
		trailVolAmt(0),
		barCount(0),highToday(0),lowToday(0),
		volAmt(0),mp(0);
		
if t = startTradeTime + barinterval then
begin
	longsToday = 0;
	shortsToday = 0;
	longStop = 0;
	shortStop = 0;
	longTrail = 0;
	shortTrail = 99999999;
	barCount = 0;
	highToday = 0;
	lowToday = 999999999;
end;

highToday = maxList(h,highToday);
lowToday = minList(l,lowToday);

mp = marketPosition;

barCount +=1;

if barCount >= startTradeBars then
begin
	volAmt = average(range,startTradeBars);
	if barCount = startTradeBars then
	begin
		longStop = highToday + breakOutVolPer * volAmt;
		shortStop = lowToday - breakOutVolPer * volAmt;
	end;
	if t < endTradeTime then
		begin
		if longsToday = 0 then buy("volOrboL") next bar at longStop stop;
		if shortsToday = 0 then sellShort("volOrboS") next bar shortStop stop;
	end;

	trailVolAmt = volAmt * trailVolPer;
	if mp = 1 then
	begin
		longsToday +=1;
		if c > entryPrice + breakEven$/bigPointValue then
			longTrail = maxList(entryPrice,longTrail);
		longTrail = maxList(c - trailVolAmt,longTrail);
		sell("L-TrlX") next bar at longTrail stop;
	end;
	if mp = -1 then
	begin
		shortsToday +=1;
		if c < entryPrice - breakEven$/bigPointValue then
			shortTrail = minList(entryPrice,shortTrail);
		shortTrail = minList(c + trailVolAmt,shortTrail);
		buyToCover("S-TrlX") next bar at shortTrail stop;
	end;
end;
setExitOnClose;
I will comment in a later post!

And the code for the Strategy Tracking Indicator.

inputs: startTradeTime(930),startTradeBars(6),endTradeTime(1530),
		breakOutVolPer(0.5),trailVolPer(.25),breakEven$(500);
		

vars:	longsToday(0),shortsToday(0),
		longStop(0),shortStop(0),
		longTrail(0),shortTrail(0),
		trailVolAmt(0),
		barCount(0),highToday(0),lowToday(0),
		volAmt(0),mp(0);
		
if t = startTradeTime + barinterval then
begin
	longsToday = 0;
	shortsToday = 0;
	longStop = 0;
	shortStop = 0;
	longTrail = 0;
	shortTrail = 99999999;
	barCount = 0;
	highToday = 0;
	lowToday = 999999999;
	mp = 0;
end;

highToday = maxList(h,highToday);
lowToday = minList(l,lowToday);
		
barCount +=1;

vars: iCnt(0),mEntryPrice(0),myColor(0);

if barCount >= startTradeBars  then
begin
	volAmt = average(range,startTradeBars);
	if barCount = startTradeBars then
	begin
		longStop = highToday + breakOutVolPer * volAmt;
		shortStop = lowToday - breakOutVolPer * volAmt;
		for iCnt = 0 to startTradeBars-1
		begin
			plot1[iCnt](longStop,"BuyBO",default,default,default);
			plot2[iCnt](shortStop,"ShrtBo",default,default,default);
		end;

	end;
	if t < endTradeTime then
	begin
		if longsToday = 0 and h >= longStop then 
		begin
			mp = 1;
			mEntryPrice = maxList(o,longStop);
			longsToday += 1;
		end;
		if shortsToday = 0 and l <= shortStop then
		begin
			mp = -1;
			mEntryPrice = minList(o,shortStop);
			shortsToday +=1;
		end;	
		plot3(longStop,"BuyBOXTND",default,default,default);
		plot4(shortStop,"ShrtBOXTND",default,default,default);
	end;
	
	trailVolAmt = volAmt * trailVolPer;
	
	if mp = 1 then
	begin
		if c > mEntryPrice + breakEven$/bigPointValue then
			longTrail = maxList(mEntryPrice,longTrail);

		longTrail = maxList(c - trailVolAmt,longTrail);
		plot5(longTrail,"LongTrail",default,default,default);
	end;
	if mp = -1 then
	begin
		if c < mEntryPrice - breakEven$/bigPointValue then
			shortTrail = minList(mEntryPrice,shortTrail);
		shortTrail = minList(c + trailVolAmt,shortTrail);
		plot6(shortTrail,"ShortTrail",default,default,default);
	end;
end;
Cool code for the indicator

Very Important To Set Indicator Defaults Like This

For the BO Box use these settings – its the first 4 plots:

Use these colors and bar high and bar low and set opacity

The box is created by drawing thick semi-transparent lines from the BuyBo and BuyBOXTND down to ShrtBo and ShrtBOXTND.   So the Buy components of the 4 first plots should be Bar High and the Shrt components should be Bar Low.  I didn’t specify this the first time I posted.  Thanks to one of my readers for point this out!

Use bar low for ShrtBo and ShrtBOXTND plots

Also I used different colors for the BuyBo/ShrtBo and the BuyBOXTND/ShrtBOXTND.  Here is that setting:

The darker colored line on the last bar of the break out is caused by the overlap of the two sets of plots.

Here is how you set up the trailing stop plots:

Make Dots and Make Then Large – I have Red and Blue Set

 

Please follow and like us:

Leave a Reply