I am posting an image to show why I feel real time Price/Volume action is a successful approach to day trading using 1 minute bars, Significant Price Levels, and other S/R Levels with High Volume/High Daily Range stocks.
All the indicators have been discussed above, with code listed, except for
@tomsk Swing High/Low indicator modified by
@Thomas located
HERE in post 88, which I now use as a way to identify potential reversal points more easily considering other factors. I will also post code below for the modification of this indicator that I use. The Image below is highly annotated so that my comments will make sense. My comments are numbered and refer to the numbers on the Image. The Significant Price Levels are annotated and PL1, PL2, etc.
1. This a 1 minute chart: Cyan Opening Bar high could not be exceeded to reach a Significant Price Level (PL1) above at the white line, thus marking it as Swing High per modified Swing High/Low indicator AND INDICATING MORE DOWNSIDE WAS EXPECTED . Once price exceeded and then tested PL2, price was expected to reach PL3, and a short was initiated on the retest of PL2. Short was exited at PL3. Price then immediately retested PL2, a short was initiated again, and again exited at PL3. These downside moves were supported by the fact the High Volume 5 Bar Magenta POC lines were populating below the PL2.
2. Price then exceeded the PL3 to the downside and tested Thursday's close (Orange Dots), then retested PL3 several times. A short was initiated at PL3 after a few chops and was held as price easily exceeded PL4.
3. The short was exited at PL5. A short was reinitiated when it became apparent that downside price exploration was not done. Price easily moved through PL6 on high volume.
4. Exited the short on the high volume bars just PL7. This looked like stopping volume and that a reaction higher could occur corroborated by the higher volume blowout.
5. Initiated a long on the reversal bar right above PL7 for an exit at PL6.
6. Price/Volume action immediately above PL6 foretold a likely retest of the next level down. Short initiated when the
@Thomas Swing High/Low Indicator Bar above PL6 was very probably not going to be exceeded by the third bar after the Cyan Swing High Bar. The short was exited at the PL7 retest. The last trade was made Long at the red arrows above PL6 where there was a very precise High Volume Node that was tested before price continued up to the VWAP and PL5. My trade day ended around 8:10 AM PST. With some loss in chop at No 2 area, ticks gained were around 135. OK for an hour and half.
One last comment. Notice the Red Arrows in the No 4 area pointing from Red and Green S/R Lines corresponding to Daily Bars 7 and 8 days previous to the present day. Institutional Traders take note of these levels to exit/enter trades as well as watching Significant Price Levels. This is also why it was not surprising to see the move down stopped in this area, at least temporarily, with several very high volume bars. That is why I use them. There are not as important, OR AS PRECISE AS SIGNIFICANT PRICE LEVELS FOR TARGETING YOUR ENTRY/EXITS, but they do add to the possibility that a level will "stop" a move.
Code for new added indicator below:
Code:
# Swing High and Swing Low
# tomsk
# 11.18.2019
# As requested by chillc15 I have modified @RobertPayne code to include SwingHigh
# points which are now plotted in CYAN with the swing high points painted in Magenta.
# So now you have both swing high and low on your charts
# +------------------------------------------------------------+
# | Example: How to extend levels to the right of the chart |
# | Robert Payne |
# | https://funwiththinkscript.com |
# +------------------------------------------------------------+
#Code modifiedTrueRange by @rlohmeyer
# SWING LOW
# define swing low points
def length = 10;
def bn = BarNumber();
def lastBar = HighestAll(if IsNaN(close) then 0 else bn);
def offset = Min(length - 1, lastBar - bn);
def swingLow = low < Lowest(low[1], length - 1) and low == GetValue(Lowest(low, length), -offset);
def swingHigh = high > Highest(high[1], length - 1) and high == GetValue(Highest(high, length), -offset);
#Identify the very last swing low point and 10 previous
def lowPointOneBarNumber = HighestAll(if swingLow then bn else 0);
def lowPointOneValue = if bn == lowPointOneBarNumber then low else lowPointOneValue[1];
def lowPointTwoBarNumber = HighestAll(if swingLow and bn < lowPointOneBarNumber then bn else 0);
def lowPointTwoValue = if bn == lowPointTwoBarNumber then low else lowPointTwoValue[1];
def lowPointThreeBarNumber = HighestAll(if swingLow and bn < lowPointTwoBarNumber then bn else 0);
def lowPointThreeValue = if bn == lowPointThreeBarNumber then low else lowPointThreeValue[1];
def lowPointFourBarNumber = HighestAll(if swingLow and bn < lowPointThreeBarNumber then bn else 0);
def lowPointFourValue = if bn == lowPointFourBarNumber then low else lowPointFourValue[1];
def lowPointFiveBarNumber = HighestAll(if swingLow and bn < lowPointFourBarNumber then bn else 0);
def lowPointFiveValue = if bn == lowPointFiveBarNumber then low else lowPointFiveValue[1];
def lowPointSixBarNumber = HighestAll(if swingLow and bn < lowPointFiveBarNumber then bn else 0);
def lowPointSixValue = if bn == lowPointSixBarNumber then low else lowPointSixValue[1];
def lowPointSevenBarNumber = HighestAll(if swingLow and bn < lowPointSixBarNumber then bn else 0);
def lowPointSevenValue = if bn == lowPointSevenBarNumber then low else lowPointSevenValue[1];
def lowPointEightBarNumber = HighestAll(if swingLow and bn < lowPointSevenBarNumber then bn else 0);
def lowPointEightValue = if bn == lowPointEightBarNumber then low else lowPointEightValue[1];
def lowPointNineBarNumber = HighestAll(if swingLow and bn < lowPointEightBarNumber then bn else 0);
def lowPointNineValue = if bn == lowPointNineBarNumber then low else lowPointNineValue[1];
def lowPointTenBarNumber = HighestAll(if swingLow and bn < lowPointNineBarNumber then bn else 0);
def lowPointTenValue = if bn == lowPointTenBarNumber then low else lowPointTenValue[1];
# Identify the very last swing high point and 10 others
def highPointOneBarNumber = HighestAll(if swingHigh then bn else 0);
def highPointOneValue = if bn == highPointOneBarNumber then high else highPointOneValue[1];
def highPointTwoBarNumber = HighestAll(if swingHigh and bn < highPointOneBarNumber then bn else 0);
def highPointTwoValue = if bn == highPointTwoBarNumber then high else highPointTwoValue[1];
def highPointThreeBarNumber = HighestAll(if swingHigh and bn < highPointTwoBarNumber then bn else 0);
def highPointThreeValue = if bn == highPointThreeBarNumber then high else highPointThreeValue[1];
def highPointFourBarNumber = HighestAll(if swingHigh and bn < highPointThreeBarNumber then bn else 0);
def highPointFourValue = if bn == highPointFourBarNumber then high else highPointFourValue[1];
def highPointFiveBarNumber = HighestAll(if swingHigh and bn < highPointFourBarNumber then bn else 0);
def highPointFiveValue = if bn == highPointFiveBarNumber then high else highPointFiveValue[1];
def highPointSixBarNumber = HighestAll(if swingHigh and bn < highPointFiveBarNumber then bn else 0);
def highPointSixValue = if bn == highPointSixBarNumber then high else highPointSixValue[1];
def highPointSevenBarNumber = HighestAll(if swingHigh and bn < highPointSixBarNumber then bn else 0);
def highPointSevenValue = if bn == highPointSevenBarNumber then high else highPointSevenValue[1];
#
def highPointEightBarNumber = HighestAll(if swingHigh and bn < highPointSevenBarNumber then bn else 0);
def highPointEightValue = if bn == highPointEightBarNumber then high else highPointEightValue[1];
def highPointNineBarNumber = HighestAll(if swingHigh and bn < highPointEightBarNumber then bn else 0);
def highPointNineValue = if bn == highPointNineBarNumber then high else highPointNineValue[1];
def highPointTenBarNumber = HighestAll(if swingHigh and bn < highPointNineBarNumber then bn else 0);
def highPointTenValue = if bn == highPointTenBarNumber then high else highPointTenValue[1];
# ADJUST CANDLE COLORS
AssignPriceColor(if swingLow then Color.cyan else if swingHigh then Color.cyan else Color.current);