ESG Factor Long-Short North America Strategy
Log in to collectOnsite backtest IDE
Quant Buffet native backtest IDEEdit and run Quant Buffet Python for ESG Factor Long-Short North America Strategy in the browser. Results update live with equity, drawdown, and metrics charts. Allowed: backtest.data, backtest.engine, backtest.metrics, numpy, pandas. Define ASSETS and make_on_day(prices). Shortcut: Ctrl+Enter. API docs →
Quant Buffet syntax cheat sheet (copy / insert)
Paste these fragments into the editor. The sandbox rejects QuantConnect, os, and network libraries.
from __future__ import annotations
import numpy as np
import pandas as pd
from backtest.data import load_daily_prices
from backtest.engine import EngineConfig, PortfolioEngine
from backtest.metrics import compute_metricsASSETS = ["SPY", "QQQ", "TLT", "GLD", "BIL"]def make_on_day(prices: pd.DataFrame):
cols = [c for c in ASSETS if c in prices.columns]
sma = prices[cols].rolling(200, min_periods=200).mean()
state = {"last": None}
def on_day(engine: PortfolioEngine, dt: pd.Timestamp) -> None:
if sma.loc[dt].isna().all():
return
key = (dt.year, dt.month)
if state["last"] == key:
return
state["last"] = key
long = [
s for s in cols
if pd.notna(prices.at[dt, s]) and pd.notna(sma.at[dt, s])
and prices.at[dt, s] > sma.at[dt, s]
]
weights = {} if not long else {s: 1.0 / len(long) for s in long}
engine.set_target_weights(dt, weights)
ready = sma.dropna(how="all").index.min() if sma.notna().any().any() else None
return on_day, readyengine.set_target_weights(dt, {"SPY": 0.60, "BIL": 0.40})Live backtest performance
Export to your platform
Transform Quant Buffet lab code (ASSETS + make_on_day / PortfolioEngine) into native classes for a third-party IDE — then copy and paste.
# Generated from Quant Buffet → QuantConnect LEAN
# Strategy: ESG Factor Long-Short North America Strategy
# Detected pattern: Absolute momentum
# Source uses Quant Buffet lab APIs (ASSETS + make_on_day / PortfolioEngine).
# Review fees, data, and risk before live trading — educational export only.
from AlgorithmImports import *
class QuantBuffetExport(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2010, 1, 1)
self.SetCash(100000)
tickers = ["SPY", "TLT", "GLD", "BIL"]
self.symbols = []
for t in tickers:
if "-" in t: # crypto proxy e.g. BTC-USD
self.symbols.append(self.AddCrypto(t.replace("-USD", ""), Resolution.Daily).Symbol)
else:
self.symbols.append(self.AddEquity(t, Resolution.Daily).Symbol)
self.Schedule.On(
self.DateRules.MonthStart(self.symbols[0]),
self.TimeRules.AfterMarketOpen(self.symbols[0], 30),
self.Rebalance,
)
# Logic: Long assets with positive 252-day return; equal-weight; monthly.
def Rebalance(self):
# Pattern: abs_momentum — Long assets with positive 252-day return; equal-weight; monthly.
# Default: equal-weight. Port your make_on_day weights here via SetHoldings.
w = 1.0 / len(self.symbols) if self.symbols else 0.0
for symbol in self.symbols:
self.SetHoldings(symbol, w)
Exported code uses the platform’s native classes and libraries. Install dependencies in your third-party IDE, then run. Validate before live trading.
Academic paper
Where and When Does it Pay to Be Good? A Global Long-Term Analysis of ESG Investing
Gregor Dorfleitner; Sebastian Utz; Maximilian Wimmer
- DEUniversity of Regensburg
- DEUniversity of Augsburg
- ?University of Augsburg - Department of Statistics and Mathematical Economic Theory
- ?University of Regensburg - Department of Finance
- ?University Augsburg
- DEUniversity of Mannheim
- ?University of Mannheim - Finance Area
https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2311281

Strategy in a nutshell
The study uses Asset4 ESG scores, updated annually, to assess environmental, social, and governance performance of North American stocks (Canada and the US). Stocks priced below $1 are excluded. ESG scores are held constant until the next assessment. Returns are evaluated as abnormal returns using the Daniel et al. (1997) methodology, which accounts for risk factors like size, book-to-market ratio, and momentum by matching each stock to a 4×4 benchmark portfolio with similar characteristics.
Stocks are ranked monthly by their E, S, and G scores. The strategy involves going long on the top 20% and short on the bottom 20% of each score, creating three individual strategies. These are combined into a single, equally-weighted strategy, rebalanced annually. This approach evaluates the impact of ESG factors on returns while controlling for key risk characteristics.
Economic rationale
Socially responsible investing (SRI) is gaining popularity, with increasing global investments driven by profit and non-profit motives. High ESG scores, reflecting sustainability and long-term viability, are linked to positive or zero abnormal returns in the short term for Europe and North America, and significant abnormal returns in the long run across all ESG categories—Environment, Social, and Governance. Firms with high ESG scores benefit from reduced regulatory fines, lower risk exposure, better management, and enhanced brand reputation. Additionally, customers may pay a premium for products from environmentally responsible firms. In the long term, strong corporate social performance translates into cost savings and unexpected high cash flows, making ESG-driven strategies financially advantageous.