Creating a fully functional Demo Account - in all Countries/Regions! 
 
How to create an Account ***Update May 2023*** 
 
FOREX / Currency Exchange Rates explained 
 
Our second Trade - EUR/USD FOREX Trading 
 
How to calculate Profit & Loss of a Trade 
 
Trading Costs and Performance Attribution 
 
Our third Trade A-Z - Going Short EUR/USD 
 
Market Limit and Stop Orders 
 
Take-Profit and Stop-Loss Orders 
 
How to create a (Paper Trading) Account 
 
How to Install the IB Trader Workstation (TWS) 
 
The first Trade (buying Stocks) 
 
Cash Account vs. Margin Account 
 
Trading Costs (Stocks) - Commissions 
 
Trading Costs (Stocks) - other (hidden) Costs 
 
FOREX Trading: Cash vs. CFD 
 
A complete CFD FOREX Trade 
 
Test your debugging skills! 
 
Major reasons for Coding Errors 
 
The most commonly made Errors at a glance 
 
Omitting cells changing the sequence and more 
 
Misuse of function names and keywords 
 
TypeErrors and ValueErrors 
 
Getting help on StackOverflow.com 
 
How to traceback more complex Errors 
 
Problems with the Python Installation 
 
External Factors and Issues 
 
Errors related to the course content (Transcription Errors) 
 
Summary and Debugging Flow-Chart 
 
How to maximize your learning experience 
 
OANDA: Commands to install required packages ***UPD August 23*** 
 
OANDA: Getting the API Key & other Preparations 
 
OANDA: Connecting to the API/Server 
 
***Important Notice Update August 2023*** 
 
OANDA: How to load Historical Price Data (Part 1) 
 
OANDA: How to load Historical Price Data (Part 2) 
 
OANDA: Streaming high-frequency real-time Data 
 
OANDA: How to place Orders and execute Trades 
 
IBKR API: Downloads and required Commands to install the Wrapper 
 
IBKR: How to download and install the API Wrapper & other Preparations 
 
IBKR: Connecting to the API 
 
IBKR: How to get Market Data 
 
IBKR: Data Streaming for Multiple Tickers 
 
IBKR: Contracts (advanced) 
 
IBKR: FOREX and CFD Contracts 
 
IBKR: Creating Orders (Stock Trading) 
 
IBKR: Creating Orders (CFD Trading) 
 
IBKR: CFD Trade Information 
 
IBKR: Positions and Account Values 
 
***FXCM Important Info April 2023*** 
 
FXCM: Commands to install required packages 
 
FXCM: How to install the FXCM API Wrapper 
 
FXCM: Getting the Access Token & other Preparations 
 
FXCM: Connecting to the API/Server 
 
Troubleshooting: FXCM Server Connection Issues 
 
FXCM: How to load Historical Price Data (Part 1) 
 
FXCM: How to load Historical Price Data (Part 2) 
 
FXCM: Streaming high-frequency real-time Data 
 
FXCM: How to place Orders and execute Trades 
 
Introduction and Overview 
 
Installing and importing required Libraries/Packages 
 
Loading Financial Data from the Web 
 
Initial Inspection and Visualization 
 
[Article] Loading Data into Pandas - advanced topics 
 
Normalizing Time Series to a Base Value (100) 
 
Price changes and Financial Returns 
 
Reward and Risk of Financial Instruments 
 
Investment Multiple and CAGR 
 
Compound Returns & Geometric Mean Return 
 
Simple Returns vs Log Returns ( Part 1) 
 
Simple Returns vs Log Returns ( Part 2) 
 
Comparing the Performance of Financial Instruments 
 
(Non-) Normality of Financial Returns 
 
Annualizing Return and Risk 
 
Resampling / Smoothing of Financial Data 
 
Short Selling and Short Position Returns (Part 1) 
 
Short Selling and Short Position Returns (Part 2) 
 
Short Selling and Short Position Returns (Part 3) 
 
Covariance and Correlation 
 
Portfolios and Portfolio Returns 
 
Margin Trading and Levered Returns (Part 1) 
 
Margin Trading and Levered Returns (Part 2) 
 
Introduction to OOP and examples for Classes 
 
The Financial Analysis Class live in action (Part 1) 
 
The Financial Analysis Class live in action (Part 2) 
 
The special method __init__() 
 
String representation and the special method __repr__() 
 
The methods plot_prices() and plot_returns() 
 
Encapsulation and protected Attributes 
 
Adding more methods and performance metrics 
 
Inheritance and the super() Function 
 
Adding meaningful Docstrings 
 
Creating and Importing Python Modules (.py) 
 
Coding Exercise 3: Create your own Class 
 
SMA Crossover Strategies - Overview 
 
Defining an SMA Crossover Strategy 
 
Vectorized Strategy Backtesting 
 
Finding the optimal SMA Strategy 
 
Generalization with OOP: An SMA Backtesting Class in action 
 
Creating the Class (Part 1) 
 
Creating the Class (Part 2) 
 
Creating the Class (Part 3) 
 
Creating the Class (Part 4) 
 
Creating the Class (Part 5) 
 
Creating the Class (Part 6) 
 
Creating the Class (Part 7) 
 
Creating the Class (Part 8) 
 
Simple Contrarian/Momentum Strategies - Overview 
 
Excursus: Your FAQs answered 
 
Defining a simple Contrarian Strategy 
 
Vectorized Strategy Backtesting 
 
Changing the Window Parameter 
 
Trades and Trading Costs (Part 1) 
 
Trades and Trading Costs (Part 2) 
 
Generalization with OOP: A Contrarian Backtesting Class in action 
 
OOP Challenge: Create the Contrarian Backtesting Class (incl. Solution) 
 
Machine Learning - an Overview 
 
Linear Regression with scikit-learn - a simple Introduction 
 
Making Predictions with Linear Regression 
 
A simple Linear Model to predict Financial Returns (Part 1) 
 
A simple Linear Model to predict Financial Returns (Part 2) 
 
A Multiple Regression Model to predict Financial Returns 
 
In-Sample Backtesting and the Look-ahead-bias 
 
Out-Sample Forward Testing 
 
Logistic Regression with scikit-learn - a simple Introduction (Part 1) 
 
Logistic Regression with scikit-learn - a simple Introduction (Part 2) 
 
Getting and Preparing the Data 
 
Predicting Market Direction with Logistic Regression 
 
In-Sample Backtesting and the Look-ahead-bias 
 
Out-Sample Forward Testing 
 
Generalization with OOP: A Classification Backtesting Class in action 
 
The Classification Backtesting Class explained (Part 1) 
 
The Classification Backtesting Class explained (Part 2) 
 
Introduction to Iterative Backtesting ("event-driven") 
 
A first Intuition on Iterative Backtesting (Part 1) 
 
A first Intuition on Iterative Backtesting (Part 2) 
 
Creating an Iterative Base Class (Part 1) 
 
Creating an Iterative Base Class (Part 2) 
 
Creating an Iterative Base Class (Part 3) 
 
Creating an Iterative Base Class (Part 4) 
 
Creating an Iterative Base Class (Part 5) 
 
Creating an Iterative Base Class (Part 6) 
 
Creating an Iterative Base Class (Part 7) 
 
Creating an Iterative Base Class (Part 8) 
 
Adding the Iterative Backtest Child Class for SMA (Part 1) 
 
Adding the Iterative Backtest Child Class for SMA (Part 2) 
 
Using Modules and adding Docstrings 
 
OOP Challenge: Add Contrarian and Bollinger Strategies 
 
Updating the Wrapper Package (Part 1) 
 
Updating the Wrapper Package (Part 2) 
 
**Weekend and Bank Holiday Alert** 
 
Historical Data real-time Data and Orders (Recap) 
 
Preview: A Trader Class live in action 
 
How to collect and store real-time tick data 
 
Storing and resampling real-time tick data (Part 1) 
 
Storing and resampling real-time tick data (Part 2) 
 
Storing and resampling real-time tick data (Part 3) 
 
Storing and resampling real-time tick data (Part 4) 
 
Storing and resampling real-time tick data (Part 5) 
 
Working with historical data and real-time tick data (Part 1) 
 
Working with historical data and real-time tick data (Part 2) 
 
Working with historical data and real-time tick data (Part 3) 
 
Defining a simple Contrarian Strategy 
 
Placing Orders and Executing Trades 
 
Trade Monitoring and Reporting 
 
Trading other Strategies - Coding Challenge 
 
Implementing an SMA Crossover Strategy (Solution) 
 
Implementing a Bollinger Bands Strategy (Solution) 
 
Machine Learning Strategies (1) - Model Fitting 
 
Machine Learning Strategies (2) - Implementation 
 
Importing a Trader Module / Class 
 
Excursus: Printing all ticks in a Command Prompt/Terminal 
 
Running a Python Trader Script 
 
Outlook: What is (still) missing? 
 
Streaming Tick Data for multiple Symbols 
 
How to create a live Candle Stick Chart 
 
Preparing the Data for Day Trading 
 
Improving Code Efficiency 
 
Define an SMA Day Trading Strategy 
 
Creating Orders and Executing Trades 
 
Trade Monitoring and Reporting 
 
How to Stop a Trading Session 
 
Trading other Strategies - Coding Challenge 
 
Running a Python Trader Script 
 
Outlook: What is (still) missing? 
 
**Weekend and Bank Holiday Alert** 
 
Historical Data real-time Data and Orders (Recap) 
 
Troubleshooting: FXCM Server Connection Issues 
 
Preview: A Trader Class live in action 
 
Collecting and storing real-time tick data 
 
Storing and resampling real-time tick data (Part 1) 
 
Storing and resampling real-time tick data (Part 2) 
 
Storing and resampling real-time tick data (Part 3) 
 
Working with historical data and real-time tick data (Part 1) 
 
Working with historical data and real-time tick data (Part 2) 
 
Working with historical data and real-time tick data (Part 3) 
 
Defining a Simple Contrarian Trading Strategy 
 
Placing Orders and Executing Trades 
 
Trade Monitoring and Reporting 
 
Trading other Strategies - Coding Challenge 
 
SMA Crossover and Bollinger Bands (Solution) 
 
Machine Learning Strategies (1) - Model Fitting 
 
Machine Learning Strategies (2) - Implementation 
 
Excursus: Printing all ticks in a Command Prompt/Terminal 
 
Introduction and Motivation 
 
Demonstration: AWS EC2 for Algorithmic Trading live in action 
 
Amazon Web Services (AWS) - Overview and how to create a Free Trial Account 
 
How to create an EC2 Instance 
 
How to connect to your EC2 Instance 
 
Getting the Instance Ready for Algorithmic Trading 
 
**Weekend and Bank Holiday Alert** 
 
How to run Python Scripts in a Windows Command Prompt 
 
How to start Trading sessions with Batch (.bat) Files 
 
How to schedule Trading sessions with the Task Scheduler 
 
How to stop Trading Sessions (OANDA) 
 
How to stop Trading Sessions (FXCM) 
 
Installation of Tensorflow & Keras (Part 1) 
 
Installation of Tensorflow & Keras (Part 2) 
 
Getting and Preparing the Data 
 
Splitting into Train and Test Set 
 
Feature Scaling/Engineering 
 
Creating and Fitting the DNN Model 
 
Prediction & Out-Sample Forward Testing 
 
Saving Model and Parameters 
 
Implementation (Oanda & FXCM) 
 
Python Errors (Exceptions) 
 
Try again (...until it works) 
 
How to limit the number of retries 
 
Waiting periods between re-tries 
 
Implementation with Oanda: V20 Connection Issues 
 
Oanda Error Handling (Part 1) 
 
Oanda Error Handling (Part 2) 
 
Oanda Error Handling (Part 3) 
 
Implementation with IBKR: Errors and Connectivity Issues 
 
Implementation with FXCM: API/Server Issues 
 
FXCM Error Handling (Part 1) 
 
FXCM Error Handling (Part 2) 
 
Stop Loss Orders - Theory 
 
Trailing Stop Loss Orders - Theory 
 
Take Profit Orders - Theory 
 
SL & TP - Use Cases and Conclusion 
 
Oanda: Contrader Class without Take Profit & Stop Loss (Recap) 
 
Oanda: How to create Stop Loss and Take Profit Orders 
 
Oanda: Stop Loss and Take Profit Orders - Pitfalls 
 
Oanda: Setting SL Distances and TP Prices in real-time 
 
Oanda: Check for SL/TP Events 
 
Oanda: Adding Stop Loss & Take Profit 
 
Oanda Trading Bot: Final Python Script 
 
IBKR: Contrader Class without Take Profit & Stop Loss (Recap) 
 
IBKR: How to create Stop Loss and Take Profit Orders 
 
IBKR: Stop Loss and Take Profit Orders - Pitfalls 
 
IBKR: Adding Stop Loss & Take Profit 
 
IBKR Trading Bot: Final Python Script 
 
Section Downloads ***Reviewed May 2023*** 
 
Intro to the Time Value of Money (TVM) Concept (Theory) 
 
Calculate Future Values (FV) with Python / Compounding 
 
***NEW*** Udemy Online Coding Exercises - Intro 
 
Calculate Present Values (PV) with Python / Discounting 
 
Interest Rates and Returns (Theory) 
 
Calculate Interest Rates and Returns with Python 
 
Introduction to Variables 
 
Excursus: How to add inline comments 
 
Variables and Memory (Theory) 
 
More on Variables and Memory 
 
Variables - Dos Don´ts and Conventions 
 
TVM Problems with many Cashflows 
 
Zero-based Indexing and negative Indexing in Python (Theory) 
 
For Loops - Iterating over Lists 
 
The range Object - another Iterable 
 
Iterating over range objects 
 
Calculate FV and PV for many Cashflows 
 
The Net Present Value - NPV (Theory) 
 
Calculate an Investment Project´s NPV 
 
The Data Type Hierarchy (Theory) 
 
Excursus: Dynamic Typing in Python 
 
How to round Floats (and Integers) with round() 
 
Lists and Element-wise Operations 
 
Changing Elements in Lists 
 
Sorting and Reversing Lists 
 
Adding and removing Elements from/to Lists 
 
Adding and Removing Elements 
 
Mutable vs. immutable Objects (Part 1) 
 
Mutable vs. immutable Objects (Part 2) 
 
Comparison Logical and Membership Operators in Action 
 
Keywords pass continue and break 
 
Calculate a Project´s Payback Period 
 
Introduction to while loops 
 
Downloads for this Section ***Updated May 2023*** 
 
Modules Packages and Libraries - No need to reinvent the Wheel 
 
Indexing and Slicing Numpy Arrays 
 
Vectorized Operations with Numpy Arrays 
 
PV with vectorized Numpy Code 
 
Changing Elements in Numpy Arrays & Mutability 
 
View vs. copy - potential Pitfalls when slicing Numpy Arrays 
 
Changing elements in Arrays (and Copies) 
 
Numpy Array Methods and Attributes 
 
Numpy Universal Functions 
 
Boolean Arrays and Conditional Filtering 
 
Advanced Filtering & Bitwise Operators 
 
Determining a Project´s Payback Period with np.where() 
 
Creating Numpy Arrays from Scratch 
 
Numpy Arrays from Scratch 
 
How to work with nested Lists 
 
2-dimensional Numpy Arrays 
 
How to slice 2-dim Numpy Arrays (Part 1) 
 
How to slice 2-dim Numpy Arrays (Part 2) 
 
Recap: Changing Elements in a Numpy Array / slice 
 
How to perform row-wise and column-wise Operations 
 
Intro to Tabular Data / Pandas 
 
Create your very first Pandas DataFrame (from csv) 
 
Loading a CSV-file into Pandas 
 
Pandas Display Options and the methods head() & tail() 
 
Selecting one Column with the "dot notation" 
 
Zero-based Indexing and Negative Indexing 
 
Selecting Rows with iloc (position-based indexing) 
 
Slicing Rows and Columns with iloc (position-based indexing) 
 
Position-based Indexing Cheat Sheets 
 
Position-based Indexing 1 
 
Position-based Indexing 2 
 
Selecting Rows with loc (label-based indexing) 
 
Slicing Rows and Columns with loc (label-based indexing) 
 
Label-based Indexing Cheat Sheets 
 
Summary Best Practices and Outlook 
 
First Steps with Pandas Series 
 
Analyzing Numerical Series with unique() nunique() and value_counts() 
 
Analyzing non-numerical Series with unique() nunique() value_counts() 
 
Sorting of Series and Introduction to the inplace - parameter 
 
First Steps with Pandas Index Objects 
 
Changing Row Index with set_index() and reset_index() 
 
Renaming Index & Column Labels with rename() 
 
Filtering DataFrames (one Condition) 
 
Filtering DataFrames by many Conditions (AND) 
 
Filtering DataFrames by many Conditions (OR) 
 
Advanced Filtering with between()  isin() and ~ 
 
Intro to NA Values / missing Values 
 
Handling NA Values / missing Values 
 
Exporting DataFrames to csv 
 
Summary Statistics and Accumulations 
 
Visualization with Matplotlib (Intro) 
 
Categorical Seaborn Plots 
 
Introduction to GroupBy Operations 
 
Understanding the GroupBy Object