mirror of
https://github.com/d0zingcat/deploy.git
synced 2026-05-18 23:16:47 +00:00
(feat) update directional trading
This commit is contained in:
@@ -1,18 +1,16 @@
|
||||
import streamlit as st
|
||||
import pandas_ta as ta # noqa: F401
|
||||
import streamlit as st
|
||||
from plotly.subplots import make_subplots
|
||||
|
||||
from frontend.components.backtesting import backtesting_section
|
||||
from frontend.components.config_loader import get_default_config_loader
|
||||
from frontend.components.save_config import render_save_config
|
||||
from frontend.pages.config.utils import get_candles
|
||||
from frontend.st_utils import initialize_st_page, get_backend_api_client
|
||||
from frontend.pages.config.bollinger_v1.user_inputs import user_inputs
|
||||
from plotly.subplots import make_subplots
|
||||
|
||||
from frontend.pages.config.utils import get_candles
|
||||
from frontend.st_utils import get_backend_api_client, initialize_st_page
|
||||
from frontend.visualization import theme
|
||||
from frontend.visualization.backtesting import create_backtesting_figure
|
||||
from frontend.visualization.backtesting_metrics import render_backtesting_metrics, render_accuracy_metrics, \
|
||||
render_close_types
|
||||
from frontend.visualization.backtesting_metrics import render_accuracy_metrics, render_backtesting_metrics, render_close_types
|
||||
from frontend.visualization.candles import get_candlestick_trace
|
||||
from frontend.visualization.indicators import get_bbands_traces, get_volume_trace
|
||||
from frontend.visualization.signals import get_bollinger_v1_signal_traces
|
||||
@@ -22,7 +20,6 @@ from frontend.visualization.utils import add_traces_to_fig
|
||||
initialize_st_page(title="Bollinger V1", icon="📈", initial_sidebar_state="expanded")
|
||||
backend_api_client = get_backend_api_client()
|
||||
|
||||
|
||||
st.text("This tool will let you create a config for Bollinger V1 and visualize the strategy.")
|
||||
get_default_config_loader("bollinger_v1")
|
||||
|
||||
@@ -32,7 +29,8 @@ st.session_state["default_config"].update(inputs)
|
||||
st.write("### Visualizing Bollinger Bands and Trading Signals")
|
||||
days_to_visualize = st.number_input("Days to Visualize", min_value=1, max_value=365, value=7)
|
||||
# Load candle data
|
||||
candles = get_candles(connector_name=inputs["candles_connector"], trading_pair=inputs["candles_trading_pair"], interval=inputs["interval"], days=days_to_visualize)
|
||||
candles = get_candles(connector_name=inputs["candles_connector"], trading_pair=inputs["candles_trading_pair"],
|
||||
interval=inputs["interval"], days=days_to_visualize)
|
||||
|
||||
# Create a subplot with 2 rows
|
||||
fig = make_subplots(rows=2, cols=1, shared_xaxes=True,
|
||||
@@ -41,7 +39,9 @@ fig = make_subplots(rows=2, cols=1, shared_xaxes=True,
|
||||
|
||||
add_traces_to_fig(fig, [get_candlestick_trace(candles)], row=1, col=1)
|
||||
add_traces_to_fig(fig, get_bbands_traces(candles, inputs["bb_length"], inputs["bb_std"]), row=1, col=1)
|
||||
add_traces_to_fig(fig, get_bollinger_v1_signal_traces(candles, inputs["bb_length"], inputs["bb_std"], inputs["bb_long_threshold"], inputs["bb_short_threshold"]), row=1, col=1)
|
||||
add_traces_to_fig(fig, get_bollinger_v1_signal_traces(candles, inputs["bb_length"], inputs["bb_std"],
|
||||
inputs["bb_long_threshold"], inputs["bb_short_threshold"]), row=1,
|
||||
col=1)
|
||||
add_traces_to_fig(fig, [get_volume_trace(candles)], row=2, col=1)
|
||||
|
||||
fig.update_layout(**theme.get_default_layout())
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import streamlit as st
|
||||
|
||||
from frontend.components.directional_trading_general_inputs import get_directional_trading_general_inputs
|
||||
from frontend.components.risk_management import get_risk_management_inputs
|
||||
|
||||
@@ -9,7 +10,8 @@ def user_inputs():
|
||||
bb_std = default_config.get("bb_std", 2.0)
|
||||
bb_long_threshold = default_config.get("bb_long_threshold", 0.0)
|
||||
bb_short_threshold = default_config.get("bb_short_threshold", 1.0)
|
||||
connector_name, trading_pair, leverage, total_amount_quote, max_executors_per_side, cooldown_time, position_mode, candles_connector_name, candles_trading_pair, interval = get_directional_trading_general_inputs()
|
||||
connector_name, trading_pair, leverage, total_amount_quote, max_executors_per_side, cooldown_time, position_mode, \
|
||||
candles_connector_name, candles_trading_pair, interval = get_directional_trading_general_inputs()
|
||||
sl, tp, time_limit, ts_ap, ts_delta, take_profit_order_type = get_risk_management_inputs()
|
||||
with st.expander("Bollinger Bands Configuration", expanded=True):
|
||||
c1, c2, c3, c4 = st.columns(4)
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
import streamlit as st
|
||||
import pandas as pd
|
||||
import plotly.graph_objects as go
|
||||
import streamlit as st
|
||||
import yaml
|
||||
from hummingbot.connector.connector_base import OrderType
|
||||
from plotly.subplots import make_subplots
|
||||
from pykalman import KalmanFilter
|
||||
|
||||
from CONFIG import BACKEND_API_HOST, BACKEND_API_PORT
|
||||
from backend.services.backend_api_client import BackendAPIClient
|
||||
from frontend.st_utils import initialize_st_page, get_backend_api_client
|
||||
from CONFIG import BACKEND_API_HOST, BACKEND_API_PORT
|
||||
from frontend.st_utils import get_backend_api_client, initialize_st_page
|
||||
|
||||
# Initialize the Streamlit page
|
||||
initialize_st_page(title="Kalman Filter V1", icon="📈", initial_sidebar_state="expanded")
|
||||
@@ -18,6 +19,7 @@ def get_candles(connector_name="binance", trading_pair="BTC-USDT", interval="1m"
|
||||
backend_client = BackendAPIClient(BACKEND_API_HOST, BACKEND_API_PORT)
|
||||
return backend_client.get_real_time_candles(connector_name, trading_pair, interval, max_records)
|
||||
|
||||
|
||||
@st.cache_data
|
||||
def add_indicators(df, observation_covariance=1, transition_covariance=0.01, initial_state_covariance=0.001):
|
||||
# Add Bollinger Bands
|
||||
@@ -61,7 +63,6 @@ with c3:
|
||||
with c4:
|
||||
max_records = st.number_input("Max Records", min_value=100, max_value=10000, value=1000)
|
||||
|
||||
|
||||
st.write("## Positions Configuration")
|
||||
c1, c2, c3, c4 = st.columns(4)
|
||||
with c1:
|
||||
@@ -87,28 +88,25 @@ with c1:
|
||||
with c2:
|
||||
transition_covariance = st.number_input("Transition Covariance", value=0.001, step=0.0001, format="%.4f")
|
||||
|
||||
|
||||
# Load candle data
|
||||
candle_data = get_candles(connector_name=candles_connector, trading_pair=candles_trading_pair, interval=interval, max_records=max_records)
|
||||
candle_data = get_candles(connector_name=candles_connector, trading_pair=candles_trading_pair, interval=interval,
|
||||
max_records=max_records)
|
||||
df = pd.DataFrame(candle_data)
|
||||
df.index = pd.to_datetime(df['timestamp'], unit='s')
|
||||
candles_processed = add_indicators(df, observation_covariance, transition_covariance)
|
||||
|
||||
|
||||
|
||||
# Prepare data for signals
|
||||
signals = candles_processed[candles_processed['signal'] != 0]
|
||||
buy_signals = signals[signals['signal'] == 1]
|
||||
sell_signals = signals[signals['signal'] == -1]
|
||||
|
||||
from plotly.subplots import make_subplots
|
||||
|
||||
# Define your color palette
|
||||
tech_colors = {
|
||||
'upper_band': '#4682B4', # Steel Blue for the Upper Bollinger Band
|
||||
'upper_band': '#4682B4', # Steel Blue for the Upper Bollinger Band
|
||||
'middle_band': '#FFD700', # Gold for the Middle Bollinger Band
|
||||
'lower_band': '#32CD32', # Green for the Lower Bollinger Band
|
||||
'buy_signal': '#1E90FF', # Dodger Blue for Buy Signals
|
||||
'lower_band': '#32CD32', # Green for the Lower Bollinger Band
|
||||
'buy_signal': '#1E90FF', # Dodger Blue for Buy Signals
|
||||
'sell_signal': '#FF0000', # Red for Sell Signals
|
||||
}
|
||||
|
||||
@@ -127,9 +125,15 @@ fig.add_trace(go.Candlestick(x=candles_processed.index,
|
||||
row=1, col=1)
|
||||
|
||||
# Bollinger Bands
|
||||
fig.add_trace(go.Scatter(x=candles_processed.index, y=candles_processed['kf_upper'], line=dict(color=tech_colors['upper_band']), name='Upper Band'), row=1, col=1)
|
||||
fig.add_trace(go.Scatter(x=candles_processed.index, y=candles_processed['kf'], line=dict(color=tech_colors['middle_band']), name='Middle Band'), row=1, col=1)
|
||||
fig.add_trace(go.Scatter(x=candles_processed.index, y=candles_processed['kf_lower'], line=dict(color=tech_colors['lower_band']), name='Lower Band'), row=1, col=1)
|
||||
fig.add_trace(
|
||||
go.Scatter(x=candles_processed.index, y=candles_processed['kf_upper'], line=dict(color=tech_colors['upper_band']),
|
||||
name='Upper Band'), row=1, col=1)
|
||||
fig.add_trace(
|
||||
go.Scatter(x=candles_processed.index, y=candles_processed['kf'], line=dict(color=tech_colors['middle_band']),
|
||||
name='Middle Band'), row=1, col=1)
|
||||
fig.add_trace(
|
||||
go.Scatter(x=candles_processed.index, y=candles_processed['kf_lower'], line=dict(color=tech_colors['lower_band']),
|
||||
name='Lower Band'), row=1, col=1)
|
||||
|
||||
# Signals plot
|
||||
fig.add_trace(go.Scatter(x=buy_signals.index, y=buy_signals['close'], mode='markers',
|
||||
@@ -140,7 +144,8 @@ fig.add_trace(go.Scatter(x=sell_signals.index, y=sell_signals['close'], mode='ma
|
||||
name='Sell Signal'), row=1, col=1)
|
||||
|
||||
fig.add_trace(go.Scatter(x=signals.index, y=signals['signal'], mode='markers',
|
||||
marker=dict(color=signals['signal'].map({1: tech_colors['buy_signal'], -1: tech_colors['sell_signal']}), size=10),
|
||||
marker=dict(color=signals['signal'].map(
|
||||
{1: tech_colors['buy_signal'], -1: tech_colors['sell_signal']}), size=10),
|
||||
showlegend=False), row=2, col=1)
|
||||
|
||||
# Update layout
|
||||
@@ -218,8 +223,7 @@ with c3:
|
||||
)
|
||||
upload_config_to_backend = st.button("Upload Config to BackendAPI")
|
||||
|
||||
|
||||
if upload_config_to_backend:
|
||||
backend_api_client = get_backend_api_client()
|
||||
backend_api_client.add_controller_config(config)
|
||||
st.success("Config uploaded successfully!")
|
||||
st.success("Config uploaded successfully!")
|
||||
|
||||
@@ -6,11 +6,10 @@ from frontend.components.config_loader import get_default_config_loader
|
||||
from frontend.components.save_config import render_save_config
|
||||
from frontend.pages.config.macd_bb_v1.user_inputs import user_inputs
|
||||
from frontend.pages.config.utils import get_candles
|
||||
from frontend.st_utils import initialize_st_page, get_backend_api_client
|
||||
from frontend.st_utils import get_backend_api_client, initialize_st_page
|
||||
from frontend.visualization import theme
|
||||
from frontend.visualization.backtesting import create_backtesting_figure
|
||||
from frontend.visualization.backtesting_metrics import render_backtesting_metrics, render_accuracy_metrics, \
|
||||
render_close_types
|
||||
from frontend.visualization.backtesting_metrics import render_accuracy_metrics, render_backtesting_metrics, render_close_types
|
||||
from frontend.visualization.candles import get_candlestick_trace
|
||||
from frontend.visualization.indicators import get_bbands_traces, get_macd_traces
|
||||
from frontend.visualization.signals import get_macdbb_v1_signal_traces
|
||||
@@ -25,11 +24,11 @@ get_default_config_loader("macd_bb_v1")
|
||||
inputs = user_inputs()
|
||||
st.session_state["default_config"].update(inputs)
|
||||
|
||||
|
||||
st.write("### Visualizing MACD Bollinger Trading Signals")
|
||||
days_to_visualize = st.number_input("Days to Visualize", min_value=1, max_value=365, value=7)
|
||||
# Load candle data
|
||||
candles = get_candles(connector_name=inputs["candles_connector"], trading_pair=inputs["candles_trading_pair"], interval=inputs["interval"], days=days_to_visualize)
|
||||
candles = get_candles(connector_name=inputs["candles_connector"], trading_pair=inputs["candles_trading_pair"],
|
||||
interval=inputs["interval"], days=days_to_visualize)
|
||||
|
||||
# Create a subplot with 2 rows
|
||||
fig = make_subplots(rows=2, cols=1, shared_xaxes=True,
|
||||
@@ -38,9 +37,12 @@ fig = make_subplots(rows=2, cols=1, shared_xaxes=True,
|
||||
add_traces_to_fig(fig, [get_candlestick_trace(candles)], row=1, col=1)
|
||||
add_traces_to_fig(fig, get_bbands_traces(candles, inputs["bb_length"], inputs["bb_std"]), row=1, col=1)
|
||||
add_traces_to_fig(fig, get_macdbb_v1_signal_traces(df=candles, bb_length=inputs["bb_length"], bb_std=inputs["bb_std"],
|
||||
bb_long_threshold=inputs["bb_long_threshold"], bb_short_threshold=inputs["bb_short_threshold"],
|
||||
macd_fast=inputs["macd_fast"], macd_slow=inputs["macd_slow"], macd_signal=inputs["macd_signal"]), row=1, col=1)
|
||||
add_traces_to_fig(fig, get_macd_traces(df=candles, macd_fast=inputs["macd_fast"], macd_slow=inputs["macd_slow"], macd_signal=inputs["macd_signal"]), row=2, col=1)
|
||||
bb_long_threshold=inputs["bb_long_threshold"],
|
||||
bb_short_threshold=inputs["bb_short_threshold"],
|
||||
macd_fast=inputs["macd_fast"], macd_slow=inputs["macd_slow"],
|
||||
macd_signal=inputs["macd_signal"]), row=1, col=1)
|
||||
add_traces_to_fig(fig, get_macd_traces(df=candles, macd_fast=inputs["macd_fast"], macd_slow=inputs["macd_slow"],
|
||||
macd_signal=inputs["macd_signal"]), row=2, col=1)
|
||||
|
||||
fig.update_layout(**theme.get_default_layout())
|
||||
# Use Streamlit's functionality to display the plot
|
||||
@@ -61,4 +63,3 @@ if bt_results:
|
||||
render_close_types(bt_results["results"])
|
||||
st.write("---")
|
||||
render_save_config(st.session_state["default_config"]["id"], st.session_state["default_config"])
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import streamlit as st
|
||||
|
||||
from frontend.components.directional_trading_general_inputs import get_directional_trading_general_inputs
|
||||
from frontend.components.risk_management import get_risk_management_inputs
|
||||
|
||||
@@ -12,7 +13,8 @@ def user_inputs():
|
||||
macd_fast = default_config.get("macd_fast", 21)
|
||||
macd_slow = default_config.get("macd_slow", 42)
|
||||
macd_signal = default_config.get("macd_signal", 9)
|
||||
connector_name, trading_pair, leverage, total_amount_quote, max_executors_per_side, cooldown_time, position_mode, candles_connector_name, candles_trading_pair, interval = get_directional_trading_general_inputs()
|
||||
connector_name, trading_pair, leverage, total_amount_quote, max_executors_per_side, cooldown_time, position_mode,\
|
||||
candles_connector_name, candles_trading_pair, interval = get_directional_trading_general_inputs()
|
||||
sl, tp, time_limit, ts_ap, ts_delta, take_profit_order_type = get_risk_management_inputs()
|
||||
with st.expander("MACD Bollinger Configuration", expanded=True):
|
||||
c1, c2, c3, c4, c5, c6, c7 = st.columns(7)
|
||||
|
||||
@@ -6,13 +6,12 @@ from frontend.components.config_loader import get_default_config_loader
|
||||
from frontend.components.save_config import render_save_config
|
||||
from frontend.pages.config.supertrend_v1.user_inputs import user_inputs
|
||||
from frontend.pages.config.utils import get_candles
|
||||
from frontend.st_utils import initialize_st_page, get_backend_api_client
|
||||
from frontend.st_utils import get_backend_api_client, initialize_st_page
|
||||
from frontend.visualization import theme
|
||||
from frontend.visualization.backtesting import create_backtesting_figure
|
||||
from frontend.visualization.backtesting_metrics import render_backtesting_metrics, render_accuracy_metrics, \
|
||||
render_close_types
|
||||
from frontend.visualization.backtesting_metrics import render_accuracy_metrics, render_backtesting_metrics, render_close_types
|
||||
from frontend.visualization.candles import get_candlestick_trace
|
||||
from frontend.visualization.indicators import get_volume_trace, get_supertrend_traces
|
||||
from frontend.visualization.indicators import get_supertrend_traces, get_volume_trace
|
||||
from frontend.visualization.signals import get_supertrend_v1_signal_traces
|
||||
from frontend.visualization.utils import add_traces_to_fig
|
||||
|
||||
@@ -28,7 +27,8 @@ st.session_state["default_config"].update(inputs)
|
||||
st.write("### Visualizing Supertrend Trading Signals")
|
||||
days_to_visualize = st.number_input("Days to Visualize", min_value=1, max_value=365, value=7)
|
||||
# Load candle data
|
||||
candles = get_candles(connector_name=inputs["candles_connector"], trading_pair=inputs["candles_trading_pair"], interval=inputs["interval"], days=days_to_visualize)
|
||||
candles = get_candles(connector_name=inputs["candles_connector"], trading_pair=inputs["candles_trading_pair"],
|
||||
interval=inputs["interval"], days=days_to_visualize)
|
||||
|
||||
# Create a subplot with 2 rows
|
||||
fig = make_subplots(rows=2, cols=1, shared_xaxes=True,
|
||||
@@ -36,7 +36,8 @@ fig = make_subplots(rows=2, cols=1, shared_xaxes=True,
|
||||
row_heights=[0.8, 0.2])
|
||||
add_traces_to_fig(fig, [get_candlestick_trace(candles)], row=1, col=1)
|
||||
add_traces_to_fig(fig, get_supertrend_traces(candles, inputs["length"], inputs["multiplier"]), row=1, col=1)
|
||||
add_traces_to_fig(fig, get_supertrend_v1_signal_traces(candles, inputs["length"], inputs["multiplier"], inputs["percentage_threshold"]), row=1, col=1)
|
||||
add_traces_to_fig(fig, get_supertrend_v1_signal_traces(candles, inputs["length"], inputs["multiplier"],
|
||||
inputs["percentage_threshold"]), row=1, col=1)
|
||||
add_traces_to_fig(fig, [get_volume_trace(candles)], row=2, col=1)
|
||||
|
||||
layout_settings = theme.get_default_layout()
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import streamlit as st
|
||||
|
||||
from frontend.components.directional_trading_general_inputs import get_directional_trading_general_inputs
|
||||
from frontend.components.risk_management import get_risk_management_inputs
|
||||
|
||||
@@ -8,7 +9,8 @@ def user_inputs():
|
||||
length = default_config.get("length", 20)
|
||||
multiplier = default_config.get("multiplier", 3.0)
|
||||
percentage_threshold = default_config.get("percentage_threshold", 0.5)
|
||||
connector_name, trading_pair, leverage, total_amount_quote, max_executors_per_side, cooldown_time, position_mode, candles_connector_name, candles_trading_pair, interval = get_directional_trading_general_inputs()
|
||||
connector_name, trading_pair, leverage, total_amount_quote, max_executors_per_side, cooldown_time, position_mode, \
|
||||
candles_connector_name, candles_trading_pair, interval = get_directional_trading_general_inputs()
|
||||
sl, tp, time_limit, ts_ap, ts_delta, take_profit_order_type = get_risk_management_inputs()
|
||||
|
||||
with st.expander("SuperTrend Configuration", expanded=True):
|
||||
|
||||
Reference in New Issue
Block a user