Trading logic won't lower drawdown and potentially asking for individuals to kindly help me see for any blind spots in my trading logic

 
Afternoon, the trading logic I formulated is developed by understanding the relationship between price and volume. The intention is to buy as low as possible when the last sell order has been executed (absorbed a buy order), and to sell as high as possible when the last buy order has been executed (absorbed a sell order). I have broken the trading logic into 4 possible price scenarios being:


1) Low[0] <= Low[1] && High[0] >= High[1] // Outside bar
2) Low[0] >= Low[1] && High[0] <= High[1] // Inside bar
3) Low[0] <= Low[1] && High[0] <= High[1] // Bearish bar
4) High[0] >= High[1] &&  Low[0] >= Low[1] // Bullish bar

When including volume the 4 price scenarios become:

1) Low[0] <= Low[1] && High[0] >= High[1] // Outside bar

Buy: VOL[0] > VOL[1] // Mass absorption

Sell: VOL[0] > VOL[1] // Mass absorption

2) Low[0] >= Low[1] && High[0] <= High[1] // Inside bar

Buy immediately // Bullish breakout possibility

Sell immediately // Bearish breakout possibility

3) Low[0] <= Low[1] && High[0] <= High[1] // Bearish bar

Sell immediately // Bearish breakout possibility

Buy immediately (Bearish exhaustion):

a) Low[1] >= Low[2] && High[1] <= High[2] && Open[0] < PivotPoint. // This is a previous inside bar with a pullback but the first half of the new bearish bar has already absorbed the previous buy orders with the new bearish bar being dominated by sellers in the first half of the bar as seen with the open being below the pivot point value.

b) Low[1] <= Low[2] && High[1] >= High[2]. // This is a previous outside bar, but due to the expansion nature of the bar the previous buy orders have already been absorbed by sell orders, thus no additional volume would be required.

c) Low[1] <= Low[2] && High[1] <= High[2]. // This previous bar is an bearish bar thus no previous buy orders are available to be absorbed by sell orders in the current bar, taking away the possibility of an increase in volume.

d) High[1] >= High[2] && Low[1] >= Low[2]. // This previous bar is an bullish bar but has broken is a break off of the bearish structure, thus this would be a "fakeout".

Buy: Low[1] >= Low[2] && High[1] <= High[2] && Open[0] > PivotPoint && VOL[0] > VOL[1]// This bar had a minor pull back (collection of buy orders with a bullish pullback), and this bar had a bullish dominance in the beginning of the bar with the Open[0] > PivotPoint providing the potential for more buy orders to be absorbed by the sell orders thus increasing the amount of volume in the bar.

4) High[0] >= High[1] &&  Low[0] >= Low[1] // Bullish bar

Buy immediately // Bullish breakout possibility

Sell immediately (Bullish exhaustion):

a) Low[1] >= Low[2] && High[1] <= High[2] && Open[0] > PivotPoint. // This is a previous inside bar with a pullback but the first half of the new bullish bar has already absorbed the previous sell orders with the new bullish bar being dominated by buyers in the first half of the bar as seen with the open being above the pivot point value.

b) Low[1] <= Low[2] && High[1] >= High[2]. // This is a previous outside bar, but due to the expansion nature of the bar the previous buy orders have already been absorbed by buy orders, thus no additional volume would be required.

c) Low[1] <= Low[2] && High[1] <= High[2]. // This previous bar is an bearish bar but has broken is a break off of the bullish structure, thus this would be a "fakeout".

d) High[1] >= High[2] && Low[1] >= Low[2]. // This previous bar is an bullish bar thus no previous sell orders are available to be absorbed by buy orders in the current bar, taking away the possibility of an increase in volume. 

Sell: Low[1] >= Low[2] && High[1] <= High[2] && Open[0] < PivotPoint && VOL[0] > VOL[1]// This bar had a minor pull back (collection of sell orders with a bearish pullback), and this bar had a bearish dominance in the beginning of the bar with the Open[0] > PivotPoint providing the potential for more sell orders to be absorbed by the buy orders thus increasing the amount of volume in the bar.

Would this trading logic IYO create an environment where one is buying as low as possible and selling as high as possible?  I have run back test on it using it on all the available time frames on MT5 run at the same time and the drawdown hasn't gone down, the number of trades executed have remained the same which is good, but the drawdown hasn't gone down. What may have caused this? Does this logic create an infinite loop possibly that might cause this outcome? I would love for someone to play devil's advocate. Thank you!
Documentation on MQL5: Trade Orders in DOM / Constants, Enumerations and Structures
Documentation on MQL5: Trade Orders in DOM / Constants, Enumerations and Structures
  • www.mql5.com
For equity securities, the Depth of Market window is available, where you can see the current Buy and Sell orders. Desired direction of a trade...
 

I'll try to give you a perspective. Let's say you're trading on the 1 hour timeframe.

Straight off the bat, this is one of the conditions which could recalculate:

High[0] >= High[1] &&  Low[0] >= Low[1] // Bullish bar

When you use index [0] it is the current bar which is always moving up and down while it hasn't closed. 

That means this condition where you check that the high of the current bar is greater than or equal to the high of the previous bar could be true for a SPLIT second until it is not true.

And if it is a 1 hour timeframe, it is giving it the chance to repaint/recalculate in the space of a whole hour. You'll get plenty of false signals that way. I wouldn't use current bar in EAs at all.

 
Conor Mcnamara #:

I'll try to give you a perspective. Let's say you're trading on the 1 hour timeframe.

Straight off the bat, this is one of the conditions which could recalculate:

When you use index [0] it is the current bar which is always moving up and down while it hasn't closed. 

That means this condition where you check that the high of the current bar is greater than or equal to the high of the previous bar could be true for a SPLIT second until it is not true.

And if it is a 1 hour timeframe, it is giving it the chance to repaint/recalculate in the space of a whole hour. You'll get plenty of false signals that way. I wouldn't use current bar in EAs at all.

I understand, thanks for helping me understand!
[Deleted]  

Nice, detailed logic, but “buying low and selling high” structurally doesn’t guarantee better drawdown if your risk per trade, stop placement, and correlation between signals stay the same. The flat drawdown with the same trade count usually means your entry logic changed but your adverse excursion (how far price moves against you before outcome) and/or R:R profile didn’t really improve, not that there’s an infinite loop. If you want to stress‑test it, slice the backtest by regime (trend vs range, high vs low volatility) and check where the logic actually improves MAE/MFE instead of just giving you “nicer‑sounding” entries.

 
Conor Mcnamara #:

I'll try to give you a perspective. Let's say you're trading on the 1 hour timeframe.

Straight off the bat, this is one of the conditions which could recalculate:

When you use index [0] it is the current bar which is always moving up and down while it hasn't closed. 

That means this condition where you check that the high of the current bar is greater than or equal to the high of the previous bar could be true for a SPLIT second until it is not true.

And if it is a 1 hour timeframe, it is giving it the chance to repaint/recalculate in the space of a whole hour. You'll get plenty of false signals that way. I wouldn't use current bar in EAs at all.

Petra5 #:

Nice, detailed logic, but “buying low and selling high” structurally doesn’t guarantee better drawdown if your risk per trade, stop placement, and correlation between signals stay the same. The flat drawdown with the same trade count usually means your entry logic changed but your adverse excursion (how far price moves against you before outcome) and/or R:R profile didn’t really improve, not that there’s an infinite loop. If you want to stress‑test it, slice the backtest by regime (trend vs range, high vs low volatility) and check where the logic actually improves MAE/MFE instead of just giving you “nicer‑sounding” entries.

Thank you for helping me understand! Upon thinking about this situation, I have realzied looking at the two factors of it submitting every day (which isn't really bad) but the issue of the draw down being to high the only logical conclusion is that when one buys the drawdown becomes larger because more sell orders in the market are being executed the lower the price of the security goes down increasing the drawdown, and vice versa when selling. This issue can be sorted out possibly by using a volume filter. The price action has literally shown every possible example for price range which is why it would submit every single day irrespective of security. I did remove the Low[0] and High[0] and compared rather Low[1] to Low[2] and High[1] to High[2], while maintaining the Open[0] as a comparison to the pivot point value as these are static values where Low[0] and High[0] are dynamic values. We obviously know static values are more reliable than dynamic values.