#coding:gbk import pandas as pd import numpy as np import talib from xtquant import xtdata def init(C): C.stock = C.stockcode + '.' + C.market C.accountid = "testS" C.position_rate = 0.1 C.profit_target = 0.05 C.loss_target = -0.02 C.max_daily_buy = 3 C.daily_buy_count = 0 C.last_trade_date = None # 下载历史数据 xtdata.download_history_data(C.stock, '5m') # 初始化技术指标变量 C.close = [] C.ma5 = [] C.ma20 = [] C.rsi = [] C.macd = [] C.signal = [] C.volume_ratio = 0 def handlebar(C): # 获取当前时间 bar_timetag = C.get_bar_timetag(C.barpos) bar_date = timetag_to_datetime(bar_timetag, '%Y%m%d%H%M%S') current_date = bar_date[:8] # 重置每日买入计数 if C.last_trade_date != current_date: C.daily_buy_count = 0 C.last_trade_date = current_date # 获取5分钟数据 min5_data = xtdata.get_market_data_ex(['open', 'high', 'low', 'close', 'volume'], [C.stock], period='5m', count=100) if len(min5_data) < 100: print(f"{bar_date} 5分钟数据不足,跳过") return # 计算技术指标 close = np.array(min5_data[C.stock]['close']) volume = np.array(min5_data[C.stock]['volume']) C.close = close C.ma5 = talib.MA(close, timeperiod=5) C.ma20 = talib.MA(close, timeperiod=20) C.rsi = talib.RSI(close, timeperiod=14) C.macd, C.signal, _ = talib.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9) avg_volume = np.mean(volume[-6:-1]) C.volume_ratio = volume[-1] / avg_volume # 获取账户和持仓信息 account = get_trade_detail_data('test', 'stock', 'account')[0] available_cash = int(account.m_dAvailable) total_asset = int(account.m_dBalance) holdings = get_trade_detail_data('test', 'stock', 'position') holdings = {i.m_strInstrumentID + '.' + i.m_strExchangeID: {'volume': i.m_nVolum
时间: 2025-06-26 22:24:29 浏览: 20
### 技术指标计算与市场数据处理
#### 使用 Pandas 计算移动平均线 (MA)
通过 `pandas` 的滚动窗口功能可以轻松实现移动平均线的计算。以下是基于给定代码片段扩展的一个示例:
```python
import pandas as pd
def calculate_ma(dataframe, window_size):
"""
计算指定窗口大小的简单移动平均线。
参数:
dataframe: 包含收盘价的数据框。
window_size: 移动平均线的时间窗口长度。
返回:
新增一列 MA_<window_size> 表示移动平均值的结果。
"""
ma_series = dataframe['Close'].rolling(window=window_size).mean()
dataframe[f'MA_{window_size}'] = ma_series
return dataframe
```
上述函数利用了 `DataFrame.rolling()` 方法,该方法支持多种统计运算,例如均值、标准差等[^4]。
---
#### 使用 NumPy 实现相对强弱指数 (RSI)
相对强弱指数 RSI 是一种衡量资产价格变动幅度的技术分析工具。下面是一个简单的 RSI 计算方式:
```python
import numpy as np
def calculate_rsi(dataframe, period=14):
"""
计算相对强弱指数(RSI)。
参数:
dataframe: 数据框对象,需包含 Close 列。
period: 时间周期,默认为 14 天。
返回:
增加了一列名为 'RSI' 的新数据框。
"""
delta = dataframe['Close'].diff().dropna()
gain = (delta.where(delta > 0, 0)).fillna(0)
loss = (-delta.where(delta < 0, 0)).fillna(0)
avg_gain = gain.rolling(period).mean()
avg_loss = loss.rolling(period).mean()
rs = avg_gain / avg_loss
rsi = 100 - (100 / (1 + rs))
dataframe['RSI'] = rsi.fillna(method='bfill')
return dataframe
```
此部分实现了经典的 Wilder 平滑算法来计算 RSI 值[^2]。
---
#### 使用 TA-Lib 库简化 MACD 指标的计算
TA-Lib 是一个广泛使用的金融技术分析库,能够快速完成复杂指标的计算。以下是如何使用它来生成 MACD 指标:
```python
import talib
def calculate_macd(dataframe, fast_period=12, slow_period=26, signal_period=9):
"""
使用 TA-Lib 计算 MACD 指标。
参数:
dataframe: 输入数据框,必须有 'Close' 列。
fast_period: 快速 EMA 的时间周期。
slow_period: 缓慢 EMA 的时间周期。
signal_period: 信号线的时间周期。
返回:
修改后的数据框新增三列:MACD、Signal 和 Histogram。
"""
macd_line, signal_line, hist = talib.MACD(
dataframe['Close'],
fastperiod=fast_period,
slowperiod=slow_period,
signalperiod=signal_period
)
dataframe['MACD'] = macd_line
dataframe['Signal'] = signal_line
dataframe['Histogram'] = hist
return dataframe
```
这段代码调用了 TA-Lib 中预定义好的 `MACD` 函数,从而避免手动编写复杂的指数平滑过程[^3]。
---
#### xtquant 接口获取市场数据
xtquant 是通达信提供的量化交易平台 API,可用于实时行情抓取和回测模拟等功能。下面是其基本用法之一——获取历史 K 线数据:
```python
from xtquant import xtdata
def fetch_stock_data(stock_code, frequency, count, end_time=None):
"""
获取某只股票的历史K线数据。
参数:
stock_code: 股票代码字符串形式,如 "SHSE.600519"。
frequency: 数据频率,可选值:"1m", "5m", "1d" 等。
count: 请求记录条数。
end_time: 结束时间戳,默认当前时刻。
返回:
DataFrame 类型的历史数据。
"""
data = xtdata.get_kline_data_extended(
security=stock_code,
period=frequency,
start_time='',
end_time=end_time or '',
count=count,
fields=['time_key', 'open', 'high', 'low', 'close']
)
df = pd.DataFrame(data)
df.set_index('time_key', inplace=True)
return df
```
以上脚本展示了如何通过 xtquant 来请求特定时间段内的高频或日频数据[^1]。
---
### 总结
综上所述,在 Python 中进行股票量化交易策略开发时,可以选择不同的技术和框架组合。对于基础数据分析任务来说,Pandas 已经足够强大;而当涉及更高级别的技术指标时,则推荐引入第三方专用库比如 TA-Lib 或者自定义实现逻辑。
阅读全文
相关推荐


















