Timeframe
5m
Direction
Long Only
Stoploss
-100.0%
Trailing Stop
No
ROI
0m: 10000.0%
Interface Version
3
Startup Candles
200
Indicators
0
freqtrade/freqtrade-strategies
author@: lenik
# user_data/strategies/PolusAdvancedVisualization.py
import numpy as np
import pandas as pd
from pandas import DataFrame
import plotly.graph_objects as go
from freqtrade.strategy import IStrategy
# Этот импорт теперь ГАРАНТИРОВАННО сработает,
# т.к. polus_levels.py лежит в той же папке.
from polus_levels import PolusLevels
class PolusAdvancedVisualization(IStrategy):
# ... (весь остальной код стратегии остается без изменений, как в моем позапрошлом сообщении)
"""
Продвинутая стратегия для визуализации индикатора Polus.
"""
INTERFACE_VERSION = 3
timeframe = '5m'
startup_candle_count = 200
minimal_roi = {"0": 100}
stoploss = -1.0
plot_config = {
'main_plot': {
'polus_high_base': {'color': 'steelblue', 'width': 2},
'polus_low_base': {'color': 'orangered', 'width': 2},
'polus_close_base': {'color': 'gray', 'width': 1, 'style': 'dot'},
}
}
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
polus = PolusLevels()
high_signals, low_signals, close_signals = polus.calculate_levels(dataframe)
dataframe['polus_high_signal'] = high_signals
dataframe['polus_low_signal'] = low_signals
dataframe['polus_high_base'] = pd.Series(high_signals, index=dataframe.index).ffill()
dataframe['polus_low_base'] = pd.Series(low_signals, index=dataframe.index).ffill()
dataframe['polus_close_base'] = pd.Series(close_signals, index=dataframe.index).ffill()
return dataframe
def custom_plot_additions(self, fig: go.Figure):
df = self.dp.get_analyzed_dataframe(self.processed)
active_high_levels = []
active_low_levels = []
for i in range(len(df)):
candle = df.iloc[i]
levels_to_remove = []
for level in active_high_levels:
if candle['high'] >= level['value']:
fig.add_shape(type="line",
x0=level['start_date'], y0=level['value'],
x1=candle['date'], y1=level['value'],
line=dict(color="blue", width=1, dash="dash"))
levels_to_remove.append(level)
if levels_to_remove:
active_high_levels = [lvl for lvl in active_high_levels if lvl not in levels_to_remove]
if pd.notna(candle['polus_high_signal']):
active_high_levels.append({
'value': candle['polus_high_signal'],
'start_date': candle['date']
})
levels_to_remove = []
for level in active_low_levels:
if candle['low'] <= level['value']:
fig.add_shape(type="line",
x0=level['start_date'], y0=level['value'],
x1=candle['date'], y1=level['value'],
line=dict(color="red", width=1, dash="dash"))
levels_to_remove.append(level)
if levels_to_remove:
active_low_levels = [lvl for lvl in active_low_levels if lvl not in levels_to_remove]
if pd.notna(candle['polus_low_signal']):
active_low_levels.append({
'value': candle['polus_low_signal'],
'start_date': candle['date']
})
last_date = df.iloc[-1]['date']
for level in active_high_levels:
fig.add_shape(type="line",
x0=level['start_date'], y0=level['value'],
x1=last_date, y1=level['value'],
line=dict(color="blue", width=1, dash="dash"))
for level in active_low_levels:
fig.add_shape(type="line",
x0=level['start_date'], y0=level['value'],
x1=last_date, y1=level['value'],
line=dict(color="red", width=1, dash="dash"))
return fig
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[:, 'enter_long'] = False
return dataframe
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[:, 'exit_long'] = False
return dataframe