Stock Market Trading Notes
Read Before Every Trading Session
- Account growth is exponential, but do not risk all in a gamble. Take calculated risk and use only a portion of total portfolio.
- Do not trade with a lack of sleep. This reduces motor functions and emotions become out of order.
- Each trade should not exceed 10% to 15% of entire portfolio. If averaging down, the position should still not exceed 10% - 15% of the entire portfolio.
- For all options trades, set an arbitrary MAXIMUM stop loss between 15% - 20% of the position. If averaging down, the total should remain above the 15% - 20% SL.
- Always journal trades to learn from mistakes and refine on technique.
- Before entering into a trade always have a stop loss in mind. Set it at a certain price or a certain percentage.
- Drop the ego. Being wrong and losing is part of the process.
- Optimise for execution speed. Do not use a lackluster brokerage that does not allow the use of hotkeys.
- If you are not profitable trading paper money you will not be profitable using real money.
Law Of Three, Four and Six (Personal Trading Template)
Hypothetical $40,000 account position.
Maximum position: $4,000 - $5,000 (10-15%)
Three Contracts: $867 USD to $1,084 USD each ($8.67 - $10.84 per contract)
Ideally purchase AT THE MONEY or IN THE MONEY contracts.
Take majority profit at 10% and leave a runner contract to capture any additional gains. This should yield a $400 - $500 return per trade.
$400 per day == $2,000 per week == $8,000 per month == $96,000 per year (exponential growth)
Daily Checklist
Momentum provides direction.
Volume provides entries.
Fibonacci provides confluence.
Risk Management
No trade is perfect and no analysis is bulletproof. We need therefore to manage our risk effectively to preserve capital, especially when trading leveraged products such as CFDs, futures and options.
There is a fine line between a trader and a gambler - traders are risk managers who can take appropriate actions to improve their chances to control chaos; gamblers choose to take risk without insight, researcher and use only luck.
- Define an appropriate max percentage drawdown of the account prior to entering a trade - this should be based on risk tolerance. This is not the same as how much of a product to purchase, but rather how much to lose before exit. 5% is a reasonable amount if the trader has a large risk appetite. 5% of $20,000 is a $1,000 loss on a position before stop loss. Remember all the failed SPY and QQQ trades?
- If the trade is in drawdown, we can average down ONLY AT MAJOR CONFLUENCE LEVELS and take partial profits when the new contracts are profitable (add risk and then reduce risk).
- If a trade is in profit, we can set three profit targets, such as nearest VAL/VAH/POC, major confluence levels and support/resistance zones. Not taking profit risks a trade failing and entering drawdown. Rememeber AAPL and NVAX?
- If a trade does not feel right as soon as you enter, do not hesistate to get out. When in doubt, get the F out.
- Do not be overly influenced by others, but stay open minded to other opinions and make individual decisions.
- Use both fundamental and technical analysis when determining the viability of a trade. Avoid trading near the release of data, or when major events occur (FOMC speech etc.)
- Be selective in finding trades - even aggressive traders wait for all elements to line up to enhance the probability of each trade.
- TRADE FOR SUCCESS NOT ENTERTAINMENT.
- No impulsive trades - sometimes NO POSITION is the best position.
Options Risk Management Use Options Trade Optimiser
As we are short term / swing traders, we take different risk management parameters than long term traders.
- Standard trade: BUY ATM CALL or BUY ATM PUT at least 3 WEEKS out
- IF +DIRECTIONAL
- ATM options have DELTA@0.5 and benefits directionally
- 3 weeks is a conservative measure to prevent against THETA decay, since weekly/bi-weekly options are much more sped up
- Exit when profitable
- Average down is possible, but take profit when new contracts are profitable
- Delta mitigation: BUY ATM CALL/PUT –> Drawdown –> SELL OTM CALL/PUT
- IF SHORT -DIRECTIONAL BUT LONG +DIRECTIONAL
- This will transform a position into a vertical spread
- This will PARTIALLY mitigate delta and IV crush
- Delta mitigation (profit-taking): BUY ATM CALL/PUT –> Profit –> SELL OTM CALL/PUT
- IF +DIRECTIONAL AND TAKE PROFIT
- A form of profit taking on delta
- Will mitigate future directional gains thus a form of take profit
- IV hedging: BUY ATM CALL + BUY ATM VIX CALL
- IV trade: BUY ATM VIX CALL
- High IV environment: SELL ATM CALL/PUT (margin requirement)
Chart Analysis
- Openings (Like chess every brilliant trade requires an opening setup)
- Previous Daily OHLC
- Previous Weekly OHLC
- Previous Monthly OHLC
- Volume Analysis (Identifying where markets are considered under/over and fair value)
- Mark the Previous Day Levels (pdHigh, pdVAH, pdPOC, pdEQ, pdVAL, pdLow)
- Mark the Previous Week Levels (pwHigh, pwVAH, pwPOC, pwEQ, pwVAL, pwLow)
- Mark the Previous Month Levels (pmHigh, pmVAH, pmPOC, pmEQ, pmVAL, pmLow)
- Mark the naked volume Monthly levels (dnPOC, dwPOC, dmPOC, sPOC)
- Only consider longs at or below VAL, only consider shorts at or below VAH, only take profit at POC but don’t take positions (remember the -$5000 position on QQQ)
- Previously broken VAL/VAH/POC can be used as support/resistance flips
- POC is where most traders entered positions - if they are incorrect and the price revisits the untested POC, it is likely they will mitigate losses at breakeven therefore creating a support/resistance area
- Context Awareness
- Check the speed and momentum of the price action (this may indicate breaking of the range or continuation)
- Patterns
- Flags
- Trianges + Wedges
- Head and Shoulders + Inverse Head and Shoulders Reversal
- Fibonacci Harmonics
- Three Drives Reversal
- Wyckoff Accumulation and Distribution
- High Timeframe (HTF) Support and Resistance Levels (Daily, Monthly, Yearly etc)
- Major Fibonacci Levels (Fib Levels, Fib Fans, Fib Channels)
- Unfinished Business (Gap Entrances, Gap Fills, Equal Highs and Lows - eqHigh and eqLow)
- Determine VWAP locations (sVWAP, aVWAP, wVWAP)
- On-Balance Volume
- Order Blocks and Clusters (0.25)
- Determine the current Market Structure (Uptrend, Downtrend, Consolidation)
- Elliot Wave Count
- High Volume Nodes
- CVD Divergences
- SMA and EMAs
- Open Interest
- Daily Volume and Delta
- Funding
- Set up all possible trade setups (Bullish or Bearish)
Confluence
- Determine multiple confluences
- Use multiple technical analysis tools to determine if they intersect around an area
- Increase the probability of trading using multiple confluences and simple invalidation
Swing Failure Pattern
- Wait for highs/lows of range to be taken and determine if there is a reversal into the range.
- Wait for a retrace (using Fibonacci), to determine entry and take profit near the POC or bottom of range.
Fibonacci Levels
- Use these levels for confluence, but also determining take profit levels with negative Fibonacci levels.
- Do not use these as potential SLs.
Consolidation Trading
- Consolidation above support is bullish, Consolidation below resistance is bearish.
- Observe BuF and BeF (Bull Flag and Bear Flags)
- Sideways Consolidation (Neutral)
- Sloping Channels (Can be unsustainable and broken)
Compounding Trading
- If position moves favourably, can look to add contracts at strong confluence levels.
- If position moves unfavourably, can look to add contracts at strong confluence levels and close AT BREAKEVEN to recover trade. Use only in exceptional cases.
- Laddering - entering into positions and exiting positions as a ladder and not all at once (ET1, ET2, ET3, TP1, TP2, TP3)
Trading Script
//@version=5
indicator("Katsu TA - Combined", overlay=true)
high_month = request.security(syminfo.tickerid, "M", high[1], lookahead=barmerge.lookahead_on)
low_month = request.security(syminfo.tickerid, "M", low[1], lookahead=barmerge.lookahead_on)
open_month = request.security(syminfo.tickerid, "M", open[1], lookahead=barmerge.lookahead_on)
close_month = request.security(syminfo.tickerid, "M", close[1], lookahead=barmerge.lookahead_on)
high_week = request.security(syminfo.tickerid, "W", high[1], lookahead=barmerge.lookahead_on)
low_week = request.security(syminfo.tickerid, "W", low[1], lookahead=barmerge.lookahead_on)
open_week = request.security(syminfo.tickerid, "W", open[1], lookahead=barmerge.lookahead_on)
close_week = request.security(syminfo.tickerid, "W", close[1], lookahead=barmerge.lookahead_on)
high_day = request.security(syminfo.tickerid, "D", high[1], lookahead=barmerge.lookahead_on)
low_day = request.security(syminfo.tickerid, "D", low[1], lookahead=barmerge.lookahead_on)
open_day = request.security(syminfo.tickerid, "D", open[1], lookahead=barmerge.lookahead_on)
close_day = request.security(syminfo.tickerid, "D", close[1], lookahead=barmerge.lookahead_on)
targetDate = time >= timestamp(year(timenow), month(timenow), 1, 0, 0, 0)
beginMonth = not targetDate[1] and targetDate
prevWeekStart = time >= timestamp(year(timenow), month(timenow), dayofmonth(timenow) - dayofweek + 1, 0, 0)
newDay = dayofweek != dayofweek[1]
var line l_high_month = na
var line l_low_month = na
var line l_open_month = na
var line l_close_month = na
var line l_high_week = na
var line l_low_week = na
var line l_open_week = na
var line l_close_week = na
var line l_high_day = na
var line l_low_day = na
var line l_open_day = na
var line l_close_day = na
var label lbl_high_month = na
var label lbl_low_month = na
var label lbl_open_month = na
var label lbl_close_month = na
var label lbl_high_week = na
var label lbl_low_week = na
var label lbl_open_week = na
var label lbl_close_week = na
var label lbl_high_day = na
var label lbl_low_day = na
var label lbl_open_day = na
var label lbl_close_day = na
if (beginMonth)
l_high_month := line.new(bar_index, high_month, bar_index+1, high_month, extend=extend.both, color=color.white, style=line.style_dotted)
lbl_high_month := label.new(bar_index, high_month, text="pmHighs", color=color.white, textcolor=color.white, style=label.style_none, size=size.small)
line.delete(l_high_month[1])
label.delete(lbl_high_month[1])
l_low_month := line.new(bar_index, low_month, bar_index+1, low_month, extend=extend.both, color=color.white, style=line.style_dotted)
lbl_low_month := label.new(bar_index, low_month, text="pmLows", color=color.white, textcolor=color.white, style=label.style_none, size=size.small)
line.delete(l_low_month[1])
label.delete(lbl_low_month[1])
l_open_month := line.new(bar_index, open_month, bar_index+1, open_month, extend=extend.both, color=color.white, style=line.style_dotted)
lbl_open_month := label.new(bar_index, open_month, text="pmOpen", color=color.white, textcolor=color.white, style=label.style_none, size=size.small)
line.delete(l_open_month[1])
label.delete(lbl_open_month[1])
l_close_month := line.new(bar_index, close_month, bar_index+1, close_month, extend=extend.both, color=color.white, style=line.style_dotted)
lbl_close_month := label.new(bar_index, close_month, text="pmClose", color=color.white, textcolor=color.white, style=label.style_none, size=size.small)
line.delete(l_close_month[1])
label.delete(lbl_close_month[1])
if (prevWeekStart)
l_high_week := line.new(bar_index, high_week, bar_index+1, high_week, extend=extend.both, color=color.white, style=line.style_dotted)
lbl_high_week := label.new(bar_index, high_week, text="pwHighs", color=color.white, textcolor=color.white, style=label.style_none, size=size.small)
l_low_week := line.new(bar_index, low_week, bar_index+1, low_week, extend=extend.both, color=color.white, style=line.style_dotted)
lbl_low_week := label.new(bar_index, low_week, text="pwLows", color=color.white, textcolor=color.white, style=label.style_none, size=size.small)
l_open_week := line.new(bar_index, open_week, bar_index+1, open_week, extend=extend.both, color=color.white, style=line.style_dotted)
lbl_open_week := label.new(bar_index, open_week, text="pwOpen", color=color.white, textcolor=color.white, style=label.style_none, size=size.small)
l_close_week := line.new(bar_index, close_week, bar_index+1, close_week, extend=extend.both, color=color.white, style=line.style_dotted)
lbl_close_week := label.new(bar_index, close_week, text="pwClose", color=color.white, textcolor=color.white, style=label.style_none, size=size.small)
line.delete(l_high_week[1])
label.delete(lbl_high_week[1])
line.delete(l_low_week[1])
label.delete(lbl_low_week[1])
line.delete(l_open_week[1])
label.delete(lbl_open_week[1])
line.delete(l_close_week[1])
label.delete(lbl_close_week[1])
if (newDay)
l_high_day := line.new(bar_index, high_day, bar_index+1, high_day, extend=extend.both, color=color.white, style=line.style_dotted)
lbl_high_day := label.new(bar_index, high_day, text="pdHigh", color=color.white, textcolor=color.white, style=label.style_none, size=size.small)
l_low_day := line.new(bar_index, low_day, bar_index+1, low_day, extend=extend.both, color=color.white, style=line.style_dotted)
lbl_low_day := label.new(bar_index, low_day, text="pdLow", color=color.white, textcolor=color.white, style=label.style_none, size=size.small)
l_open_day := line.new(bar_index, open_day, bar_index+1, open_day, extend=extend.both, color=color.white, style=line.style_dotted)
lbl_open_day := label.new(bar_index, open_day, text="pdOpen", color=color.white, textcolor=color.white, style=label.style_none, size=size.small)
l_close_day := line.new(bar_index, close_day, bar_index+1, close_day, extend=extend.both, color=color.white, style=line.style_dotted)
lbl_close_day := label.new(bar_index, close_day, text="pdClose", color=color.white, textcolor=color.white, style=label.style_none, size=size.small)
line.delete(l_high_day[1])
label.delete(lbl_high_day[1])
line.delete(l_low_day[1])
label.delete(lbl_low_day[1])
line.delete(l_open_day[1])
label.delete(lbl_open_day[1])
line.delete(l_close_day[1])
label.delete(lbl_close_day[1])
plotshape(beginMonth, "T", shape.triangleup, location.belowbar, size=size.small)
Article Information
- Author: Tony Wu
- URL: https://qwutony.github.io/wiki/100-Trading-Notes/
- License: Free to share - NonCommercial - NoDerivatives - Attribution required (Creative Commons BY-NC-ND 4.0 License)