Advanced Trading Strategies: Maximizing Profits with VWAP, TWAP, and PoV Using Python

This article explores advanced trading strategies — VWAP, TWAP, and PoV — demonstrating their practical application using Python and EODHD APIs to enhance trading decisions.

7 min readJun 13, 2024

In the high-speed world of financial trading, traders utilize a variety of strategies to manage market complexities. Three prominent strategies, known for their effectiveness in executing trades with minimal market impact, are the Volume Weighted Average Price (VWAP), Time Weighted Average Price (TWAP), and Percent of Volume (PoV) strategies. Each offers a different perspective on trading, whether through the volume-weighted lens of VWAP, the time-focused approach of TWAP, or the volume-based method of PoV.

The VWAP strategy is appreciated for providing traders with insights into the true market price of an asset, weighted by volume, which aids in making informed trading decisions aligned with market trends. TWAP, on the other hand, averages the price over a specific time frame, making it less susceptible to volume fluctuations and simpler for trading. The PoV strategy stands out for executing large orders by following a predetermined percentage of market volume, allowing for discreet trading and minimizing market impact.

In this article, we will delve into each of these strategies, exploring their functions, applications, and the signals they offer for buying and selling. Through Python code examples using OHLCV (Open, High, Low, Close, Volume) data from the EODHD APIs, we will demonstrate the practical aspects of these strategies. This article aims to bridge the gap between theoretical concepts and real-world trading applications. Whether you are an experienced trader or a newcomer, understanding these strategies can expand your trading toolkit and offer new ways to navigate market dynamics.


To demonstrate the practical use of the three trading strategies — Volume Weighted Average Price (VWAP), Time Weighted Average Price (TWAP), and Percent of Volume (PoV) — we will use historical OHLCV data. This data will be retrieved through EODHD APIs, utilizing the official EODHD API’s Python library. If you want to follow along and gain hands-on experience, it is recommended to subscribe to EODHD APIs. This subscription will give you real-time access to the necessary data and help you better understand these strategies through active participation.

First, create a new Python project and install the official EODHD API’s Python library. Then, set up a configuration file named `` with the following content:


Next, create a “” file to retrieve our data. For this example, we’ll use the S&P 500 Index, identified by the symbol GSPC.INDX.

import config as cfg
from eodhd import APIClient

api = APIClient(cfg.API_KEY)

def get_ohlc_data():
df = api.get_historical_data("GSPC.INDX", "d", results=730)
return df

if __name__ == "__main__":
df = get_ohlc_data()

Now that we have our OLHCV (Open, Low, High, Close, Volume) data, we can examine the technical indicators…

Volume Weighted Average Price (VWAP)

The Volume Weighted Average Price (VWAP) is a trading benchmark that reflects the average price a security has traded at throughout the day, factoring in both volume and price. It calculates the weighted average price, taking into account the volume of trades. VWAP is especially useful for traders and investors aiming to understand the market direction of a stock over the course of the day or to execute trades close to the average market price.

Trading Signals Using VWAP

A buy signal occurs when a stock’s price is below the VWAP, indicating it is undervalued (similar to the Relative Strength Index, RSI). The rationale is that the stock is trading at a price lower than its average, suggesting a potential upward movement towards the average.

On the other hand, a sell signal is generated when the price is above the VWAP, implying the stock is overvalued. This suggests a possible downward correction to bring the price in line with the average.

df['typical_price'] = (df['high'] + df['low'] + df['close']) / 3
df['vwap'] = (df['typical_price'] * df['volume']).cumsum() / df['volume'].cumsum()


The current price of the S&P 500 is 4,864.60. According to the VWAP strategy, this price suggests that the S&P 500 is overvalued, indicating a potential sell signal.

Time Weighted Average Price (TWAP)

TWAP, or Time Weighted Average Price, is a trading benchmark similar to VWAP but focuses on time rather than volume. TWAP calculates the average price of a security over a set time period, treating each price point within that period equally, regardless of trading volume. This approach is particularly beneficial for minimizing the market impact of large trades or when trading low-volume securities where VWAP might not be as effective due to insufficient volume data.

Trading Signals with TWAP

A buy signal could be generated when the current price is below the TWAP, indicating that the price is lower than the average, suggesting a potential upward correction.

Conversely, a sell signal might be considered when the current price is above the TWAP, indicating that the price is higher than the average, suggesting a potential downward correction.

df['average_price'] = (df['open'] + df['high'] + df['low'] + df['close']) / 4
df['twap'] = df['average_price'].expanding().mean()


The current S&P 500 price is 4,864.60. According to the TWAP strategy, the S&P 500 is deemed overvalued, suggesting a sell signal.

Percent of Volume (PoV) Strategy

Percent of Volume (PoV) is a trading strategy that aims to execute an order as a specified percentage of the market’s total volume over a given period. Unlike VWAP and TWAP, which are used to calculate average prices, PoV controls the rate at which trades are executed relative to the market’s trading volume.

How PoV Works

PoV is defined as the ratio of the trader’s order size to the total market volume over a specified time frame, expressed as a percentage. For instance, if a trader sets a PoV rate of 20%, the trader intends to execute their order such that it constitutes no more than 20% of the market’s total volume in each time slice, thus reducing market impact.

Here’s how you can apply a PoV strategy:

order_size = 800  # Total shares to be executed
pov_rate = 0.20 # 20% of market volume

df['daily_execution_target'] = df['volume'] * pov_rate
df['actual_execution'] = df['daily_execution_target'].apply(lambda x: min(x, order_size))
order_size -= df['actual_execution'].sum()

print(df[['volume', 'daily_execution_target', 'actual_execution']])


In wrapping up our detailed look at Volume Weighted Average Price (VWAP), Time Weighted Average Price (TWAP), and Percent of Volume (PoV) trading strategies, we’ve seen how vital the method of execution is to the trading process. Each strategy offers unique advantages for engaging with the market, providing traders with powerful tools to make informed and strategic decisions.

Using practical demonstrations with the Official EODHD API’s Python Library and OHLCV data from EODHD APIs, we’ve illustrated how these strategies can be effectively applied in real-world trading. Whether you’re aiming to minimize market impact with PoV, seeking value through the volume insights of VWAP, or leveraging the simplicity of TWAP, these methodologies can significantly enhance your decision-making process and potentially improve trading outcomes.

However, it’s crucial to recognize that no single strategy guarantees success in the markets. The performance of VWAP, TWAP, and PoV strategies, like all trading approaches, can vary depending on market conditions, liquidity, and volatility. Therefore, these strategies should be part of a broader, diversified trading plan, supported by comprehensive analysis and additional tools.

Trading in the financial markets is a continual learning journey. Adaptability and a thorough understanding of various strategies are essential for making informed and potentially profitable decisions. As you navigate the markets, let the insights from VWAP, TWAP, and PoV guide you toward your trading goals. Remember, effective trading lies in balancing strategy and execution, where each choice moves you closer to mastering market engagement.

For more valuable tips and insights, be sure to follow the EODHD Academy.

Please note that this article is for informational purposes only and should not be taken as financial advice. We do not bear responsibility for any trading decisions made based on the content of this article. Readers are advised to conduct their own research or consult with a qualified financial professional before making any investment decisions.

For those eager to delve deeper into such insightful articles and broaden their understanding of different strategies in financial markets, we invite you to follow our account and subscribe for email notifications.

Stay tuned for more valuable articles that aim to enhance your data science skills and market analysis capabilities.



EODHD APIs — stock market fundamental and historical prices API for stocks, ETFs, mutual funds and bonds all over the world.