Innovative Multi-Stochastic Trading Techniques for Success
Written on
Chapter 1: Understanding the Stochastic Oscillator
The stochastic oscillator is widely appreciated for its straightforward application, simplicity, and compatibility with intricate trading strategies. In this article, we will delve into the oscillator and introduce a relatively obscure strategy that employs multiple confirmation signals derived from various stochastic oscillators.
I have recently published a new book following the success of my previous work, "The Book of Trading Strategies." This new edition includes sophisticated trend-following indicators and strategies, accompanied by a dedicated GitHub page for ongoing updates to the code. The book also features a visually optimized design for printing costs. If this piques your interest, feel free to check out the Amazon link below, or contact me on LinkedIn if you prefer the PDF version.
The Stochastic Oscillator Explained
To grasp the stochastic oscillator, one must first understand normalization. This method confines values between 0 and 1 (or 0 and 100 if multiplied by 100). The process involves subtracting the minimum value over a specified lookback period from the current value, then dividing by the difference between the maximum and minimum values in that same period.
The stochastic oscillator identifies overbought and oversold conditions by integrating the highs and lows through the normalization formula. An overbought scenario indicates that the market is excessively bullish and likely to consolidate, while an oversold scenario suggests extreme bearishness, signaling a potential bounce. Thus, the stochastic oscillator acts as a contrarian indicator, aiming to highlight reactions during extreme market fluctuations.
Here's a function to calculate the stochastic oscillator based on OHLC data:
def stochastic(Data, lookback, high, low, close, where, genre='High-Low'):
# Adding a column
Data = adder(Data, 1)
if genre == 'High-Low':
for i in range(len(Data)):
try:
Data[i, where] = (Data[i, close] - min(Data[i - lookback + 1:i + 1, low])) / (max(Data[i - lookback + 1:i + 1, high]) - min(Data[i - lookback + 1:i + 1, low]))except ValueError:
pass
if genre == 'Normalization':
for i in range(len(Data)):
try:
Data[i, where] = (Data[i, close] - min(Data[i - lookback + 1:i + 1, close])) / (max(Data[i - lookback + 1:i + 1, close]) - min(Data[i - lookback + 1:i + 1, close]))except ValueError:
pass
Data[:, where] = Data[:, where] * 100
Data = jump(Data, lookback)
return Data
The following chart displays the EURUSD values alongside a 13-period stochastic oscillator.
To stay updated with more insights, consider subscribing to my DAILY Newsletter, which offers a free plan. This newsletter includes my Medium articles, additional trading strategies, coding lessons related to research and analysis, and subscribers receive a complimentary PDF copy of my first book. You can expect 5–7 articles per week with a paid subscription and 1–2 articles weekly with the free plan.
Chapter 2: Crafting the Multi-Stochastic Strategy
The strategy revolves around several stochastic oscillators, each with different lookback periods, to obtain confirmation from multiple angles. For instance, if a 5-period stochastic reads 90 while a 100-period stochastic also shows 90, we can be more confident in considering a bearish position compared to relying on a single oscillator.
We can select multiple stochastic oscillators in two ways:
- Subjective Selection: Choosing preferred lookback periods based on familiarity, such as the 5, 8, 14, and 20-period oscillators.
- Regular Sequence: Opting for a systematic approach, such as 10, 20, 30, etc. A personal favorite is to use Fibonacci numbers, which is merely a personal choice and should not be taken as a recommendation.
Regardless of the selection method, it's vital to back-test the periods and their combinations to identify the best fit. This optimization process takes time but is more scientific than arbitrary choices.
my_data = stochastic(my_data, 2, 1, 2, 3, 4)
my_data = stochastic(my_data, 3, 1, 2, 3, 5)
my_data = stochastic(my_data, 5, 1, 2, 3, 6)
my_data = stochastic(my_data, 8, 1, 2, 3, 7)
my_data = stochastic(my_data, 13, 1, 2, 3, 8)
my_data = stochastic(my_data, 21, 1, 2, 3, 9)
my_data = stochastic(my_data, 34, 1, 2, 3, 10)
my_data = stochastic(my_data, 55, 1, 2, 3, 11)
my_data = stochastic(my_data, 89, 1, 2, 3, 12)
my_data = stochastic(my_data, 144, 1, 2, 3, 13)
The following chart illustrates EURUSD hourly values alongside 10 stochastic oscillators with lookback periods of {2, 3, 5, 8, 13, 21, 34, 55, 89, 144}.
Trading Rules:
- A Buy signal is triggered when all 10 oscillators are below 10.
- A Sell signal occurs when all 10 oscillators are above 90.
def signal(Data, buy, sell):
Data = adder(Data, 10)
for i in range(len(Data)):
if Data[i, 4:14].sum() < 50 and Data[i - 1, 4:14].sum() > 50 and Data[i - 2, 4:14].sum() > 50:
Data[i, buy] = 1elif Data[i, 4:14].sum() > 950 and Data[i - 1, 4:14].sum() < 950 and Data[i - 2, 4:14].sum() < 950:
Data[i, sell] = -1
return Data
To further refine trading rules, consider adjusting the oversold and overbought thresholds.
def signal(Data, buy, sell):
Data = adder(Data, 10)
for i in range(len(Data)):
if Data[i, 4:14].sum() < 50 and Data[i - 1, 4:14].sum() > 50 and Data[i - 2, 4:14].sum() > 50:
Data[i, buy] = 1elif Data[i, 4:14].sum() > 950 and Data[i - 1, 4:14].sum() < 950 and Data[i - 2, 4:14].sum() < 950:
Data[i, sell] = -1
return Data
If you're keen on exploring additional technical indicators and strategies, my book may be of interest to you.
Conclusion
Always conduct back-tests. It's crucial to maintain a skeptical outlook on others' strategies. What works for me may not suit you. I advocate for self-learning through practical experience rather than imitation. Understand the concepts and conditions of the strategy, then develop your own, testing and refining it before implementation.
Medium offers a wealth of engaging content. I read extensively before I began writing. Consider joining Medium via my referral link!
In summary, are the strategies I present realistic? Yes, but only when the environment is optimized (robust algorithms, low costs, trustworthy brokers, and effective risk management). These strategies aren't solely for trading; they aim to inspire innovative trading ideas, moving beyond outdated classical methods.
One Last Word
I have recently launched an NFT collection aimed at supporting various humanitarian and medical causes. "The Society of Light" consists of limited collectibles, with a percentage of each sale going directly to charity. Here are some benefits of purchasing these NFTs:
- High Potential Returns: Focused marketing and promotion are intended to enhance their secondary market value.
- Art Collection and Portfolio Diversification: Owning avatars that symbolize altruism is rewarding. Investing can blend financial gain, helping others, and collecting art.
- Flexible Charity Donations: This offers a way to allocate funds to your preferred causes.
- Free PDF Copy of My Book: Each NFT buyer receives a complimentary copy of my latest book.
Click here to support the cause against discrimination through your purchase!
Chapter 3: Stochastic Trading Strategies in Action
The first video illustrates the Double Stochastic Forex Trading Strategy, demonstrating how to implement this approach effectively.
The second video covers the Triple Stochastic Trading Strategy, providing insights into enhancing trading performance using multiple oscillators.