如何使用Angel Broking SmartAPI计算VWAP(成交量加权平均价)
计算VWAP的实现方法
首先明确VWAP(成交量加权平均价格)的核心计算公式:
VWAP = 累计(典型价格 × 成交量) / 累计成交量
其中典型价格 = (开盘价 + 最高价 + 最低价 + 收盘价) / 4
基于你已获取的K线DataFrame,直接用Pandas就能完成计算,具体实现如下:
含VWAP计算的完整代码
import pyotp from datetime import datetime, timedelta import pandas as pd from smartapi import SmartConnect # 需确保已导入该库 totp = pyotp.TOTP(Token).now() SMART_API_OBJ = SmartConnect(api_key) # 登录接口调用 history_data = SMART_API_OBJ.generateSession(clientId, pwd, totp) to_date = datetime.now() from_date = to_date - timedelta(days=maxDays) from_date_format = from_date.strftime("%Y-%m-%d %H:%M") to_date_format = to_date.strftime("%Y-%m-%d %H:%M") try: historicParam = { "exchange": "NSE", "symboltoken": getToken(symbol), "interval": interval, "fromdate": from_date_format, "todate": to_date_format } try: candel_json = SMART_API_OBJ.getCandleData(historicParam) columns = ['timestamp', 'O', 'H', 'L', 'C', 'V'] df = pd.DataFrame(candel_json['data'], columns=columns) # 开始计算VWAP # 1. 计算单根K线的典型价格 df['typical_price'] = (df['O'] + df['H'] + df['L'] + df['C']) / 4 # 2. 计算典型价格与成交量的乘积,并累计求和 df['tp_volume'] = df['typical_price'] * df['V'] df['cum_tp_volume'] = df['tp_volume'].cumsum() # 3. 累计成交量 df['cum_volume'] = df['V'].cumsum() # 4. 计算最终VWAP值 df['VWAP'] = df['cum_tp_volume'] / df['cum_volume'] # 处理成交量为0的特殊情况,避免除零报错 df['VWAP'] = df['VWAP'].fillna(0) except Exception as e: print(f"获取K线数据失败: {str(e)}") except Exception as e: print(f"参数配置或登录异常: {str(e)}")
补充说明
- VWAP通常用于日内交易分析,如果你的K线数据跨多个交易日,需要按日期分组重新计算,避免不同交易日的累计值混淆:
# 先将timestamp转为datetime格式 df['timestamp'] = pd.to_datetime(df['timestamp']) # 按自然日分组计算VWAP df['VWAP'] = df.groupby(df['timestamp'].dt.date).apply( lambda x: (x['typical_price'] * x['V']).cumsum() / x['V'].cumsum() ).reset_index(drop=True)
内容的提问来源于stack exchange,提问作者qagourab
相关产品推荐
相关产品推荐

