Hi
I seem to be getting unexpected results when testing a strategy on Bollinger bands. For the purposes of trying to work out what the issue is, I’ve totally stripped down the code to just the below – from this it seems to be an issue with bollinger bands alone. Was wondering if anyone else had this issue.
It doesnt enter when I thought it should. I.e. when the close is above the lower bollinger band. INstead it enters at some random point – see screen shot. THis is EUR USD (1 hour)
bbl = BollingerDown[20](close)
Bullish0 = close >= bbl
IF Bullish0 THEN
buy 1 perpoint AT MARKET
Are you sure the bollinger bands on your chart has the same exact settings? (period = 20, deviation = 2.0).
Hi Nicolas. It is set at the same properties. But looks like I made an error – many, many apologies all! The real issue seems to be with the average true range. I didnt include it in the previous message as didnt think there was an issue with this. Anyhow see below – full code. Any idea what the problem can be? I want to use the atr as part of the buy and stop loss as a risk management method. When i change it to for example ‘buy 1 perpoint at market’ and similar for stop loss then it seems to work fine.
// Conditions to enter long positions
defparam cumulateorders=false
bbu1 = BollingerUp[20](close)
bbl1 = BollingerDown[20](close)
atr= averagetruerange[1](close)
Bullish0 = close >= bbl1
IF Bullish0 THEN
buy (10/(2.5*atr)) perpoint AT MARKET
set stop loss (2.5*atr)
ENDIF
c1 = (close crosses over bbu1)
IF c1 THEN
SELL AT MARKET
ENDIF
Ok so the problem is located in your contract size calculation, if the size is too small, then no order will be triggered.
I suggest you set a minimal contract size like this:
minSize = 0.1 //define here what would be the minimal size
buy max(minSize,(10/(2.5*atr))) perpoint AT MARKET
Thank you so much Nicolas