in src/backend/entrypoints/streamlit_frontend/state.py [0:0]
def trading_rule_import_callback(trading_rule):
keycloak_session = st.session_state.keycloak_session
st.session_state.clear()
st.session_state["log"] = []
set_default_state()
st.session_state.keycloak_session = keycloak_session
periodicity = trading_rule["interval"]
fetch_data_range = trading_rule["time_period"]
for data_periodicity_index, periodicity_key in enumerate(DATA_PERIODICITIES_NAMES_TO_VALUES.keys()):
if periodicity_key == periodicity:
break
for fetch_data_range_index, range_key in enumerate(DATA_TIME_RANGES_NAMES_TO_VALUES.keys()):
if range_key == fetch_data_range:
break
provider = DATA_PROVIDERS_NAMES_TO_BACKEND_KEY.get(trading_rule["data_provider"], "")
if not provider:
provider = trading_rule["data_provider"] if trading_rule["data_provider"] is not None else ""
st.session_state["tradable_symbols_prompt"] = trading_rule["tradable_symbols_prompt"]
st.session_state["supplementary_symbols_prompt"] = trading_rule["supplementary_symbols_prompt"]
st.session_state["data_periodicity_index"] = data_periodicity_index
st.session_state["fetch_data_range_index"] = fetch_data_range_index
if isinstance(fetch_data_range, str):
fetch_data_range = string_to_ms(fetch_data_range)
st.session_state["time_period"] = fetch_data_range
else:
st.session_state["time_period"] = fetch_data_range
datasets_keys = trading_rule.get("datasets_keys", None)
if datasets_keys is None:
datasets_keys = ["split_adj_prices"]
if "Prices" in datasets_keys:
price_index = datasets_keys.index("Prices")
datasets_keys[price_index] = "split_adj_prices"
st.session_state["datasets_multiselect"] = [
dataset.DATASET_NAME for dataset_key, dataset in datasets.items() if dataset_key in datasets_keys
]
st.session_state["datasets_keys"] = datasets_keys
if isinstance(periodicity, str):
periodicity = DATA_PERIODICITIES_VALUES_TO_BACKEND_KEY[periodicity]
st.session_state["interval"] = periodicity
else:
st.session_state["interval"] = periodicity
st.session_state["provider"] = data_providers[provider].PROVIDER_NAME
st.session_state["data_provider"] = provider
# Call symbol step to restore fields that are not presented in the alert json
clear_fundamentals()
request_timestamp, fetched_symbols_meta, synth_formulas = symbol_step(st.session_state)
st.session_state.application_flow.add_fetch_into_operation()
fetched_data = "\n\n".join(fetched_symbols_meta)
calculated_synthetics = "\n\n".join(
f"`{synth_name} = {synth_formula}`" for synth_name, synth_formula in synth_formulas.items()
)
data_source = [
i for i in DATA_PROVIDERS_NAMES_TO_BACKEND_KEY if DATA_PROVIDERS_NAMES_TO_BACKEND_KEY[i] == st.session_state.data_provider
][0]
calculated_synthetics_logs = f"Calculated synthetics:\n\n {calculated_synthetics}" if calculated_synthetics else ""
fetched_data_logs = f"**Fetched from {DATA_PROVIDERS_NAMES_TO_BACKEND_KEY[data_source]} (periodicity: {st.session_state.interval}, time range: {st.session_state.time_period}) at {request_timestamp}**: \n {fetched_data}"
define_useful_strings(st.session_state)
define_empty_indicators_step(st.session_state)
append_log(fetched_data_logs)
if calculated_synthetics_logs:
append_log(calculated_synthetics_logs)
# Call indicator step to restore fields that are not presented in the alert json
indicators_dialogue = trading_rule["indicators_dialogue"]
if len(indicators_dialogue) == 1 and indicators_dialogue[0] == "":
indicators_dialogue = []
st.session_state["indicators_dialogue"] = indicators_dialogue
if (
len(indicators_dialogue) == 1
and trading_rule["indicators_logic"] is not None
and "```python" in trading_rule["indicators_logic"]
):
st.session_state["indicators_dialogue"].append(trading_rule["indicators_logic"])
if indicators_dialogue != [] and any(indicators_dialogue):
try:
indicator_step(st.session_state)
ind_code_block, _ = get_code_sections(st.session_state["indicators_dialogue"][-1])
st.session_state.application_flow.clear_backtesting_run()
st.session_state.application_flow.add_indicators_run_into_operation()
st.session_state.application_flow.set_prev_code(ind_code_block)
except Exception as e:
st.session_state.indicator_error = repr(e)
st.session_state["trading_rule_title"] = trading_rule["title"]
st.session_state["actual_currency"] = trading_rule["actual_currency"]
st.session_state["bet_size"] = int(trading_rule["bet_size"])
st.session_state["total_gross_limit"] = int(trading_rule["total_gross_limit"])
st.session_state["per_instrument_gross_limit"] = int(trading_rule["per_instrument_gross_limit"])
st.session_state["nop_limit"] = int(trading_rule["nop_limit"])
st.session_state["use_dividends_trading"] = trading_rule.get("use_dividends_trading", False)
st.session_state["execution_cost_bps"] = float(trading_rule.get("execution_cost_bps", 0.0))
st.session_state["fill_trade_price"] = trading_rule.get("fill_trade_price", None)