Installation¶
At time of this tutorial, RAY support python <= 3.11, read more at Installation
In [ ]:
Copied!
!pip install "ray[tune,client]"
!pip install optuna
!pip install "ray[tune,client]"
!pip install optuna
Sample Strategy¶
In [1]:
Copied!
import talib.abstract as ta
from lettrade import DataFeed, Strategy, indicator as i
from lettrade.exchange.backtest import ForexBackTestAccount, let_backtest
# from lettrade.indicator.vendor.qtpylib import inject_indicators
# inject_indicators()
class SmaCross(Strategy):
ema1_window = 9
ema2_window = 21
def indicators(self, df: DataFeed):
df["ema1"] = ta.EMA(df, timeperiod=self.ema1_window)
df["ema2"] = ta.EMA(df, timeperiod=self.ema2_window)
# df["ema1"] = df.close.ema(window=self.ema1_window)
# df["ema2"] = df.close.ema(window=self.ema2_window)
df["signal_ema_crossover"] = i.crossover(df.ema1, df.ema2)
df["signal_ema_crossunder"] = i.crossunder(df.ema1, df.ema2)
def next(self, df: DataFeed):
if len(self.orders) > 0 or len(self.positions) > 0:
return
if df.l.signal_ema_crossover[-1]:
price = df.l.close[-1]
self.buy(size=0.1, sl=price - 0.001, tp=price + 0.001)
elif df.l.signal_ema_crossunder[-1]:
price = df.l.close[-1]
self.sell(size=0.1, sl=price + 0.001, tp=price - 0.001)
lt = let_backtest(
strategy=SmaCross,
datas="example/data/data/EURUSD_5m-0_10000.csv",
account=ForexBackTestAccount,
# plotter=None,
)
import talib.abstract as ta
from lettrade import DataFeed, Strategy, indicator as i
from lettrade.exchange.backtest import ForexBackTestAccount, let_backtest
# from lettrade.indicator.vendor.qtpylib import inject_indicators
# inject_indicators()
class SmaCross(Strategy):
ema1_window = 9
ema2_window = 21
def indicators(self, df: DataFeed):
df["ema1"] = ta.EMA(df, timeperiod=self.ema1_window)
df["ema2"] = ta.EMA(df, timeperiod=self.ema2_window)
# df["ema1"] = df.close.ema(window=self.ema1_window)
# df["ema2"] = df.close.ema(window=self.ema2_window)
df["signal_ema_crossover"] = i.crossover(df.ema1, df.ema2)
df["signal_ema_crossunder"] = i.crossunder(df.ema1, df.ema2)
def next(self, df: DataFeed):
if len(self.orders) > 0 or len(self.positions) > 0:
return
if df.l.signal_ema_crossover[-1]:
price = df.l.close[-1]
self.buy(size=0.1, sl=price - 0.001, tp=price + 0.001)
elif df.l.signal_ema_crossunder[-1]:
price = df.l.close[-1]
self.sell(size=0.1, sl=price + 0.001, tp=price - 0.001)
lt = let_backtest(
strategy=SmaCross,
datas="example/data/data/EURUSD_5m-0_10000.csv",
account=ForexBackTestAccount,
# plotter=None,
)
Optimize¶
In [2]:
Copied!
from ray import tune, train
from ray.tune.search.optuna import OptunaSearch
from lettrade.exchange.backtest.extra.ray import LetOptimizeRay
import logging
logging.getLogger("ray.tune.tune").setLevel(logging.WARNING)
letray = LetOptimizeRay()
lettrade_model = lt.optimize_model(dumper=letray.dumps)
def train_model(config, data):
params = {
"ema1_window": config["ema1_window"],
"ema2_window": config["ema2_window"],
}
# Model
result = lettrade_model(params, optimizer_kwargs=data)
# Score
return {"score": result["equity"]}
search_space = {
"ema1_window": tune.qrandint(5, 25, q=1),
"ema2_window": tune.qrandint(10, 50, q=1),
}
algo = OptunaSearch()
# algo = tune.search.ConcurrencyLimiter(algo, max_concurrent=4)
tuner = tune.Tuner(
tune.with_parameters(train_model, data=letray.data),
tune_config=tune.TuneConfig(
metric="score",
mode="max",
search_alg=algo,
num_samples=100,
),
# run_config=train.RunConfig(verbose=0),
param_space=search_space,
)
results = tuner.fit()
lt.optimize_done()
from ray import tune, train
from ray.tune.search.optuna import OptunaSearch
from lettrade.exchange.backtest.extra.ray import LetOptimizeRay
import logging
logging.getLogger("ray.tune.tune").setLevel(logging.WARNING)
letray = LetOptimizeRay()
lettrade_model = lt.optimize_model(dumper=letray.dumps)
def train_model(config, data):
params = {
"ema1_window": config["ema1_window"],
"ema2_window": config["ema2_window"],
}
# Model
result = lettrade_model(params, optimizer_kwargs=data)
# Score
return {"score": result["equity"]}
search_space = {
"ema1_window": tune.qrandint(5, 25, q=1),
"ema2_window": tune.qrandint(10, 50, q=1),
}
algo = OptunaSearch()
# algo = tune.search.ConcurrencyLimiter(algo, max_concurrent=4)
tuner = tune.Tuner(
tune.with_parameters(train_model, data=letray.data),
tune_config=tune.TuneConfig(
metric="score",
mode="max",
search_alg=algo,
num_samples=100,
),
# run_config=train.RunConfig(verbose=0),
param_space=search_space,
)
results = tuner.fit()
lt.optimize_done()
Tune Status
Current time: | 2024-07-02 16:48:55 |
Running for: | 00:01:25.86 |
Memory: | 14.0/62.7 GiB |
System Info
Using FIFO scheduling algorithm.Logical resource usage: 1.0/32 CPUs, 0/1 GPUs (0.0/1.0 accelerator_type:G)
Trial Status
Trial name | status | loc | ema1_window | ema2_window | iter | total time (s) | score |
---|---|---|---|---|---|---|---|
train_model_55743415 | TERMINATED | 192.168.1.84:79825 | 11 | 24 | 1 | 0.637616 | 9826.06 |
train_model_4c51f7e1 | TERMINATED | 192.168.1.84:79961 | 12 | 34 | 1 | 0.448534 | 9906.02 |
train_model_643f1ae7 | TERMINATED | 192.168.1.84:80036 | 18 | 29 | 1 | 0.440765 | 9916.62 |
train_model_79c1bb7f | TERMINATED | 192.168.1.84:80104 | 8 | 50 | 1 | 0.434781 | 9941.58 |
train_model_9fe0bd0d | TERMINATED | 192.168.1.84:80174 | 24 | 37 | 1 | 0.424471 | 9927.86 |
train_model_58b3f40f | TERMINATED | 192.168.1.84:80244 | 13 | 47 | 1 | 0.443487 | 9998.88 |
train_model_7ea648df | TERMINATED | 192.168.1.84:80345 | 11 | 13 | 1 | 0.510855 | 9829.46 |
train_model_5660b7e7 | TERMINATED | 192.168.1.84:80415 | 9 | 22 | 1 | 0.467541 | 9986.2 |
train_model_4286e034 | TERMINATED | 192.168.1.84:80483 | 17 | 12 | 1 | 0.488315 | 10000.5 |
train_model_e16bc466 | TERMINATED | 192.168.1.84:80550 | 21 | 46 | 1 | 0.416199 | 9964.46 |
train_model_0c5db4a5 | TERMINATED | 192.168.1.84:80617 | 16 | 15 | 1 | 0.492985 | 10049.8 |
train_model_3a53678d | TERMINATED | 192.168.1.84:80686 | 5 | 10 | 1 | 0.532405 | 9893.26 |
train_model_31416d2b | TERMINATED | 192.168.1.84:80760 | 16 | 10 | 1 | 0.51757 | 10134.1 |
train_model_29259c76 | TERMINATED | 192.168.1.84:80827 | 16 | 17 | 1 | 0.467902 | 9807.88 |
train_model_6fac2189 | TERMINATED | 192.168.1.84:80894 | 16 | 18 | 1 | 0.466099 | 9806.22 |
train_model_d2972224 | TERMINATED | 192.168.1.84:80961 | 20 | 18 | 1 | 0.453322 | 10074.9 |
train_model_6289ad36 | TERMINATED | 192.168.1.84:81028 | 20 | 18 | 1 | 0.184548 | 10074.9 |
train_model_0e3e9129 | TERMINATED | 192.168.1.84:81096 | 20 | 24 | 1 | 0.443469 | 9975.92 |
train_model_d04890cf | TERMINATED | 192.168.1.84:81166 | 25 | 25 | 1 | 0.342898 | 10000 |
train_model_7dc71744 | TERMINATED | 192.168.1.84:81238 | 25 | 29 | 1 | 0.428242 | 9879.18 |
train_model_6a188b37 | TERMINATED | 192.168.1.84:81306 | 22 | 10 | 1 | 0.467271 | 10030.5 |
train_model_7a1a961e | TERMINATED | 192.168.1.84:81373 | 22 | 20 | 1 | 0.459388 | 9924.48 |
train_model_acfe6c01 | TERMINATED | 192.168.1.84:81439 | 19 | 19 | 1 | 0.31374 | 10000 |
train_model_99e14f2b | TERMINATED | 192.168.1.84:81506 | 19 | 15 | 1 | 0.468928 | 10162.7 |
train_model_d5a10ee2 | TERMINATED | 192.168.1.84:81579 | 14 | 15 | 1 | 0.495306 | 9986.24 |
train_model_9cf15d0c | TERMINATED | 192.168.1.84:81649 | 14 | 15 | 1 | 0.181672 | 9986.24 |
train_model_26302de9 | TERMINATED | 192.168.1.84:81716 | 18 | 14 | 1 | 0.464261 | 10110.8 |
train_model_51b2cb9a | TERMINATED | 192.168.1.84:81782 | 18 | 10 | 1 | 0.462631 | 10042.6 |
train_model_d578e3a0 | TERMINATED | 192.168.1.84:81848 | 18 | 12 | 1 | 0.475117 | 10001.6 |
train_model_1b7fd95b | TERMINATED | 192.168.1.84:81914 | 23 | 13 | 1 | 0.458641 | 10163.5 |
train_model_da8f0737 | TERMINATED | 192.168.1.84:81984 | 15 | 22 | 1 | 0.458092 | 9894.4 |
train_model_e483dcdd | TERMINATED | 192.168.1.84:82053 | 23 | 26 | 1 | 0.460874 | 9936.64 |
train_model_8d9aac2d | TERMINATED | 192.168.1.84:82120 | 23 | 14 | 1 | 0.46056 | 10095.3 |
train_model_2dff0490 | TERMINATED | 192.168.1.84:82186 | 22 | 13 | 1 | 0.455049 | 10142.8 |
train_model_39f0a065 | TERMINATED | 192.168.1.84:82256 | 17 | 34 | 1 | 0.449305 | 9936.44 |
train_model_e3321428 | TERMINATED | 192.168.1.84:82322 | 22 | 12 | 1 | 0.482713 | 10162.5 |
train_model_433af6cc | TERMINATED | 192.168.1.84:82408 | 21 | 21 | 1 | 0.321038 | 10000 |
train_model_93f5670b | TERMINATED | 192.168.1.84:82474 | 23 | 21 | 1 | 0.469419 | 9994.12 |
train_model_f93b93e6 | TERMINATED | 192.168.1.84:82541 | 24 | 16 | 1 | 0.447872 | 10015 |
train_model_2fc63866 | TERMINATED | 192.168.1.84:82610 | 24 | 41 | 1 | 0.415852 | 9994.72 |
train_model_678a9370 | TERMINATED | 192.168.1.84:82677 | 22 | 33 | 1 | 0.431021 | 9870.52 |
train_model_b78df0b4 | TERMINATED | 192.168.1.84:82743 | 22 | 33 | 1 | 0.191001 | 9870.52 |
train_model_d6adc81f | TERMINATED | 192.168.1.84:82814 | 21 | 12 | 1 | 0.45418 | 10091.2 |
train_model_aa60956d | TERMINATED | 192.168.1.84:82895 | 19 | 12 | 1 | 0.471549 | 10000.1 |
train_model_b4339ad6 | TERMINATED | 192.168.1.84:82980 | 19 | 12 | 1 | 0.184481 | 10000.1 |
train_model_6a7920d0 | TERMINATED | 192.168.1.84:83049 | 12 | 10 | 1 | 0.485442 | 10131.9 |
train_model_21f78e6c | TERMINATED | 192.168.1.84:83115 | 11 | 10 | 1 | 0.500057 | 10170.2 |
train_model_7937dc11 | TERMINATED | 192.168.1.84:83185 | 21 | 16 | 1 | 0.454165 | 10075 |
train_model_41233166 | TERMINATED | 192.168.1.84:83252 | 10 | 16 | 1 | 0.521218 | 9852.9 |
train_model_867dad6c | TERMINATED | 192.168.1.84:83342 | 6 | 13 | 1 | 0.500573 | 9966.14 |
train_model_cbae05c1 | TERMINATED | 192.168.1.84:83409 | 8 | 13 | 1 | 0.511827 | 9824.86 |
train_model_6e71478b | TERMINATED | 192.168.1.84:83479 | 7 | 38 | 1 | 0.441959 | 9876 |
train_model_be758d20 | TERMINATED | 192.168.1.84:83546 | 12 | 10 | 1 | 0.184045 | 10131.9 |
train_model_fd51b354 | TERMINATED | 192.168.1.84:83614 | 13 | 11 | 1 | 0.484704 | 10156.7 |
train_model_fbbdf067 | TERMINATED | 192.168.1.84:83681 | 17 | 11 | 1 | 0.471289 | 10052.5 |
train_model_74094543 | TERMINATED | 192.168.1.84:83747 | 10 | 17 | 1 | 0.471173 | 9913.02 |
train_model_81d62ed4 | TERMINATED | 192.168.1.84:83816 | 11 | 14 | 1 | 0.476621 | 9822.72 |
train_model_6cb6abfd | TERMINATED | 192.168.1.84:83886 | 13 | 14 | 1 | 0.473898 | 9933.94 |
train_model_789b4b58 | TERMINATED | 192.168.1.84:83953 | 13 | 19 | 1 | 0.462258 | 9857.54 |
train_model_6540cab7 | TERMINATED | 192.168.1.84:84022 | 25 | 19 | 1 | 0.472173 | 9974.12 |
train_model_91a343ed | TERMINATED | 192.168.1.84:84089 | 10 | 11 | 1 | 0.493807 | 9795.02 |
train_model_55a7bdd3 | TERMINATED | 192.168.1.84:84155 | 20 | 11 | 1 | 0.493866 | 9961.8 |
train_model_f7bfd256 | TERMINATED | 192.168.1.84:84222 | 15 | 11 | 1 | 0.472739 | 10074.1 |
train_model_cb0c2e52 | TERMINATED | 192.168.1.84:84289 | 14 | 13 | 1 | 0.483317 | 10052.7 |
train_model_4f727d0d | TERMINATED | 192.168.1.84:84355 | 23 | 14 | 1 | 0.180439 | 10095.3 |
train_model_96f3c396 | TERMINATED | 192.168.1.84:84422 | 23 | 17 | 1 | 0.509425 | 10015.2 |
train_model_e9a57ca8 | TERMINATED | 192.168.1.84:84492 | 16 | 17 | 1 | 0.183345 | 9807.88 |
train_model_a06fe6a9 | TERMINATED | 192.168.1.84:84559 | 16 | 15 | 1 | 0.179357 | 10049.8 |
train_model_2ef37cd2 | TERMINATED | 192.168.1.84:84626 | 12 | 49 | 1 | 0.443771 | 9989.02 |
train_model_97af22b6 | TERMINATED | 192.168.1.84:84695 | 21 | 49 | 1 | 0.421803 | 10022.3 |
train_model_1cdc6b7c | TERMINATED | 192.168.1.84:84762 | 24 | 10 | 1 | 0.492393 | 10112.5 |
train_model_4e751e1a | TERMINATED | 192.168.1.84:84831 | 13 | 27 | 1 | 0.457857 | 9934.96 |
train_model_2f81a7af | TERMINATED | 192.168.1.84:84900 | 11 | 10 | 1 | 0.179984 | 10170.2 |
train_model_f740bcc8 | TERMINATED | 192.168.1.84:84969 | 11 | 10 | 1 | 0.177011 | 10170.2 |
train_model_7e0b27b8 | TERMINATED | 192.168.1.84:85036 | 11 | 12 | 1 | 0.478946 | 9819.04 |
train_model_05bfbb43 | TERMINATED | 192.168.1.84:85103 | 9 | 12 | 1 | 0.483698 | 9824.98 |
train_model_377b1237 | TERMINATED | 192.168.1.84:85169 | 9 | 13 | 1 | 0.479618 | 9833.88 |
train_model_2ddba0ad | TERMINATED | 192.168.1.84:85236 | 9 | 13 | 1 | 0.193368 | 9833.88 |
train_model_8b5688ce | TERMINATED | 192.168.1.84:85307 | 11 | 15 | 1 | 0.483146 | 9913.08 |
train_model_8662ed62 | TERMINATED | 192.168.1.84:85374 | 11 | 15 | 1 | 0.180817 | 9913.08 |
train_model_229edeec | TERMINATED | 192.168.1.84:85440 | 10 | 11 | 1 | 0.181036 | 9795.02 |
train_model_3fd1231b | TERMINATED | 192.168.1.84:85507 | 12 | 11 | 1 | 0.497288 | 10146.8 |
train_model_d7cb19df | TERMINATED | 192.168.1.84:85575 | 12 | 10 | 1 | 0.178814 | 10131.9 |
train_model_26381ca4 | TERMINATED | 192.168.1.84:85657 | 12 | 10 | 1 | 0.185745 | 10131.9 |
train_model_cb0ed8d3 | TERMINATED | 192.168.1.84:85726 | 13 | 11 | 1 | 0.186156 | 10156.7 |
train_model_3782bd9c | TERMINATED | 192.168.1.84:85793 | 13 | 12 | 1 | 0.480543 | 10143.6 |
train_model_b245379f | TERMINATED | 192.168.1.84:85864 | 14 | 11 | 1 | 0.488566 | 10163.7 |
train_model_cffd7a8f | TERMINATED | 192.168.1.84:85930 | 15 | 14 | 1 | 0.483354 | 10000.8 |
train_model_41299cff | TERMINATED | 192.168.1.84:86002 | 14 | 43 | 1 | 0.421424 | 9961.9 |
train_model_b186e904 | TERMINATED | 192.168.1.84:86070 | 13 | 11 | 1 | 0.180952 | 10156.7 |
train_model_e241eb6a | TERMINATED | 192.168.1.84:86136 | 14 | 11 | 1 | 0.184628 | 10163.7 |
train_model_83419dd1 | TERMINATED | 192.168.1.84:86206 | 14 | 13 | 1 | 0.174241 | 10052.7 |
train_model_598aa0e6 | TERMINATED | 192.168.1.84:86279 | 14 | 12 | 1 | 0.477243 | 10053.9 |
train_model_173cf259 | TERMINATED | 192.168.1.84:86346 | 14 | 12 | 1 | 0.179354 | 10053.9 |
train_model_019501da | TERMINATED | 192.168.1.84:86419 | 15 | 10 | 1 | 0.474936 | 10113.7 |
train_model_b2f55ede | TERMINATED | 192.168.1.84:86486 | 15 | 10 | 1 | 0.180315 | 10113.7 |
train_model_b99278b0 | TERMINATED | 192.168.1.84:86552 | 15 | 16 | 1 | 0.480505 | 9938 |
train_model_22470f5e | TERMINATED | 192.168.1.84:86623 | 13 | 16 | 1 | 0.463556 | 9986.14 |
train_model_57561380 | TERMINATED | 192.168.1.84:86689 | 13 | 14 | 1 | 0.187564 | 9933.94 |
train_model_15ad88b7 | TERMINATED | 192.168.1.84:86757 | 11 | 14 | 1 | 0.172573 | 9822.72 |
Plot¶
In [3]:
Copied!
lt.plotter.heatmap(x="ema1_window", y="ema2_window", z="equity")
lt.plotter.heatmap(x="ema1_window", y="ema2_window", z="equity")
In [4]:
Copied!
lt.plotter.contour(x="ema1_window", y="ema2_window", z="equity")
lt.plotter.contour(x="ema1_window", y="ema2_window", z="equity")
Init Plotly environment¶
In [5]:
Copied!
import plotly.io as pio
pio.renderers.default = "notebook"
pio.templates.default = "plotly_dark"
import plotly.io as pio
pio.renderers.default = "notebook"
pio.templates.default = "plotly_dark"
In [6]:
Copied!
df = results.get_dataframe()
df
df = results.get_dataframe()
df
Out[6]:
score | timestamp | checkpoint_dir_name | done | training_iteration | trial_id | date | time_this_iter_s | time_total_s | pid | hostname | node_ip | time_since_restore | iterations_since_restore | config/ema1_window | config/ema2_window | logdir | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 9826.06 | 1719913651 | None | False | 1 | 55743415 | 2024-07-02_16-47-31 | 0.637616 | 0.637616 | 79825 | pc | 192.168.1.84 | 0.637616 | 1 | 11 | 24 | 55743415 |
1 | 9906.02 | 1719913652 | None | False | 1 | 4c51f7e1 | 2024-07-02_16-47-32 | 0.448534 | 0.448534 | 79961 | pc | 192.168.1.84 | 0.448534 | 1 | 12 | 34 | 4c51f7e1 |
2 | 9916.62 | 1719913653 | None | False | 1 | 643f1ae7 | 2024-07-02_16-47-33 | 0.440765 | 0.440765 | 80036 | pc | 192.168.1.84 | 0.440765 | 1 | 18 | 29 | 643f1ae7 |
3 | 9941.58 | 1719913653 | None | False | 1 | 79c1bb7f | 2024-07-02_16-47-33 | 0.434781 | 0.434781 | 80104 | pc | 192.168.1.84 | 0.434781 | 1 | 8 | 50 | 79c1bb7f |
4 | 9927.86 | 1719913654 | None | False | 1 | 9fe0bd0d | 2024-07-02_16-47-34 | 0.424471 | 0.424471 | 80174 | pc | 192.168.1.84 | 0.424471 | 1 | 24 | 37 | 9fe0bd0d |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 10113.68 | 1719913732 | None | False | 1 | b2f55ede | 2024-07-02_16-48-52 | 0.180315 | 0.180315 | 86486 | pc | 192.168.1.84 | 0.180315 | 1 | 15 | 10 | b2f55ede |
96 | 9938.00 | 1719913733 | None | False | 1 | b99278b0 | 2024-07-02_16-48-53 | 0.480505 | 0.480505 | 86552 | pc | 192.168.1.84 | 0.480505 | 1 | 15 | 16 | b99278b0 |
97 | 9986.14 | 1719913734 | None | False | 1 | 22470f5e | 2024-07-02_16-48-54 | 0.463556 | 0.463556 | 86623 | pc | 192.168.1.84 | 0.463556 | 1 | 13 | 16 | 22470f5e |
98 | 9933.94 | 1719913735 | None | False | 1 | 57561380 | 2024-07-02_16-48-55 | 0.187564 | 0.187564 | 86689 | pc | 192.168.1.84 | 0.187564 | 1 | 13 | 14 | 57561380 |
99 | 9822.72 | 1719913735 | None | False | 1 | 15ad88b7 | 2024-07-02_16-48-55 | 0.172573 | 0.172573 | 86757 | pc | 192.168.1.84 | 0.172573 | 1 | 11 | 14 | 15ad88b7 |
100 rows × 17 columns
In [7]:
Copied!
import pandas as pd
df.rename(
columns={
"config/ema1_window": "ema1_window",
"config/ema2_window": "ema2_window",
},
inplace=True,
)
df
import pandas as pd
df.rename(
columns={
"config/ema1_window": "ema1_window",
"config/ema2_window": "ema2_window",
},
inplace=True,
)
df
Out[7]:
score | timestamp | checkpoint_dir_name | done | training_iteration | trial_id | date | time_this_iter_s | time_total_s | pid | hostname | node_ip | time_since_restore | iterations_since_restore | ema1_window | ema2_window | logdir | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 9826.06 | 1719913651 | None | False | 1 | 55743415 | 2024-07-02_16-47-31 | 0.637616 | 0.637616 | 79825 | pc | 192.168.1.84 | 0.637616 | 1 | 11 | 24 | 55743415 |
1 | 9906.02 | 1719913652 | None | False | 1 | 4c51f7e1 | 2024-07-02_16-47-32 | 0.448534 | 0.448534 | 79961 | pc | 192.168.1.84 | 0.448534 | 1 | 12 | 34 | 4c51f7e1 |
2 | 9916.62 | 1719913653 | None | False | 1 | 643f1ae7 | 2024-07-02_16-47-33 | 0.440765 | 0.440765 | 80036 | pc | 192.168.1.84 | 0.440765 | 1 | 18 | 29 | 643f1ae7 |
3 | 9941.58 | 1719913653 | None | False | 1 | 79c1bb7f | 2024-07-02_16-47-33 | 0.434781 | 0.434781 | 80104 | pc | 192.168.1.84 | 0.434781 | 1 | 8 | 50 | 79c1bb7f |
4 | 9927.86 | 1719913654 | None | False | 1 | 9fe0bd0d | 2024-07-02_16-47-34 | 0.424471 | 0.424471 | 80174 | pc | 192.168.1.84 | 0.424471 | 1 | 24 | 37 | 9fe0bd0d |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 10113.68 | 1719913732 | None | False | 1 | b2f55ede | 2024-07-02_16-48-52 | 0.180315 | 0.180315 | 86486 | pc | 192.168.1.84 | 0.180315 | 1 | 15 | 10 | b2f55ede |
96 | 9938.00 | 1719913733 | None | False | 1 | b99278b0 | 2024-07-02_16-48-53 | 0.480505 | 0.480505 | 86552 | pc | 192.168.1.84 | 0.480505 | 1 | 15 | 16 | b99278b0 |
97 | 9986.14 | 1719913734 | None | False | 1 | 22470f5e | 2024-07-02_16-48-54 | 0.463556 | 0.463556 | 86623 | pc | 192.168.1.84 | 0.463556 | 1 | 13 | 16 | 22470f5e |
98 | 9933.94 | 1719913735 | None | False | 1 | 57561380 | 2024-07-02_16-48-55 | 0.187564 | 0.187564 | 86689 | pc | 192.168.1.84 | 0.187564 | 1 | 13 | 14 | 57561380 |
99 | 9822.72 | 1719913735 | None | False | 1 | 15ad88b7 | 2024-07-02_16-48-55 | 0.172573 | 0.172573 | 86757 | pc | 192.168.1.84 | 0.172573 | 1 | 11 | 14 | 15ad88b7 |
100 rows × 17 columns
Type 1¶
In [8]:
Copied!
from plotly import express as px
fig = px.scatter(df, x=df.index, y="score")
fig.show()
from plotly import express as px
fig = px.scatter(df, x=df.index, y="score")
fig.show()
Type 2¶
In [9]:
Copied!
import plotly.express as px
fig = px.density_contour(
df,
x="ema1_window",
y="ema2_window",
z="score",
histfunc="max",
)
fig.update_traces(contours_coloring="fill", contours_showlabels=True)
fig.show()
import plotly.express as px
fig = px.density_contour(
df,
x="ema1_window",
y="ema2_window",
z="score",
histfunc="max",
)
fig.update_traces(contours_coloring="fill", contours_showlabels=True)
fig.show()
Type 3¶
In [10]:
Copied!
import plotly.express as px
fig = px.density_heatmap(
df,
x="ema1_window",
y="ema2_window",
z="score",
nbinsx=20,
nbinsy=40,
histfunc="max",
color_continuous_scale="Viridis",
)
fig.show()
import plotly.express as px
fig = px.density_heatmap(
df,
x="ema1_window",
y="ema2_window",
z="score",
nbinsx=20,
nbinsy=40,
histfunc="max",
color_continuous_scale="Viridis",
)
fig.show()