Portofolii gestionate de asimetrie: un ghid practic cu R

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(Acest articol a fost publicat pentru prima dată pe DataGeeekși cu amabilitate a contribuit la R-bloggeri). (Puteți raporta problema legată de conținutul acestei pagini aici)


Doriți să vă distribuiți conținutul pe R-bloggeri? dați clic aici dacă aveți un blog, sau aici dacă nu aveți.

Introducere

Construcția portofoliului se bazează adesea pe optimizarea variației medii sau pe modele factoriale. Cu toate acestea, cercetările recente subliniază importanța asimetrie— al treilea moment statistic — ca motor al rentabilității activelor. Activele cu profituri asemănătoare loteriei (asimetrie pozitivă ridicată) tind să fie supraprețuite, în timp ce activele distorsionate negativ sunt adesea sub prețuri. Un studiu de 66 de pagini demonstrează că portofoliile gestionate cu asimetrie depășesc în mod constant strategiile tradiționale, în special în orizonturi volatile, pe termen scurt.

De ce contează asimetria

  • Captează riscul final: Skewness măsoară asimetria în distribuțiile randamentului, dezvăluind dacă domină câștigurile sau pierderile extreme.
  • Relevanță comportamentală: Investitorii sunt atrași de activele asemănătoare loteriei, creând prețuri greșite sistematice.
  • Dovezi empirice: Portofoliile gestionate prin asimetrie oferă rate Sharpe mai mari, în special în timpul recesiunilor și regimurilor cu volatilitate ridicată.

Metodologie

Ideea de bază este simplă:

  1. Calculați asimetria rentabilității activelor pe un orizont scurt.
  2. Clasați activele în funcție de asimetrie.
  3. Merge lung primii doi, scurt cei doi de jos și tine restul.

Această regulă, deși simplă, este susținută de teste empirice extinse asupra anomaliilor, modelelor factoriale și ciclurilor macroeconomice.

Implementarea în R

Mai jos este o conductă reproductibilă folosind tidyverse, tidyquantși gt pentru a construi un portofoliu gestionat de asimetrie:

# Load required packages
library(tidyverse)
library(tidyquant)
library(timetk)
library(moments)
library(gt)

# 1. Define symbols
symbols <- c("BTC-USD", "GC=F", "QQQ", "IWM", "IEUR")

# 2. Download ~3 years of daily data
df <- tq_get(symbols,
             from = Sys.Date() - 1095,
             to   = Sys.Date(),
             get  = "stock.prices") %>%
  group_by(symbol) %>%
  mutate(ret = log(adjusted) - log(lag(adjusted))) %>%
  drop_na()

# 3. Split data: last 15 days as test set
split <- time_series_split(df, assess = 15, cumulative = TRUE)
train_data <- training(split)
test_data  <- testing(split)

# 4. Compute skewness directly on test horizon
skew_scores <-
  test_data %>%
  group_by(symbol) %>%
  summarise(skewness = moments::skewness(ret, na.rm = TRUE))

# 5. Assign portfolio positions
positions <- 
  skew_scores %>%
  mutate(position = case_when(
    rank(-skewness) <= 2 ~ "Long",   # top 2 skewness
    rank(skewness) <= 2  ~ "Short",  # bottom 2 skewness
    TRUE                 ~ "Hold"    # others
  ))

# 6. Display gt table
positions %>%
  # Convert skewness values to percentages
  mutate(skewness_pct = round(skewness * 100, 2)) %>%
  
  # Map asset symbols to human-readable names
  mutate(asset_name = case_when(
    symbol == "BTC-USD" ~ "Bitcoin",
    symbol == "GC=F"    ~ "Gold Futures",
    symbol == "IEUR"    ~ "Euro ETF",
    symbol == "IWM"     ~ "Russell 2000",
    symbol == "QQQ"     ~ "Nasdaq 100",
    TRUE ~ symbol
  )) %>%
  
  # Keep only relevant columns
  select(asset_name, skewness_pct, position) %>%
  
  # Create gt table
  gt() %>%
  
  # Add table header
  tab_header(title = "Skewness-Managed Portfolio (15-day Horizon)") %>%
  
  # Rename columns
  cols_label(asset_name = "Asset",
             skewness_pct = "Skewness (%)",
             position = "Portfolio Position") %>%
  
  # Make all column labels bold
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_column_labels(columns = everything())
  ) %>%
  
  # Align Asset column label to the left
  tab_style(
    style = cell_text(align = "left"),
    locations = cells_column_labels(columns = vars(asset_name))
  ) %>%
  
  # Apply background colors based on portfolio position
  tab_style(style = cell_fill(color = "green"),
            locations = cells_body(columns = vars(position), rows = position == "Long")) %>%
  tab_style(style = cell_fill(color = "red"),
            locations = cells_body(columns = vars(position), rows = position == "Short")) %>%
  tab_style(style = cell_fill(color = "gray"),
            locations = cells_body(columns = vars(position), rows = position == "Hold")) %>%
  
  # Center align Skewness (%) and Portfolio Position columns
  tab_style(style = cell_text(align = "center", weight = "bold"),
            locations = cells_body(columns = vars(skewness_pct, position))) %>%
  
  # Left align Asset column values
  tab_style(style = cell_text(align = "left"),
            locations = cells_body(columns = vars(asset_name))) %>%
  
  # Add white borders between all cells
  tab_style(style = cell_borders(sides = "all", color = "white", weight = px(2)),
            locations = cells_body(columns = everything()))

Concluzie

Portofoliile gestionate prin asimetrie oferă o modalitate solidă, bazată statistic, de a exploata asimetria rentabilității activelor. Deși regula este simplă, cercetarea subiacentă demonstrează eficacitatea acesteia în anomalii, regimuri macroeconomice și perioade de criză. Pentru strategiile pe termen scurt, de înaltă frecvență și de volatilitate ridicată, managementul asimetriei poate fi un plus puternic la setul de instrumente de construcție a portofoliului.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.