常用功能速查表¶
Info
本頁提供 TQuant Lab 常用功能的快速查詢指南,幫助您迅速找到關鍵函數與操作方式。
快速查詢常見任務的解決方案。每個部分都包含代碼示例和指向詳細文檔的連結。
快速跳轉¶
在下方快速定位你需要的內容:
- 資料管理 - 獲取股票數據、基本面資料、基準指數
- 策略編寫 - 初始化參數、編寫交易邏輯、使用 Pipeline
- 交易執行 - 下單、查詢持倉、設置手續費和滑價
- 交易限制 - 設置槓桿、禁止交易清單、交易頻率限制
- 績效分析 - Pyfolo 報表、因子分析、自訂指標
- API 參考 - symbol()、data.history()、context.portfolio
- 常見問題 - 調試技巧、快速診斷
資料管理¶
如何取得股票歷史價格?¶
如何加載 TEJ 基本面資料?¶
import TejToolAPI
api = TejToolAPI.TejToolAPI()
df = api.get_history_data(tickers='2330', fields=['PER', 'PBR'], date='20230101')
如何取得基準指數報酬?¶
在 run_algorithm() 中指定:
策略編寫¶
如何初始化策略參數?¶
def initialize(context):
context.max_leverage = 1.0
context.stocks = [symbol('2330'), symbol('2454')]
context.long_window = 50
context.short_window = 20
如何在每個交易日執行操作?¶
def handle_data(context, data):
# 這個函數每天執行一次
prices = data.history(symbol('2330'), 'close', 20, '1d')
avg = prices.mean()
if avg > some_threshold:
order(symbol('2330'), 100)
如何計算因子並過濾股票?¶
from zipline.pipeline import Pipeline, screen
from zipline.pipeline.factors import CustomFactor
pipeline = Pipeline(
columns={
'momentum': CustomFactor(...),
},
screen=Q(pe_ratio < 20),
)
交易執行¶
如何下買單?¶
如何下賣單?¶
如何一次買入所有資金可購買的股票?¶
price = data.current(symbol('2330'), 'price')
cash = context.portfolio.cash
shares = int(cash / price)
order(symbol('2330'), shares)
如何調整至目標權重? (推薦)¶
自動計算需要買賣的股數,將該股票調整至總資產的 10%。
詳見:下單函數
如何查詢當前持倉?¶
positions = context.portfolio.positions
for asset, position in positions.items():
print(f"股票: {asset}, 數量: {position.amount}, 成本: {position.cost_basis}")
詳見:context 變數
如何設定手續費?¶
詳見:如何設定手續費模型
如何設定滑價?¶
詳見:如何設定滑價模型
交易限制¶
如何限制最大槓桿?¶
如何設定禁止交易清單?¶
如何設定單日最大交易筆數?¶
詳見:如何設定交易限制
績效分析¶
如何生成 Pyfolo 報表?¶
如何進行因子分析?¶
如何記錄自訂指標?¶
def handle_data(context, data):
# ... 交易邏輯 ...
record(
portfolio_value=context.portfolio.portfolio_value,
leverage=context.account.leverage,
custom_signal=some_value
)
詳見:context 變數
常用 API 參考¶
symbol() - 獲取股票對象¶
data.history() - 獲取歷史數據¶
prices = data.history(stock, 'close', 50, '1d') # 過去 50 日收盤價
volumes = data.history(stock, 'volume', 20, '1d') # 過去 20 日成交量
data.current() - 獲取當前價格¶
context.portfolio - 投資組合信息¶
context.portfolio.portfolio_value # 總資產
context.portfolio.cash # 現金
context.portfolio.positions # 持倉字典
完整策略範本¶
一個最小化但完整的策略框架:
from zipline import run_algorithm
from zipline.api import order, symbol, record
from datetime import datetime
def initialize(context):
context.stock = symbol('2330')
def handle_data(context, data):
price = data.current(context.stock, 'price')
order(context.stock, 10)
record(price=price)
def analyze(context, perf):
print(f"Return: {perf['algorithm_period_return'][-1]:.2%}")
run_algorithm(
start=pd.Timestamp('2022-01-01', tz='utc'),
end=pd.Timestamp('2023-01-01', tz='utc'),
initialize=initialize,
handle_data=handle_data,
analyze=analyze,
capital_base=100000,
bundle='tquant',
)
快速診斷¶
為什麼我的策略沒有下單?¶
| 原因 | 檢查方法 |
|---|---|
| 資金不足 | 檢查 context.portfolio.cash |
| 股票代碼錯誤 | 確保 symbol() 使用正確的代碼 |
| 數據不可用 | 檢查回測期間是否有該股票的數據 |
| 邏輯錯誤 | 在 handle_data() 中添加 print() 調試 |
如何調試策略?¶
def handle_data(context, data):
# 添加 print 語句
print(f"Date: {data.current_dt}")
print(f"Cash: {context.portfolio.cash}")
print(f"Portfolio value: {context.portfolio.portfolio_value}")
# ... 其他邏輯 ...