1. Market Data
Understanding Market Data
Market data is crucial for quantitative analysis in finance, as it captures the trading events occurring in the market. Here’s a breakdown of the key concepts:
1. Market Data Overview
- Definition: Market data refers to the information generated from trades happening in the financial markets.
- Temporal Nature: Market data is time-based, meaning it represents a series of events that occur over time.
- Ticks: Each moment when a trade occurs is called a tick. A tick contains essential information about the trade, such as:
- Time of the event
- Ticker symbol (the stock or asset being traded)
- Trade data
- Quote data
2. Components of a Tick
- Trade Data:
- Price: The price at which the transaction occurred.
- Amount: The number of shares or units involved in the transaction.
- Quote Data:
- Bid: The price and quantity at which someone is willing to buy the stock.
- Ask: The price and quantity at which someone is willing to sell the stock.
3. Bid and Ask Explained
- Bid: A buyer’s offer to purchase a stock at a specific price.
- Ask: A seller’s offer to sell a stock at a specific price.
- Spread: The difference between the bid and ask prices.
4. High-Frequency Trading and Data Volume
- In large markets, trades can happen very frequently, sometimes reaching 200 trades per second.
- This results in a massive volume of data, especially when dealing with historical market data.
5. Data Aggregation
- Bucketing: To manage this vast amount of data, individual ticks are often grouped into time intervals or buckets (e.g., minutes, hours, or days).
- OHLC Data: For each bucket, we can calculate key metrics:
- Open Price: The first trade price in the interval.
- High Price: The highest trade price in the interval.
- Low Price: The lowest trade price in the interval.
- Close Price: The last trade price in the interval.
- Volume: The total number of shares traded in the interval.
This aggregation simplifies the data, making it easier to analyze while still capturing the essential market trends.
6. Timestamps
- While aggregated data often allows us to ignore specific timestamps, there are cases where precise timing is crucial. This will be explored further in advanced lessons.
2. Corporate Actions
Corporate Actions: Stock Splits and Dividends
Corporate actions are significant events that a company undertakes, which can have direct impacts on its shareholders. Let’s focus on two important types of corporate actions: Stock Splits and Dividends.
1. Stock Splits
A stock split occurs when a company decides to divide its existing shares into multiple shares, which results in more outstanding shares but at a lower price per share. This process does not change the overall market capitalization of the company.
Example: Amazon Stock Split
- Date: June 2nd, 1998
- Stock Price Before Split: ~$85 per share
- Split Ratio: 2-to-1
- Result: Every shareholder’s number of shares doubled.
- New Stock Price: ~$42.50 per share (approximately half of $85).
The key idea behind a stock split is that while the number of shares increases, the price per share decreases proportionally. This keeps the company’s market capitalization the same.
Market Capitalization Calculation:
Why Split a Stock?
- Increase Liquidity: Lower-priced stocks are more accessible to a broader range of investors, enhancing liquidity.
- Granularity: Investors can buy and sell in smaller quantities, potentially increasing the volume of transactions.
Amazon’s Subsequent Splits:
- January 5th, 1999: 3-to-1 split
- Price dropped to approximately one-third.
- September 2nd, 1999: 2-to-1 split
- Price dropped to approximately one-half.
Although the price drops due to splits, the perceived value might increase slightly due to renewed interest, leading to minor discrepancies in exact proportions.
Impact on Stock Price Data
When a stock splits, it causes a sharp drop in the stock price on the graph, which can give the misleading impression that the company’s value decreased. In reality, the value remains unchanged, but the price has adjusted to reflect the split.
Normalization of Stock Prices
To accurately reflect the true value of a stock over time, historical prices need to be adjusted for splits.
Normalization Methods:
- Forward Adjustment: Multiply prices after each split (e.g., double the price after a 2-to-1 split). However, this method makes the current price deviate from the actual trading price.
- Backward Adjustment (Common Method): Divide the prices before each split by the split ratio (e.g., divide by 2 for a 2-to-1 split). This ensures that the most recent price aligns with the current market price.
This adjusted price is commonly referred to as the adjusted price, and it’s essential for accurate historical analysis. However, it’s important to remember that adjusted prices distort the original trading prices.
Example Calculation: Adjusted Price
Let’s say Amazon had the following prices before its splits:
- Before 2-to-1 split: $85
- After adjusting: $85 / 2 = $42.50
If there were subsequent splits:
- Before 3-to-1 split: $42.50
- After adjusting: $42.50 / 3 = $14.17
Thus, the original $85 becomes $14.17 after all adjustments.
2. Dividends
A dividend is a distribution of a portion of a company’s earnings to its shareholders. This action represents a reward to investors, typically issued as cash payments or additional shares.
Key Points:
- Regular Income: Dividends provide shareholders with regular income, in addition to any capital gains from selling shares.
- Investor Confidence: Consistent dividends can signal financial health and stability, often attracting investors.
Dividends and stock splits are two common corporate actions that can significantly impact a company’s stock price and the perception of its value in the market. Understanding how to adjust and interpret these changes is critical for accurate financial analysis.
In the next lesson, we will dive deeper into dividends, their types, and how they influence both stock prices and investor behavior.
3. Dividends
Corporate Actions: Cash Dividends and Price Adjustment
Cash dividends are another significant corporate action where a company distributes a portion of its profits to shareholders. Understanding how dividends work and how they affect stock prices is crucial for accurate financial analysis.
1. Cash Dividends Overview
- Definition: A cash dividend is a payment made by a company to its shareholders, usually from profits.
- Frequency: Dividends are often paid quarterly, although the frequency can vary.
- Example: Qualcomm pays out dividends almost every quarter. On May 21st, 2017, Qualcomm paid $0.57 per share.
2. Ex-Dividend Date
- Definition: The ex-dividend date is the cutoff date to be eligible for the upcoming dividend. To receive the dividend, a shareholder must own the stock before this date.
- Example:
- AIG Dividend Announcement: On February 8th, 2018, AIG announced a future dividend payout.
- Ex-Dividend Date: March 14th, 2018.
- Dividend Payment Date: March 29th, 2018.
- Shareholders who held AIG stock before March 14th, 2018, were eligible for the dividend.
3. Why Adjust Stock Prices for Dividends?
When a company pays a dividend, the stock price typically drops by approximately the dividend amount on the ex-dividend date. This drop occurs because the value of the company decreases by the total amount paid out as dividends.
Example Scenario:
- Company A and Company B: Both have shares trading at $50.
- Ex-Dividend for Company A: $1 per share.
- Closing Prices on Ex-Dividend Date:
- Company A: $49.50 (reflecting the $1 dividend)
- Company B: $49.50 (no dividend, indicating a $0.50 loss)
At first glance, it might seem like both stocks have lost value. However, for Company A, the drop in price is offset by the dividend payout. Therefore, the actual financial outcome is:
- Company A: Net gain of $0.50.
- Company B: Net loss of $0.50.
4. Adjusting Prices for Dividends
To accurately reflect the stock’s value after dividends, we adjust the historical prices. This ensures that the price drop on the ex-dividend date doesn’t misleadingly appear as a loss.
Adjusted Price Factor Formula:
Where:
- D = Dividend per share
- S = Stock price at the ex-dividend date
Normalization Process:
- Step 1: Calculate the adjusted price factor using the formula above.
- Step 2: Normalize the historical prices by dividing them by the adjusted price factor for all days before the ex-dividend date.
Example Calculation:
- Dividend (D): $1
- Stock Price at Ex-Dividend Date (S): $50
- Adjusted Price Factor:
- Normalized Historical Price (for any day before ex-dividend):
By adjusting the prices, you ensure that the historical data reflects the actual financial performance, making it more accurate for analysis.
Moving Forward
With the knowledge of how to adjust stock prices for dividends, you’re now equipped to move on to more complex analyses, such as using technical indicators. These indicators are mathematical calculations based on historical price and volume data, and they play a crucial role in predicting future price movements.
Understanding both stock splits and dividends allows you to correctly interpret historical stock prices, providing a solid foundation for more advanced quantitative finance topics.
4. Technical Indicators
To make informed trading decisions using historical price data, you can compute and use various statistical measures known as indicators. Let’s break down the process step by step, and I’ll also show you how to implement these concepts using Python.
1. Understanding the Stock Price
- Raw Stock Price: The most basic indicator, but it alone doesn’t give much insight into whether to buy or sell.
- Problem: The current price of a stock (e.g., $115 for Facebook) might seem high or low, but without context, it’s hard to make an informed decision.
2. Moving Average (Simple Moving Average - SMA)
- Idea: Calculate the average stock price over a recent period (e.g., the past week or month).
- Simple Moving Average (SMA): A rolling average over a fixed window of time.
- For example, a 20-day SMA for a stock price series.
3. Bollinger Bands
- Concept: Create bands around the moving average to measure volatility.
- Calculation:
- Middle Band: The simple moving average (SMA) over a chosen period.
- Upper Band: SMA + 2 times the standard deviation.
- Lower Band: SMA - 2 times the standard deviation.
- Interpretation:
- Buy Signal: When the price crosses below the lower band and then back up.
- Sell Signal: When the price crosses above the upper band and then back down.
4. Trading Signals
- Inflection Points: Focus on where the price crosses the Bollinger Bands to generate buy or sell signals.
- Buy Signal: When the price is below the lower band and starts moving upwards toward the SMA.
- Sell Signal: When the price is above the upper band and starts moving downwards toward the SMA.
5. Implementation in Python
Let’s use Python to calculate the SMA, Bollinger Bands, and generate buy/sell signals.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# Sample Data: Assume you have a DataFrame `df` with a 'Close' column for Facebook stock prices.
# Step 1: Calculate the Simple Moving Average (SMA)
window = 20
df['SMA'] = df['Close'].rolling(window=window).mean()
# Step 2: Calculate the Standard Deviation
df['STD'] = df['Close'].rolling(window=window).std()
# Step 3: Calculate Bollinger Bands
df['Upper Band'] = df['SMA'] + (df['STD'] * 2)
df['Lower Band'] = df['SMA'] - (df['STD'] * 2)
# Step 4: Generate Buy and Sell Signals
df['Buy Signal'] = np.where((df['Close'] < df['Lower Band']) & (df['Close'].shift(1) > df['Lower Band'].shift(1)), 1, 0)
df['Sell Signal'] = np.where((df['Close'] > df['Upper Band']) & (df['Close'].shift(1) < df['Upper Band'].shift(1)), -1, 0)
# Step 5: Visualize the Results
plt.figure(figsize=(14,7))
plt.plot(df['Close'], label='Close Price', color='blue')
plt.plot(df['SMA'], label='20-Day SMA', color='orange')
plt.plot(df['Upper Band'], label='Upper Bollinger Band', color='green')
plt.plot(df['Lower Band'], label='Lower Bollinger Band', color='red')
# Plot buy and sell signals
plt.scatter(df.index, df['Close'], where=df['Buy Signal'] == 1, label='Buy Signal', marker='^', color='green', alpha=1)
plt.scatter(df.index, df['Close'], where=df['Sell Signal'] == -1, label='Sell Signal', marker='v', color='red', alpha=1)
plt.title('Bollinger Bands Trading Strategy')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend(loc='best')
plt.show()6. Backtesting and Further Exploration
- Backtesting: Simulate trades using historical data to see how much profit or loss your strategy would have made.
- Explore Other Indicators: Consider additional indicators like the Relative Strength Index (RSI), Moving Average Convergence Divergence (MACD), or Volume analysis to refine your strategy.
This approach gives you a structured way to analyze stock prices and make data-driven trading decisions. Each indicator can be tweaked and combined with others to develop more complex strategies.
5. Missing Values
Handling gaps and irregularities in stock price data is crucial for accurate analysis and trading decisions. Let’s break down the different types of gaps, why they matter, and how to deal with them effectively.
1. Types of Gaps in Stock Price Data
-
Weekend and Holiday Gaps:
- Markets are closed on weekends and certain holidays, leading to missing data points.
- This causes clumps of trading days with gaps corresponding to non-trading days.
- Example: The gap at the beginning of July due to the Fourth of July holiday.
-
Overnight Gaps:
- The time between the market closing for the day and reopening the next day can cause price discrepancies due to after-hours trading or global trading activities.
- Prices may change overnight due to external events, leading to a different opening price.
-
Corporate Actions:
- Listings and Mergers: Some stocks may not exist for the entire period under analysis. For instance, Google’s data would be missing before its IPO in 2004.
- Delisting: Stocks may be delisted due to privatization, bankruptcy, etc. This creates a discontinuity in data.
- Example: Dell going private in 2013.
2. Why These Gaps Matter
- External Influences: Events like geopolitical developments, company announcements, or natural disasters can affect stock prices during non-trading days.
- Accurate Returns Calculation: Calculating returns without considering gaps might misrepresent the true market conditions, especially when significant events occur during those gaps.
- Trading Strategies: Gaps can influence the effectiveness of certain strategies, especially those based on short-term movements.
3. Dealing with Gaps
A. Ignoring Gaps
- When to Use: If you treat stock prices as a sequence without regard to time (e.g., computing daily returns), you might choose to ignore gaps.
- Drawback: This approach may miss the impact of external events that occurred during the gap.
B. Normalizing Returns
- Method: Adjust returns by the actual number of days between two trading dates.
- Formula: where is the price at time and is the number of days between and .
- Use Case: Helps account for the varying time between trades but might reduce genuine large differences.
C. Handling Corporate Actions
- Backfilling for IPOs:
- You might backfill the price of a newly listed stock with its IPO price for the period before its IPO.
- Caution: This can be misleading, as it assumes constant value where none existed.
- Dealing with Delistings:
- You could carry forward the last known price or simulate a forced sale on the delisting date.
D. Adjusting for Overnight Gaps
- Method: Include pre-market and post-market trading data if available, or analyze opening price movements separately.
- Use Case: This can provide additional insights, especially for high-frequency trading strategies.
4. Implementation in Python
Let’s implement handling of gaps, especially focusing on how to normalize returns and account for holidays and weekends.
import pandas as pd
import numpy as np
# Sample DataFrame `df` with 'Close' and 'Date' columns
# Step 1: Convert 'Date' to datetime and sort the DataFrame
df['Date'] = pd.to_datetime(df['Date'])
df.sort_values(by='Date', inplace=True)
# Step 2: Calculate daily returns ignoring gaps
df['Daily Return'] = df['Close'].pct_change()
# Step 3: Calculate the number of days between two trading days
df['Days Between'] = df['Date'].diff().dt.days
# Step 4: Normalize returns based on the actual number of days between trades
df['Normalized Return'] = (df['Close'] / df['Close'].shift(1)) ** (1 / df['Days Between']) - 1
# Step 5: Identify gaps due to holidays or weekends
df['Gap'] = df['Days Between'] > 1
# Step 6: Handle overnight gaps (optional)
# You could create a separate analysis for the change from the previous day's close to the next day's open.
# Step 7: Handle corporate actions (e.g., backfill IPO or delist)
# Example: Google IPO date
google_ipo_date = pd.to_datetime('2004-08-19')
df.loc[df['Date'] < google_ipo_date, 'Google_Close'] = np.nan
# For delisting: Carry forward the last known price or simulate a sell
delist_date = pd.to_datetime('2013-10-29')
df.loc[df['Date'] > delist_date, 'Dell_Close'] = df.loc[df['Date'] == delist_date, 'Dell_Close'].values[0]
# Visualization (optional) to see the gaps and normalized returns
import matplotlib.pyplot as plt
plt.figure(figsize=(14,7))
plt.plot(df['Date'], df['Normalized Return'], label='Normalized Return', color='blue')
plt.scatter(df['Date'], df['Gap'], label='Gap Days', color='red')
plt.title('Normalized Returns with Gaps Identified')
plt.xlabel('Date')
plt.ylabel('Normalized Return')
plt.legend()
plt.show()5. Recap
- Types of Gaps: Weekends, holidays, overnight, corporate actions.
- Why They Matter: External events, accurate return calculation, strategy development.
- Handling Approaches: Ignore, normalize, or adjust based on the context and the trading strategy.
Understanding and handling these gaps will allow for more accurate analysis, better trading decisions, and more robust strategies.
6. Survivor Bias
Survivorship bias is a critical concept to understand, especially when analyzing historical data to evaluate the performance of trading strategies or investment decisions. Let’s break down the concept and its implications using the context of your experiments A and B.
1. Understanding Survivorship Bias
- Definition: Survivorship bias occurs when you focus only on the entities (e.g., companies or stocks) that have “survived” a certain period while ignoring those that did not. This can lead to overly optimistic conclusions because you’re only considering successful examples.
- Example in Experiment A: You are analyzing stock returns from 2005 to the present day. If you only look at companies that are still around today (survivors), you automatically exclude those that failed or were delisted during that period. This selection bias inflates the apparent success of the surviving stocks.
2. Experiments A and B: A Comparison
-
Experiment A (Survivorship Bias Present):
- You “travel forward in time” by selecting stocks from the present day that have survived since 2005.
- This experiment filters out all the companies that failed during this period, leaving only the winners.
- Outcome: The average return appears higher because you’ve only included stocks that have performed well enough to survive.
-
Experiment B (No Survivorship Bias):
- You make stock selections based on information available in 2005, without knowing which companies will survive.
- This includes both winners and losers, some of which might fail during the period.
- Outcome: The average return is lower because it reflects the reality that not all companies succeed; some go bankrupt or get delisted.
3. Why Experiment A Gives Higher Returns
- Optimistic Bias: Since Experiment A only considers companies that are successful today, it naturally overestimates the overall performance. It’s like cherry-picking only the success stories and ignoring the failures.
- Real-World Inapplicability: The results from Experiment A are misleading because, in real-world trading, you don’t have the luxury of knowing which companies will succeed in the future. Your analysis becomes overly optimistic and unlikely to replicate in actual trading scenarios.
4. Implications for Trading Strategy Testing
- Importance of Avoiding Survivorship Bias:
- When backtesting a trading strategy, if you allow survivorship bias to creep in, your strategy will likely appear much more successful than it actually would be in practice.
- The strategy might fail in real-world trading because it was tested on an unrealistic, overly favorable dataset.
- Best Practices:
- Use a comprehensive dataset that includes all stocks from the start of your analysis period, including those that were delisted or went bankrupt.
- Ensure your analysis reflects the conditions and information available at the time of trading decisions, without hindsight.
5. Mathematical Insight
- Suppose you have two datasets: one that includes all stocks from 2005 (including those that failed) and one that only includes stocks that are still trading today.
- Let’s denote the return of the surviving stocks as and the return of all stocks (including failures) as .
- The observed difference, where , arises because the average in is pulled down by the negative or zero returns of the failed stocks.
6. Conclusion
- Survivorship Bias: Creates a false impression of success in historical analysis, leading to potentially disastrous real-world applications.
- Real-World Analysis: Must account for all potential outcomes, including failures, to provide a realistic assessment of a trading strategy or investment decision.
To avoid falling into the trap of survivorship bias, always test your strategies on the full dataset available at the time of the decision, including the failures. This approach will provide a more honest and reliable measure of your strategy’s effectiveness.
7. Exchange Traded Funds
Trading algorithms aim to maximize returns while managing the inherent risks of the stock market. Here’s a structured breakdown of how to approach this:
1. Objective of a Trading Algorithm
- Primary Goal: Generate positive returns by identifying profitable trading opportunities.
- Challenge: The stock market is unpredictable, making consistent returns difficult.
2. Traditional Approach: Buy and Hold Strategy
- Strategy: Buy stocks showing consistent growth and hold them long-term.
- Pros: Low maintenance, potential for steady returns.
- Cons: Risk of picking stocks that underperform or fall in value. The success of this strategy heavily depends on choosing the right stocks ahead of time, which is difficult.
3. Risk Mitigation: Diversification
- Diversification Strategy: Invest in a broad portfolio of stocks rather than a few. This reduces the risk of a single stock or sector heavily impacting your overall returns.
- Sector Diversification:
- Sector-Specific Portfolio: For example, investing in multiple technology stocks.
- Pros: Gains if the tech sector grows.
- Cons: Vulnerable to sector-wide downturns.
- Multi-Sector Portfolio: Invest across various sectors like technology, healthcare, finance, etc.
- Pros: Reduced sensitivity to individual sectors’ performance.
- Cons: Moderate returns since gains in one sector may be offset by losses in another.
- Sector-Specific Portfolio: For example, investing in multiple technology stocks.
4. Portfolio Construction
- Complex Analysis: Perform statistical analysis to create a balanced portfolio that maximizes returns while minimizing risk.
- Practical Solution: For individual investors, constructing a well-diversified portfolio can be complex and time-consuming.
5. Managed Investment Options
- Mutual Funds:
- Definition: Pooled investment managed by professionals. Investors buy shares in the fund, and the fund manager decides on the stock composition.
- Types: Funds may focus on growth, income, or balanced strategies, with varying levels of risk.
- Exchange-Traded Funds (ETFs):
- Definition: ETFs are funds that trade on stock exchanges like individual stocks.
- Example: S&P 500 ETF (SPY), which includes 500 large-cap stocks from various sectors.
- Benefits:
- Diversification: Automatically diversified across many stocks.
- Cost Efficiency: Lower transaction fees compared to buying individual stocks.
- Accessibility: Easy to trade, just like a stock.
6. ETF Compositional Data: Enhancing Portfolio Analysis
- Compositional Data: Information about the exact proportions of stocks within an ETF.
- Importance:
- Correlation Analysis: Helps understand how much overlap exists between individual stocks and ETFs in your portfolio.
- Portfolio Balancing: More precise adjustments to reduce risk by avoiding overexposure to certain stocks or sectors.
7. Practical Application:
- Including ETFs in Portfolios: When adding ETFs like SPY to your portfolio, use ETF compositional data to analyze correlations with your other holdings.
- Balancing Act: Strive for a portfolio that is diverse enough to reduce risk but focused enough to capture potential gains.
8. Conclusion:
- Combining Strategies: A successful trading algorithm or investment strategy often combines diversification, ETF inclusion, and careful analysis of correlations.
- Using ETF Compositional Data: This data offers a more accurate measure of portfolio risk and can help you make informed decisions to achieve a well-balanced investment strategy.
By leveraging these tools and strategies, you can better navigate the complexities of the stock market and make more informed trading decisions.
8. Alternate Data
You’re stepping into the fascinating world of trading and market analysis, where information is the most valuable currency. So far, we’ve explored various traditional sources of market data—like stock prices, corporate actions, fundamental analysis, and ETF compositional data—that are crucial for making informed trading decisions. But in today’s fast-paced, information-rich environment, there’s so much more that can influence the market.
1. Beyond Traditional Market Data: The Expanding Universe of Information
- News Articles: News can have an immediate and significant impact on stock prices. For instance, a positive earnings report or a breakthrough in company research can lead to a spike in stock prices. Conversely, bad news, like scandals or poor earnings, can cause prices to plummet.
- Social Media Sentiment: Platforms like Twitter, Reddit, and even Facebook can be a treasure trove of sentiment data. Investors often express their opinions and sentiments on social media, which can be aggregated and analyzed to predict market movements.
- Satellite Images: Advanced technologies, like satellite imaging, provide unique data points. For example, satellite images can estimate crop yields, track retail foot traffic, or even monitor oil storage levels—all of which can impact market prices in relevant sectors.
- Consumer Data: Analyzing consumer behavior, like spending patterns or product reviews, can give you insights into a company’s future performance, well before official sales reports are released.
2. The Power of Alternative Data: Gaining an Edge
- Incorporating Alternative Data: While traditional market data gives you a solid foundation, integrating alternative data sources allows you to see the market from angles others might miss. For example, if you can analyze consumer spending data, you might predict a company’s strong quarterly earnings before it’s officially reported, giving you a trading advantage.
- Predictive Insights: Alternative data isn’t just about current information; it’s about predicting future trends. For instance, a surge in positive social media sentiment for a brand could signal an upcoming rise in stock prices as more investors jump on board.
3. The Learning Journey: Persistence and Growth
- The Einstein Approach: As Einstein suggested, success often comes down to perseverance. The ability to stick with challenges, learning from mistakes, and continuously improving is crucial—not just in trading, but in life.
4. The Bigger Picture: Seeing the World Differently
- Connecting the Dots: Once you start integrating all these diverse sources of information, you’ll begin to see the world differently. You’ll notice how seemingly unrelated events can impact markets, and you’ll develop a deeper understanding of the forces that drive financial markets.
- Enjoying the Ride: This learning process is a journey. The more you explore, the more you’ll appreciate the complexity and interconnectedness of the world. Each step you take brings you closer to mastering the art of market analysis and trading.
5. Final Thoughts: The Path Ahead
- Stay Curious and Persistent: Keep exploring new data sources, stay curious, and don’t shy away from challenges. Your success in trading, or any field, will come from your ability to adapt, learn, and apply new knowledge.
- Leverage Your Network: Remember, you’re not alone on this journey. Engage with your community, seek advice, share your insights, and continuously learn from those around you.
By combining traditional market analysis with alternative data and maintaining a mindset of persistence and curiosity, you’ll not only enhance your trading strategies but also develop a richer understanding of how the world works. Keep pushing forward, and enjoy the learning journey!