From 28a5e6ecf3b0724cd9c9f4c99d224cd3be66c5df Mon Sep 17 00:00:00 2001 From: David Brazda Date: Thu, 24 Oct 2024 12:32:16 +0200 Subject: [PATCH] update --- image.png | Bin 0 -> 102263 bytes pandas-snippets.md | 9 ++ vbt-snippets.md | 240 +++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 240 insertions(+), 9 deletions(-) create mode 100644 image.png create mode 100644 pandas-snippets.md diff --git a/image.png b/image.png new file mode 100644 index 0000000000000000000000000000000000000000..26692815db0612ac857beb6c00696dd7cee0d4e7 GIT binary patch literal 102263 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 W)5m1dz`=C~_~>0VxPrfYC;C6MP~?aJ literal 0 HcmV?d00001 diff --git a/pandas-snippets.md b/pandas-snippets.md new file mode 100644 index 0000000..b580191 --- /dev/null +++ b/pandas-snippets.md @@ -0,0 +1,9 @@ +- [Basics](#basics) + +# Basics + +```python +df.loc[:, "D"] = np.array([5] * len(df)) +df.loc[:, ["A", "B"]] +df.sort_index(axis=1, ascending=False) #axis=1 sort columns by labels, axis=0 sort by index +``` diff --git a/vbt-snippets.md b/vbt-snippets.md index 331ef6b..916f446 100644 --- a/vbt-snippets.md +++ b/vbt-snippets.md @@ -1,7 +1,7 @@ - [DEBUGGING](#debugging) - [FETCHING DATA](#fetching-data) - [REINDEX to main session](#reindex-to-main-session) - - [indexing](#indexing) + - [Smart indexing](#smart-indexing) - [Data manipulation](#data-manipulation) - [DISCOVERY](#discovery) - [DATA/WRAPPER](#datawrapper) @@ -37,7 +37,15 @@ - [Staticization](#staticization) - [Grouping](#grouping) - [Portfolio analysis](#portfolio-analysis) - - [Changing year freq for stocks](#changing-year-freq-for-stocks) + - [pf.trades analysis](#pftrades-analysis) + - [PnL by hour of the day (BOXPLOT)](#pnl-by-hour-of-the-day-boxplot) + - [PF resampling](#pf-resampling) + - [PF Plotting](#pf-plotting) + - [Entries/exits visual analysis](#entriesexits-visual-analysis) + - [Configuration](#configuration) +- [Optimalization](#optimalization) + - [Param configuration](#param-configuration) + - [Pipeline](#pipeline) - [INDICATORS DEV](#indicators-dev) - [Custom ind](#custom-ind) - [register custom ind](#register-custom-ind) @@ -47,6 +55,7 @@ - [GROUPING](#grouping-1) - [SPLITTING](#splitting) - [CHARTING](#charting) + - [standard vbt plot](#standard-vbt-plot) - [MULTIACCOUNT](#multiaccount) - [CUSTOM SIMULATION](#custom-simulation) - [ANALYSIS](#analysis) @@ -54,7 +63,6 @@ - [UTILS](#utils) - [Market calendar](#market-calendar) - ```python import vectorbtpro as vbt from lightweight_charts import Panel, chart, PlotDFAccessor, PlotSRAccessor @@ -68,6 +76,13 @@ if not hasattr(pd.DataFrame, 'lw'): ``` # DEBUGGING + +```python +vbt.pprint(pf.entry_trades) #pretty print of instance +vbt.pdir(pf.entry_trades) #available methods/properties +vbt.phelp(ollcov.run) #input/output attribnuttes of the method +``` + prints which arguments are being passed to apply_func. ```python @@ -146,10 +161,12 @@ testData = vbt.YFData.fetch(['MSFT'], start=start, end=end, timeframe=timeframe, # of market hours) testData = testData.transform(lambda x: x.reindex(market_klines)) ``` -## indexing +## Smart indexing ```python +signal.vbt.xloc["04-26-2024":"04-29-2024"].get() #pdseries or df timeindex +signal.vbt.xloc[("BAC", "04-26-2024"):("BAC","04-29-2024")].get() #multiindex +entries.vbt.xloc["04-16-2024"].get() #one day entries.vbt.xloc[slice("2024-08-01","2024-08-03")].obj.info() - data.xloc[slice("9:30","10:00")] #targeting only morning rush ``` @@ -644,6 +661,7 @@ pf = vbt.Portfolio.from_signals( short_exits=short_exits, size=1, size_type=vbt.pf_enums.SizeType.Amount # Value, Percent, TargetAmount + price="nextopen" #where the fill is happening. Default is "close" of current bar, can be also multiparameter vbt.Param(["close", "nextopen"]) sl_stop=0.3, tp_stop = 0.4, delta_format = vbt.pf_enums.DeltaFormat.Percent100, #(Absolute, Percent, Percent100, Target) @@ -700,6 +718,7 @@ cooldown_bars = 3 pf = vbt.Portfolio.from_signals( close=s12_data.close, + bm_close=data.data["SPY"].close, #explicit benchmark used in pf, ie. pf.plot_cum_returns().show() entries=long_entries_cln, exits=long_exits, short_entries=short_entries_cln, @@ -799,21 +818,204 @@ Grouping in [signal function](http://5.161.179.223:8000/vbt-doc/documentation/po # Portfolio analysis -``` +[Portfolio base doc](http://5.161.179.223:8000/vbt-doc/api/portfolio/base/) + +```python pf.orders.readable pf.entry_trades.readable pf.exit_trades.readable pf.trades.readable pf.positions.readable -pf.trade_history -``` +pf.trade_history #human readable df expanding trades with metrics -## Changing year freq for stocks +dd = pf.get_drawdowns().records_readable +dd[dd["Status"] == "Active"] #Recovered +pf.metrics #get available metrics and its short names&function + +#trades +vbt.pdir(pf.trades) # available methods/properties + +#orders +pf.orders.side_buy.count() # pf.order.attribute_value.COUNT() +pf.orders.stats(group_by=True) + +#daily returns +pf.daily_returns.sort_values([(2, 'BAC')], ascending=True) #sorting values in levels +pf.daily_returns.sort_values(pf.daily_returns.columns[0], ascending=True) #same with first level +pf.daily_returns.cumsum() +``` +## pf.trades analysis +[pf.trades.plot()](http://5.161.179.223:8000/vbt-doc/api/portfolio/trades/#vectorbtpro.portfolio.trades.Trades.plot) doc - various options. +```python +fig = pf.trades.plot() +fig.auto_rangebreaks() +fig.show() + +df = pf.trades.readable +``` +```python +df["Direction"].value_counts() #count of trades for each Direction +df.groupby("Direction")["PnL"].sum() #sum of pnl for each Direction (Short vs Long) .vbt.barplot() -to plot + +#daily PnL +df.groupby(df['Exit Index'].dt.date)['PnL'].sum().sort_index(ascending=False) #daily PnL + +#daily PnL for each Direction +df.groupby([df['Exit Index'].dt.date, 'Direction'])['PnL'].sum().sort_index(ascending=False) #daily PnL for each Direction +#same but unstack, wehere long/short values become columns - for better charting +df = df.groupby([df['Exit Index'].dt.date, 'Direction'])['PnL'].sum().sort_index(ascending=False).unstack() +#df.vbt.barplot() or +df.plot(kind="bar", stacked=True) + + +#hourly PnL for each Direction, by Exit +df = df.groupby([df['Exit Index'].dt.hour, 'Direction'])['PnL'].sum().sort_index(ascending=False).unstack() +#df.vbt.barplot() +df.plot(kind="bar", stacked=True) +``` + +```python +#PnL by Day of the Week and Direction +# Group by day of the week and direction, then sum PnL +pnl_by_day_and_direction_week = df.groupby([df['Exit Index'].dt.day_name(), 'Direction'])['PnL'].sum().unstack() +fig = pnl_by_day_and_direction_week.vbt.barplot() +fig.update_layout( + barmode='stack', # Stack/group/overlay/relative the bars + title='Profit by Day of the Week and Direction', + xaxis_title='Day of the Week', + yaxis_title='Cumulative Profit' +) +``` + +### PnL by hour of the day (BOXPLOT) +![alt text](image.png) +```python +a = df.groupby([df['Exit Index'].dt.day_name(), df['Exit Index'].dt.hour])['PnL'].sum().unstack() +fig = a.vbt.boxplot() +fig.update_layout( + #barmode='stack', # Stack/group/overlay/relative the bars + title='Profit by hour of the day', + xaxis_title='Hour of the day', + yaxis_title='Cumulative Profit' +) +``` + + +```python +##Profit/Loss (PnL) vs. Trade Duration +# Calculate trade duration in minutes +df['Trade Duration'] = (df['Exit Index'] - df['Entry Index']).dt.total_seconds() / 60 + +# Scatter plot of PnL vs Trade Duration +plt.style.use('dark_background') +colors = {'Short': 'lightcyan', 'Long': 'yellow'} +plt.scatter(df['Trade Duration'], df['PnL'], c=df['Direction'].map(colors)) + +# Adding labels and title +plt.title('Trade Duration vs. Profit/Loss') +plt.xlabel('Duration (Minutes)') +plt.ylabel('Profit/Loss') + +# Create a legend +handles = [plt.Line2D([0], [0], marker='o', color='w', label='Short', markerfacecolor='lightcyan', markersize=10), + plt.Line2D([0], [0], marker='o', color='w', label='Long', markerfacecolor='yellow', markersize=10)] +plt.legend(title='Type', handles=handles) + +plt.tight_layout() +plt.show() + +##Cumulative profits vs benchmark +pf.plot_cum_returns().show() + + +``` +## PF resampling +```python +monthly_returns = pf.returns_acc.resample("M").get() +daily_returns = pf.resample("D").returns #alternative +fig = monthly_returns.vbt.boxplot() #box plot of monthly returns +fig = monthly_returns.vbt.heatmap() #heatmap of time vs monthly returns +fig = monthly_returns.vbt.ts_heatmap() #heatmap of returns vs time + +``` + +## PF Plotting +```python +pf.plot_trade_signals().show() #plot long short entries/exits +pf.plot_cum_returns().show() #cum returns vs benchmark + +##whether returns are distirbuted normally +pf.returns.vbt.qqplot() + +#TRADES +pf.trades.plot_mae_returns().show()#MAE/MFE - identify max loss/profit during the trade +pf.trades.plot_expanding_mfe_returns().show() #expanding mea/mfe returns +``` +[Plot Edge ratio](http://5.161.179.223:8000/static/js/vbt/features/analysis/index.html#edge-ratio) `pf.trades.plot_running_edge_ratio()` + +## Entries/exits visual analysis + +```python +#display entry exits for visual analysis +import ttools as tts +trade_entries, trade_exits = tts.trades2entries_exits(pf) #helper to extract info from trades and orders with texts to markers (notext=True can be used) + +Panel( + ohlcv=(s12_data.ohlcv.data["BAC"],), + right=[(s12_data.close, "close", trade_entries, trade_exits)], + middle1=[(pf.returns.cumsum(), "returns")], + ).chart(precision=4) + +#or alternative display just markers with no text +trade_entries = pd.Series(index=pf.trades.readable["Entry Index"], dtype=bool, data=True) +trade_exits = pd.Series(index=pf.trades.readable["Exit Index"], dtype=bool, data=True) +#then call Panel same as above +``` + +## Configuration +Changing year freq for stocks ```python vbt.settings.returns.year_freq = pd.Timedelta(hours=6.5) * 252 ``` +# Optimalization + +## Param configuration + +```python +tp_stop = vbt.Param(tp_stop, condition="tp_stop > sl_stop") #conditional hyper parameters +``` +```python +tp_stop = vbt.Param(tp_stop, condition="tp_stop > sl_stop") #conditional hyper parameters +``` +## Pipeline +```python +bt.parameterized(merge_func="concat") +def sma_crossover_perf(data, fast_window, slow_window): + fast_sma = data.run("sma", fast_window, short_name="fast_sma") + slow_sma = data.run("sma", slow_window, short_name="slow_sma") + entries = fast_sma.real_crossed_above(slow_sma) + exits = fast_sma.real_crossed_below(slow_sma) + pf = vbt.Portfolio.from_signals( + data, entries, exits, direction="both") + return pf.sharpe_ratio + +#Let's test a grid of fast_window and slow_window combinations on one year of that data: + +perf = sma_crossover_perf( + data["2020":"2020"], + vbt.Param(np.arange(5, 50), condition="x < slow_window"), + vbt.Param(np.arange(5, 50)), + _execute_kwargs=dict( + show_progress=True, + clear_cache=50, + collect_garbage=50 + ) +) +perf +``` + # INDICATORS DEV ```python @@ -1140,6 +1342,26 @@ pane2 = Panel(....) ch = chart([pane1, pane2], size="s") ``` +## standard vbt plot + +```python +#skip gaps automatically +vbt.settings.plotting.auto_rangebreaks = True +vbt.settings.set_theme("dark") + +data.plot(symbol="SPY", yaxis=dict(type="log")).show() + +#skip non-business hours and weekends +fig = df.vbt.plot() +fig.update_xaxes( + rangebreaks=[ + dict(bounds=['sat', 'mon']), + dict(bounds=[16, 9.5], pattern='hour'), + + ] +) +``` + # MULTIACCOUNT Simultaneous LONG and short (hedging)