Buyprice higher time frame finished candle close

Hello,
The goal, on a seconds time frame charts, is to buy the close of a finished 5mn candle, provided this 5mn candle meets several criterias.

Then sell once 1 second close below latest 5mn low.

Here is the code.
Buy doesn't seem to happen at 5mn close and I can't determine why. It seems to buy prematurely.
Why, and how to make sure it buys correctly at 5mn close.

My premise was that with TimeFrameGetPrice I didn't need to compress, but maybe I was wrong:

Filter = 1; // show all bars
SetPositionSize(50, spsShares  );

/**************************************************/
/*	   Trading System
/**************************************************/
timeNow = TimeNum();
firstBarOfDay = Day() != Ref(Day(), -1);
dayHigh = HighestSince( firstBarOfDay, High );
volumeUpToNow = SumSince( firstBarOfDay, V ) + ValueWhen( firstBarOfDay, V );
tradingTime = timeNow >= 040000 AND timeNow <= 092000;


previousDailyClose = TimeFrameGetPrice( "C", inDaily, -1 ); 
previousDailyHigh = TimeFrameGetPrice( "H", inDaily, -1 ); 
previous2DailyHigh = TimeFrameGetPrice( "H", inDaily, -2 ); 
previous3DailyHigh = TimeFrameGetPrice( "H", inDaily, -3 ); 
changeSinceYesterdayClose = (C-previousDailyClose)/previousDailyClose*100;
//PositionScore = changeSinceYesterdayClose;


previous5mnOpen = TimeFrameGetPrice( "O", in5Minute, -1 ); 
previous5mnHigh = TimeFrameGetPrice( "H", in5Minute, -1 ); 
previous5mnLow = TimeFrameGetPrice( "L", in5Minute, -1 ); 
previous5mnClose = TimeFrameGetPrice( "C", in5Minute, -1 ); 
previous5mnVolume = TimeFrameGetPrice( "V", in5Minute, -1 ); 
previous5mnHMinusLMidpoint = (previous5mnHigh - previous5mnLow) / 2; 
previous5mnHMinusLThird = (previous5mnHigh - previous5mnLow) / 3; 
previous5mnMidpoint = previous5mnLow + previous5mnHMinusLMidpoint;
previous5mThirdFromHight = previous5mnHigh - previous5mnHMinusLThird;
previous5mnPercentFromLowToHigh = (previous5mnHigh-previous5mnLow)/previous5mnLow*100;


fiveMinOpen = TimeFrameGetPrice( "O", in5Minute, 0 ); 
fiveMinHigh = TimeFrameGetPrice( "H", in5Minute, 0 ); 
fiveMinLow = TimeFrameGetPrice( "L", in5Minute, 0 ); 
fiveMinClose = TimeFrameGetPrice( "C", in5Minute, 0 ); 
fiveMnVolume = TimeFrameGetPrice( "V", in5Minute, 0 ); 
fiveMnHMinusLMidpoint = (fiveMinHigh - fiveMinLow) / 2; 
fiveMnHMinusLThird = (fiveMinHigh - fiveMinLow) / 3; 
fiveMnMidpoint = fiveMinLow + fiveMnHMinusLMidpoint;
fiveMThirdFromHight = fiveMinHigh - fiveMnHMinusLThird;
FiveMnPercentFromLowToHigh = (H-fiveMinLow)/fiveMinLow*100;
FiveMnPercentFromOpenToClose = (H-fiveMinOpen)/fiveMinOpen*100;
FiveMnPercentFromOpenToCloseCandleFinished = (fiveMinClose-fiveMinOpen)/fiveMinOpen*100;


AddColumn( FiveMnPercentFromOpenToCloseCandleFinished, "FiveMnPercentFromOpenToCloseCandleFinished" );
AddColumn( fiveMinClose, "fiveMinClose" );
//AddColumn( dayHigh, "dayHigh" );



Buy = 
C > 1 AND
tradingTime AND
changeSinceYesterdayClose > 8 AND
FiveMnPercentFromOpenToCloseCandleFinished > 10;

BuyPrice = fiveMinClose;

Sell = C < previous5mnLow;
SellPrice = C;
last_close = TimeFrameGetPrice("C", in5minute, 0, expandLast);
bar_end = last_close != Ref(last_close,-1);

Plot(bar_end, "bar_end", colorDefault, styleHistogram );

NOTE: marks bar end of longer TF within historical data

13

Then insert into your buy rule

Buy = 
C > 1 AND
tradingTime AND
changeSinceYesterdayClose > 8 AND
FiveMnPercentFromOpenToCloseCandleFinished > 10 AND
bar_end;

BuyPrice = C;
2 Likes

Actually it would be better to use Barindex() since price may be equal on subsequent longer TF bars.

TimeFrameSet(tmfrm=in5Minute);
ltf_bi = BarIndex();
TimeFrameRestore();
ltf_bi = TimeFrameExpand(ltf_bi, tmfrm);
bar_end = ltf_bi != Ref(ltf_bi, -1);

Plot( bar_end, "bar_end", colorDefault, styleHistogram );

or

ltf_bi = TimeFrameCompress(BarIndex(), in5Minute);
ltf_bi = TimeFrameExpand(ltf_bi, in5Minute, expandLast);
bar_end = ltf_bi != Ref(ltf_bi,-1);

Plot( bar_end, "bar_end", colorDefault, styleHistogram );

I know some use

bar_end = TimeFrameExpand(1, in5Minute, expandPoint);

But I do not like it.

1 Like

Thanks, changed solution to your last post.