Files
v2realbot/testy/volatilitytest.py
David Brazda 0db88b194c balik zmen uff
2023-11-03 20:49:24 +01:00

51 lines
1.7 KiB
Python

import numpy as np
import matplotlib.pyplot as plt
from v2realbot.controller.services import get_archived_runner_details_byID
from v2realbot.common.model import RunArchiveDetail
# Generate sample price data
timestamps = np.arange('2023-10-27', '2023-10-28', dtype='datetime64[s]')
price = 100 + np.arange(100) * 0.5
id = "e74b5d35-6552-4dfc-ba59-2eda215af292"
res, val = get_archived_runner_details_byID(id)
if res < 0:
print(res)
detail = RunArchiveDetail(**val)
# detail.indicators[0]
price = detail.bars["vwap"]
timestamps = detail.bars["time"]
# Calculate the standard deviation of price changes over a specified time interval
def calculate_volatility(price, window):
volatility = np.zeros_like(price)
for i in range(window, len(price)):
volatility[i] = np.std(price[i - window: i])
return volatility
# Set a threshold for the indicator
threshold = 0.4
# Identify breakout points based on the threshold
def identify_breakouts(volatility, threshold):
return volatility > threshold
# Plot the price data and the volatility breakout points
def plot_data(timestamps, price, breakout_points):
plt.figure(figsize=(12, 6))
plt.plot(timestamps, price, label='Price')
breakout_timestamps = timestamps[np.where(breakout_points)[0]]
breakout_prices = price[np.where(breakout_points)[0]]
plt.scatter(breakout_timestamps, breakout_prices, color='r', label='Volatility Breakout')
plt.xlabel('Time')
plt.ylabel('Price')
plt.title('Intraday Volatility Breakout Indicator')
plt.legend()
plt.show()
# Applying the functions
window = 30
volatility = calculate_volatility(price, window)
breakout_points = identify_breakouts(volatility, threshold)
plot_data(timestamps, price, breakout_points)