计算交易算法VWAP(成交量加权平均价格)的最有效方法

问题描述 投票:0回答:2

我正在寻找一种高效的 VWAP 算法,用于包含股票一年的 5 分钟蜡烛数据的数据框。

我的代码:

def calculate_vwap(data):
    data['VWAP'] = data.groupby('date').apply(lambda x: ((x['high'] + x['low'] + x['close']) / 3 * x['volume']).cumsum() / x['volume'].cumsum()).reset_index(level=0, drop=True)
    return data['VWAP']

我的代码的输出与交易视图 VWAP 值不匹配。链接到示例数据 - https://drive.google.com/file/d/12oDiWe9HWQDZEvGmQAqcznklT8NBObGQ/view?usp=sharing 样品:

python python-3.x algorithm trading tradingview-api
2个回答
2
投票

经过一些研究,我发现一些交易平台使用这个平均价格 - (最高价+最低价+收盘价)/3,有些交易平台使用(最高价+最低价)/2 来得出 VWAP 值。

对于 VWAP 计算,累积交易量和累积 (价格X交易量) 是从当天的第一根蜡烛开始计算的。这导致我像这样修改我的代码,现在它可以工作了 -

for ticker in Angel_Hist_Data5Min:

Angel_Hist_Data5Min[ticker]["AvgP"] = ((Angel_Hist_Data5Min[ticker]["high"]+Angel_Hist_Data5Min[ticker]["low"]+Angel_Hist_Data5Min[ticker]["close"])/3)
Angel_Hist_Data5Min[ticker]["PV"] = Angel_Hist_Data5Min[ticker]["AvgP"]*Angel_Hist_Data5Min[ticker]["volume"]
Angel_Hist_Data5Min[ticker]['CumPV'] = Angel_Hist_Data5Min[ticker].groupby(Angel_Hist_Data5Min[ticker]['date'].dt.date)['PV'].cumsum()
Angel_Hist_Data5Min[ticker]["VWAP_hlc"] = Angel_Hist_Data5Min[ticker]["CumPV"]/Angel_Hist_Data5Min[ticker]["CumVolume"] 

Angel_Hist_Data5Min[ticker]["AvgP_hl"] = ((Angel_Hist_Data5Min[ticker]["high"]+Angel_Hist_Data5Min[ticker]["low"])/2)
Angel_Hist_Data5Min[ticker]["PV_hl"] = Angel_Hist_Data5Min[ticker]["AvgP_hl"]*Angel_Hist_Data5Min[ticker]["volume"]  
Angel_Hist_Data5Min[ticker]['CumPV_hl'] = Angel_Hist_Data5Min[ticker].groupby(Angel_Hist_Data5Min[ticker]['date'].dt.date)['PV_hl'].cumsum()
Angel_Hist_Data5Min[ticker]["VWAP_hl"] = Angel_Hist_Data5Min[ticker]["CumPV_hl"]/Angel_Hist_Data5Min[ticker]["CumVolume"]

我现在正在计算两个 VWAP,这有助于与所有交易平台数据进行匹配。


0
投票

以下内容帮助我获得了 TradingView VWAP:`symbol = "HDFCBANK-EQ" df_1min = pd.read_csv(f'Data/1/{symbol}.csv',index_col=False) df_1min['DT'] = pd.to_datetime(df_1min['DT'])

# Calculate VWAP using the average of high, low, and close prices
df_1min["AvgP"] = (df_1min["High"] + df_1min["Low"] + df_1min["Close"]) / 3
df_1min["PV"] = df_1min["AvgP"] * df_1min["Volume"]

# Group by date and calculate cumulative volume and cumulative PV
grouped = df_1min.groupby(df_1min['DT'].dt.date)
df_1min['CumVolume'] = grouped['Volume'].cumsum()
df_1min['CumPV'] = grouped['PV'].cumsum()

# Calculate VWAP using cumulative values until that time
df_1min["VWAP"] = df_1min["CumPV"] / df_1min["CumVolume"]`
© www.soinside.com 2019 - 2024. All rights reserved.