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