
一、策略原理
相對強弱指數(Relative Strength Index, RSI)是由 Welles Wilder 提出的經典技術指標,通過計算價格波動的幅度衡量市場超買 / 超賣狀態。RSI 取值範圍 0-100,常用判斷標準:
- RSI > 70:超買,潛在反轉信號
- RSI < 30:超賣,潛在反轉信號
- 結合趨勢線或價格突破增強信號有效性
二、數據準備
本文使用 iTick 金融數據平台提供的高頻數據,支援 A 股、期貨、數字貨幣等多市場。安裝數據介面庫:
pip install itrade # iTick數據介入
數據獲取示例(以滬深 300 指數期貨為例):
""""
**iTick**:是一家數據代理機構,為金融科技公司和開發者提供可靠的數據源APIs,涵蓋外匯API、股票API、加密貨幣API、指數API等,#幫助構建創新的交易和分析工具,目前有免費的套餐可以使用基本可以滿足個人量化開發者需求
開源股票數據接口地址
https://github.com/itick-org
申請免費Apikey地址
https://itick.org
"""
from itrade import quote
# 獲取歷史數據
df = quote.get_kline(
symbol="IF2303",
start_date="2023-01-01",
end_date="2024-01-01",
interval="1min"
)
# 數據預處理
df = df[['datetime', 'open', 'high', 'low', 'close', 'volume']]
df.set_index('datetime', inplace=True)
三、策略實現
1. RSI 計算函數
import pandas as pd
import numpy as np
def calculate_rsi(df, window=14):
delta = df['close'].diff(1)
gain = delta.where(delta > 0, 0)
loss = -delta.where(delta < 0, 0)
avg_gain = gain.rolling(window=window, min_periods=window).mean()
avg_loss = loss.rolling(window=window, min_periods=window).mean()
rs = avg_gain / avg_loss
rsi = 100 - (100 / (1 + rs))
df[f'RSI_{window}'] = rsi
return df
2. 信號生成邏輯
def generate_signals(df, rsi_window=14):
df = calculate_rsi(df, rsi_window)
# 金叉/死叉信號
df['signal'] = 0
df.loc[df[f'RSI_{rsi_window}'] > 70, 'signal'] = -1 # 超賣區做空
df.loc[df[f'RSI_{rsi_window}'] < 30, 'signal'] = 1 # 超買區做多
# 趨勢過濾(可選)
df['ma50'] = df['close'].rolling(50).mean()
df.loc[df['ma50'] < df['ma50'].shift(1), 'signal'] = 0 # 下降趨勢不做多
df.loc[df['ma50'] > df['ma50'].shift(1), 'signal'] = 0 # 上升趨勢不做空
return df
四、策略回測
1. 基礎回測框架
def backtest_strategy(df):
df['position'] = df['signal'].diff()
# 計算交易收益
df['returns'] = np.log(df['close'] / df['close'].shift(1))
df['strategy_returns'] = df['position'] * df['returns']
# 計算累計收益
df['cumulative_returns'] = df['strategy_returns'].cumsum()
# 計算年化收益、夏普比率等指標
total_days = len(df) / 252
sharpe_ratio = np.sqrt(252) * (df['strategy_returns'].mean() / df['strategy_returns'].std())
return df, sharpe_ratio
2. 回測結果分析
# 執行回測
df, sharpe = backtest_strategy(df)
print(f"策略夏普比率: {sharpe:.2f}")
print(f"最大回撤: {max_drawdown(df['cumulative_returns']):.2%}")
# 可視化
import matplotlib.pyplot as plt
plt.figure(figsize=(12,6))
plt.plot(df.index, df['cumulative_returns'], label='策略收益')
plt.plot(df.index, df['close'].pct_change().cumsum(), label='基準收益')
plt.legend()
plt.show()
五、策略優化方向
- 參數優化:使用 GridSearchCV 尋找最優 RSI 週期和閾值組合
- 多時間框架:結合日線與小時線信號提高勝率
- 風險控制:設置動態止損(如 ATR 通道止損)
- 資金管理:基於波動率調整倉位
六、iTick 數據優勢
- 全市場覆蓋:支援 A 股、期貨、期權、數字貨幣等多品種
- 高頻低延遲:提供 Level-2 行情和 Tick 級數據
- 便捷接入:支援 Python/R/Matlab 多語言介面
- 歷史數據完整:提供十年以上歷史行情數據
七、注意事项
- RSI 在趨勢市場中可能出現鈍化,建議結合趨勢指標使用
- 需定期對策略參數進行再優化
- 實盤需考慮滑點和流動性風險
- 建議使用 iTick 的即時數據流進行策略驗證
透過本文的程式碼框架,讀者可以快速實現基於 RSI 的量化策略,並結合 iTick 的專業金融數據進行策略開發與驗證。實際應用中需根據具體市場環境調整參數和風險控制規則。


