First, I think you'll have better results on 15 minute bars, because that's where I found the most success with the system. Second, I'm glad you're getting boffo numbers in the most recent parts of the backtest. Yeah, try it on 15 minute bars, and come back, because the code is correct, save for the MACD-MACDSMA absolute value calculation.
Are you sure its suppose to be the SMA of the MACD? Looking at ScottD's code I see: absvalue( MACDVal ) < 1.4 And up above MACDVal is: MACDVal = MACD( Close, 5, 13 ) ; So are you sure I have it wrong?
This is what I got: for Bar := 5 to BarCount - 1 do begin This stuff does not appear relevant to the script var SMADiff : float =(SMA( bar, #close , 20 ) - SMA( bar - 1, #close, 20 )); var MACDday : integer = MACDExSeries( #Close, val1, val2 ); if (bar>lbar+2) then begin if we're greater than 2 bars away from the closing bar of yesterday, then: if not (lastpositionactive) and (crossovervalue(bar,HersheyStochK,50) ) and (@#Volume[bar]>20000) and (gettime(bar)<1545) then begin buyatmarket(Bar+1,'Jacks friend scott d says to buy here'); end; if not (lastpositionactive) and (crossundervalue(Bar,HersheyStochK,50)) and (@#Volume[bar]>20000) and (gettime(bar)<1545) then begin Damnit anyway, I guess I left the window open and didn't close it before I posted the version. I've had to modify what I posted as the final version for this, but the backtest I got was based on those changes, so that doesn't affect the results. shortatmarket(Bar+1,'Jacks friend scott d says to sellshort here'); end; if (positionlong(lastposition)) and (@HersheyStochK[bar]<@HersheyStochD[bar]) and (crossundervalue(Bar,HersheyStochK,80)) and (gettime(bar)<1545) then begin sellatmarket(Bar+1,LastPosition,''); end; if (positionshort(lastposition)) and (@HersheyStochK[bar]>@HersheyStochD[bar]) and (crossovervalue(Bar,HersheyStochK,20)) and (gettime(bar)<1545) then begin coveratmarket(Bar+1,lastposition,''); end; This is where the meat is: if (positionlong(lastposition)) and (abs(@HersheyStochD[bar]-SMA(Bar,HersheyStochD,6))<1.4) then begin sellatmarket If we're long, and the absolute value of the difference between the HersheyStochD on this bar - the HersheyStochDSMA is less than 1.4 then: (Bar+1,LastPosition,''); end; if we're short, and that absolutevalue difference is less than 1.4 then if (positionshort(lastposition)) and (abs(@HersheyStochD[bar]-SMA(Bar,HersheyStochD,6))<1.4) then begin coveratmarket(Bar+1,LastPosition,''); end; this is the same if (positionlong(lastposition)) and (lastbar(bar)) then begin sellatclose(Bar,lastposition,'');end; if (positionshort(lastposition)) and (lastbar(bar)) then begin coveratclose(Bar,lastposition,'');end; end; this is just a call for the lastbar of the day. When the bar tomorrow is greater than this by 2, it's time to buy. if lastbar(bar) then begin lbar:=bar; end; end;
15 min results look a lot worse: profit; -$12,662 trades: 390 PF: .72 I am using all ES data when forming the bars which are used for calculating the indicators... I am going to try again now with restricting the bars used to between 8:30 and 3:00 central. 5 Min Results; Profit: -$1,990 Trades:258 PF:.95 15 Min Results: Profit: +$5,840 Trades:537 PF:1.08
I figured out the problem. Where you're using volume data on the current bar, use it on the previous bar. That is, they literally mean the volume of 1 bar ago. I think that's where we are tripping up. And I just compared what I posted, and I tried switch the bar of 1 bar ago with the current bar, and the results are substantially different.
And if you looked closer you'll find it's different. Yes I'm sure you have that wrong. The volume value you were using was fine, too. Ex post, the MACD are the same. For some reason, older versions used MACDex, so in that irrelevant portion would have been the MACDex section. We're just dealing with regular MACD's.
"JACK HERSHEY METHOD EXPOSED AS FRAUD! *Debunked*" Whoo Hoo we've all been saved from the ravages of the Hershey Highway method! Now, can we please move on?