Skip to content

Python for Finance 101

Many beginners feel overwhelmed by code. Don't worry! In AKQuant, you don't need to be a computer scientist. Mastering just the core 20% of syntax covers 80% of strategy development needs.

This guide will teach you Python strictly from a Financial Trading perspective.


1. Variables & Data Types: Defining Assets

In Python, variables are like labeled boxes used to store data.

Basic Variables

  • int: For volume, lot size.
  • float: For price, returns.
  • str: For ticker symbols.
# Define variables
symbol = "AAPL"        # Ticker (String)
price = 150.5          # Current Price (Float)
volume = 100           # Buy Quantity (Integer)
is_holding = True      # Position Status (Boolean)

# Print them out
print(f"Trading {symbol}, Price: {price}")

Lists: A Sequence of Prices

Imagine a candlestick chart. The closing prices of the last 5 days form a list.

# Closing prices of last 5 days
closes = [150.1, 152.0, 149.5, 153.0, 155.0]

# Access data
print(closes[0])   # 1st day price (Python counts from 0!) -> 150.1
print(closes[-1])  # Last day price (Latest) -> 155.0
print(closes[:3])  # First 3 days -> [150.1, 152.0, 149.5]

# Calculate Average
avg_price = sum(closes) / len(closes)
print(f"5-day Average: {avg_price}")

Dictionaries: Your Portfolio

A dictionary is like a ledger. Left side is the Name (Key), right side is the Value.

# Current Portfolio: Ticker -> Shares
portfolio = {
    "AAPL": 100,
    "TSLA": 50,
    "GOOG": 0
}

# Check holdings
print(portfolio["AAPL"]) # -> 100

# Update holdings
portfolio["TSLA"] += 10  # Add 10 shares

2. Logic Control: The Core of Decision

A trading strategy is essentially a set of if...else statements: If X happens, do Y.

If/Else Statements

This is the "trigger" of your strategy.

ma5 = 155.0  # Short-term MA
ma20 = 150.0 # Long-term MA
cash = 5000  # Available Cash

# Golden Cross Logic
if ma5 > ma20:
    print("Signal: Golden Cross!")
    if cash > 1000:
        print("Cash sufficient, executing BUY!")
    else:
        print("Insufficient funds.")
else:
    print("No signal, hold.")

Loops

Backtesting is basically a big loop, iterating through historical data day by day.

# Mock Backtest: Iterate through daily prices
prices = [100, 110, 90, 120, 130]

for p in prices:
    if p > 120:
        print(f"Price {p} broke 120, take profit!")
    else:
        print(f"Price {p} is normal.")

3. Pandas Crash Course: The Quant Tool

In AKQuant, 99% of data (like history_data) is in DataFrame format. Think of it as a Supercharged Excel.

DataFrame Structure

A DataFrame has Index (Rows, usually Time) and Columns (e.g., Open/Close).

import pandas as pd

# Mock OHLCV Table
data = {
    "close": [100, 101, 102, 101, 103],
    "volume": [1000, 1500, 2000, 1200, 3000]
}
df = pd.DataFrame(data)

# 1. Get a whole column (Series)
print(df["close"])

# 2. Calculate Indicators (Vectorized, very fast)
# Calculate mean of close prices
ma_price = df["close"].mean()

# 3. Get the latest row
last_bar = df.iloc[-1]
print(f"Latest Close: {last_bar['close']}")

4. Classes & Objects: Understanding Strategy Templates

When writing a strategy, you see class MyStrategy(Strategy):. What does it mean?

  • Class: The Blueprint. Defines what the strategy looks like.
  • Object: The Instance. Built from the blueprint when backtesting runs.
  • self: Represents The Strategy Instance Itself.
    • self.buy(): I want to buy.
    • self.cash: My cash.
    • self.position: My position.
class MyStrategy:
    def __init__(self, initial_cash):
        # Init: Runs once when strategy starts
        self.cash = initial_cash
        self.name = "MA Strategy"

    def on_bar(self, price):
        # Runs on every bar close
        if price < 100:
            self.buy()

    def buy(self):
        self.cash -= 100
        print(f"{self.name} Executed BUY. Cash left: {self.cash}")

# Use Strategy
strategy = MyStrategy(1000) # Create Instance
strategy.on_bar(99)         # Trigger BUY

5. Summary: AKQuant Cheat Sheet

Here are the most common Python snippets you'll use in AKQuant:

Scenario Python Code Meaning
Get Data hist = self.history_data(n=20) Get last 20 bars (DataFrame)
Calc MA ma = hist['close'].mean() Calculate average of close prices
Latest Price current_price = bar.close Get current bar's close price
Signal if ma_short > ma_long: If Short MA > Long MA
Check Pos pos = self.get_position(bar.symbol) How many shares do I hold?
Order self.buy(bar.symbol, 100) Buy 100 shares

Master these, and you are ready to write your first strategy! Go to Quant Guide to practice.