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

75 lines
2.0 KiB
Python

import numpy as np
import matplotlib.pyplot as plt
from v2realbot.controller.services import get_archived_runner_details_byID, preview_indicator_byTOML
from v2realbot.common.model import RunArchiveDetail, InstantIndicator
from scipy.signal import argrelextrema
from v2realbot.utils.utils import AttributeDict, zoneNY, zonePRG, safe_get, dict_replace_value, Store, parse_toml_string, json_serial, is_open_hours, send_to_telegram
##SCAFFOLDING for development of new indicator
runner_id = "7512b097-1f29-4c61-a331-2b1a40fd3f91"
toml = """
#[stratvars.indicators.local_maxik]
type = 'custom'
subtype = 'basestats'
on_confirmed_only = true
cp.lookback = 30
cp.source = 'vwap'
cp.function = 'maxima'
"""
toml = """
type = 'custom'
subtype = 'expression'
on_confirmed_only = true
cp.expression = 'int(utls.is_pivot(high,3))'
"""
toml = """
type = 'custom'
subtype = 'expression'
on_confirmed_only = true
cp.expression = 'int(utls.is_pivot(high,3))'
"""
res, val = get_archived_runner_details_byID(runner_id)
if res < 0:
print("error fetching runner")
print(res)
detail = RunArchiveDetail(**val)
res, toml_parsed = parse_toml_string(toml)
if res < 0:
print("invalid tml",res, toml)
print(toml_parsed)
#toml_parsed = AttributeDict(**toml_parsed)
# for i in toml_parsed["stratvars"]["indicators"]:
# break
ind: InstantIndicator = InstantIndicator(name="testind", toml=toml)
result, new_ind_values = preview_indicator_byTOML(id=runner_id, indicator=ind)
if result < 0:
print("error", result, val)
# detail.indicators[0]
price_series = np.array(detail.bars["vwap"])
new_ind_value = np.array(new_ind_values)
#price_series = detail.bars["vwap"]
#timestamps = detail.bars["time"]
# Plot the price series with local maxima and minima
plt.figure(figsize=(10, 6))
plt.plot(range(len(price_series)), price_series, label='Price')
plt.plot(range(len(new_ind_value)), new_ind_value, label='Indicator')
plt.xlabel('Time')
plt.ylabel('Price')
plt.title('Price Series with Local Maxima and Minima')
plt.legend()
plt.show()