Lesson 7.4.7 · 60 min
Ethics: personal data, artificial intelligence and selling signals
A system that only trades for its owner barely touches other people's data. As soon as it has subscribers, an AI assistant or a paid signals channel, three frameworks come in: the GDPR, the EU AI Act and the rules on recommendations and advice. This lesson reads them in their primary sources, as they apply in the EU and Spain, pseudonymizes and erases data with code, computes which AI obligations apply today and simulates 2,000 signal channels with no skill at all to see how a brilliant track record comes out of them. It is not legal advice.
- Module
- 7.4 · Regulation, ethics and taxation
- Duration
- 60 min
- Prerequisites
- 2.5.4 · Deflated Sharpe Ratio and Probability of Backtest Overfitting (PBO), 4.4.5 · Secure credentials: environment variables, secret managers and least privilege, 6.7.3 · Responsible web scraping, 6.7.4 · Alternative data vendors and due diligence
- Author
- Jesús Cuesta
- Updated
Level 7 lessons
7.1 · Software engineering for trading
7.2 · Infrastructure and deployment
7.3 · MLOps for trading models
7.4 · Regulation, ethics and taxation
- 7.4.1 MiFID II: clients, suitability and algorithmic trading
- 7.4.2 ESMA and CFDs: leverage, close-out and negative balance
- 7.4.3 PRIIPs, the KID and US ETFs
- 7.4.4 MiCA after the transitional period: checking a provider in the registers
- 7.4.5 Market abuse: spoofing, layering and the bot that imitates them by accident
- 7.4.6 Trading taxes in Spain
- 7.4.7 Ethics: personal data, artificial intelligence and selling signals
7.5 · Quant career
7.6 · Final capstone
- 7.6.1 Capstone: common requirements, the panel's rubric and preparing the defense
- 7.6.2 Capstone C1: a multi-asset futures system, from forecast to paper account
- 7.6.3 Capstone C2: systematic options book, volatility surface and real-time Greeks
- 7.6.4 Capstone C3: stock and ETF portfolio with ML, HRP and Spanish taxation
- 7.6.5 Capstone C4: a research platform with LLMs and alternative data
- 7.6.6 Capstone C5: crypto market making or arbitrage with counterparty control
When the system touches other people
Lessons 6.7.3 and 6.7.4 deal with the personal data that come from outside: what a scraper collects from a website and what a purchased alternative dataset contains. This lesson looks inward and ahead. A systematic trader often ends up with other people's data: the mailing list of their blog, the subscribers of a signals channel, the client accounts of a tool, the conversations of an AI assistant. And with them come three ethical questions that also have a legal answer:
- What personal data do I process and how long do I keep them? The GDPR.
- What obligations does the AI I use with those people have? The AI Act and, if there are investment services, MiFID II.
- What can I say about my results and what can I not do with my recommendations? MAR, the rules on investment advice and the warnings of the CNMV (Comisión Nacional del Mercado de Valores, Spain's securities regulator), plus a question of statistical honesty that no rule fully settles: how a track record is manufactured.
GDPR: the data of a trading service
Article 5 of Regulation (EU) 2016/679 (GDPR) sets out the principles: data are collected for specified purposes and not further processed in an incompatible way (purpose limitation), they must be “adequate, relevant and limited to what is necessary” (data minimization), they are kept in a form that identifies the data subject only for as long as necessary (storage limitation) and with appropriate security1Note 1 · Regulation (EU) 2016/679 (GDPR), Articles 4(5), 5, 6, 17, 22 and 25, BOE (Spanish version; quotations are unofficial translations), accessed on October 23, 2026.. Every processing operation needs a basis in Article 6: the contract to send the signals to whoever pays for them, a legal obligation for invoicing, consent for the marketing mailing list.
A measure the regulation cites explicitly, in Article 25 (data protection by design), is pseudonymization: processing data so that they “can no longer be attributed to a specific data subject without the use of additional information, provided that such additional information is kept separately” (Art. 4(5)). The European Data Protection Board (EDPB) guidelines 01/2025 recall that pseudonymized data are still personal data and cite functions such as HMACs, with a secret kept apart, as a way to do it2Note 2 · EDPB, “Guidelines 01/2025 on Pseudonymisation”, adopted on January 16, 2025 (version for public consultation), edpb.europa.eu.. The usual mistake is to use an unkeyed hash:
import hashlib
import hmac
import numpy as np
import pandas as pd
subs = pd.DataFrame({
"email": [f"usuario{i}@example.com" for i in (3, 17, 42, 108,
512, 999)],
"ip": [f"203.0.113.{i}" for i in (5, 17, 23, 42, 77, 91)],
"plan": ["básico", "pro", "pro", "básico", "pro", "básico"],
})
def hash_simple(x):
return hashlib.sha256(x.encode()).hexdigest()[:16]
# in production, the key lives in a secrets manager (lesson 4.4.5)
CLAVE = b"clave-de-ejemplo-guardada-aparte"
def seudonimo(x, clave=CLAVE):
return hmac.new(clave, x.encode(), hashlib.sha256).hexdigest()[:16]
subs["h_simple"] = subs["email"].map(hash_simple)
subs["seud"] = subs["email"].map(seudonimo)
# someone who has the log and a list of candidate emails
candidatos = [f"usuario{i}@example.com" for i in range(1, 1001)]
dicc = {hash_simple(c): c for c in candidatos}
dicc_k = {seudonimo(c, b"clave-adivinada"): c for c in candidatos}
print("unkeyed hash, re-identified:",
subs["h_simple"].map(dicc).notna().sum(), "of", len(subs))
print("HMAC, without the key:", subs["seud"].map(dicc_k).notna().sum())
print("HMAC, with the key:",
subs["seud"].map({seudonimo(c): c for c in candidatos})
.notna().sum())unkeyed hash, re-identified: 6 of 6
HMAC, without the key: 0
HMAC, with the key: 6An email is predictable data: with a list of candidates (a thousand here; in reality, leaks with millions), the unkeyed hash is undone entirely. The HMAC cannot be undone without the key, and with it, it can: that is why the key is stored separately from the log and with restricted access. Pseudonymized data are still personal, but the risk of a log leak drops a lot.
Minimization comes first: the log used to measure which signals are delivered and to which plan does not need the
email or the IP, nor the exact time. The plans keep their Spanish labels (básico, basic, and pro):
envios = pd.DataFrame({
"email": subs["email"].repeat(2).to_numpy(),
"ip": subs["ip"].repeat(2).to_numpy(),
"ts": pd.to_datetime(["2026-10-21 08:59:58.120"] * 6
+ ["2026-10-22 09:00:01.873"] * 6),
"senal": ["NORU compra"] * 6 + ["MURI venta"] * 6,
})
analitico = pd.DataFrame({
"seud": envios["email"].map(seudonimo),
"plan": envios["email"].map(subs.set_index("email")["plan"]),
"dia": envios["ts"].dt.date,
"senal": envios["senal"],
})
print(list(envios.columns), "->", list(analitico.columns))
analitico.groupby(["dia", "plan"]).size()['email', 'ip', 'ts', 'senal'] -> ['seud', 'plan', 'dia', 'senal']
dia plan
2026-10-21 básico 2
pro 4
2026-10-22 básico 4
pro 2
dtype: int64The analytical log answers what the service needs to know (how many signals are delivered each day per plan) with no emails, IPs or milliseconds. The delivery log with IPs, if it is needed for security, has another purpose, other access and a short retention period.
Erasure versus the obligation to retain
Article 17 of the GDPR gives the right to obtain the erasure of data, but its paragraph 3, point (b), excludes it when processing is necessary to comply with a legal obligation1. A trading service has several:
- Accounting and invoices. In Spain, Article 30 of the Commercial Code (Código de Comercio) requires books, correspondence, documentation and supporting records of the business to be kept “for six years, from the last entry made in the books”3Note 3 · Spanish Commercial Code (Código de Comercio), Article 30.1, BOE-A-1885-6627 (in Spanish; the quotation is an unofficial translation), consolidated text accessed on October 23, 2026..
- Client orders and transactions, if the service is an investment firm: five years (Art. 25(1) of MiFIR) and, for recordings and communications, five years or up to seven if the authority requests it (Art. 16(7) of MiFID II)4Note 4 · Regulation (EU) No 600/2014 (MiFIR), Article 25(1), and Directive 2014/65/EU (MiFID II), Article 16(7), EUR-Lex..
Mermaid source
flowchart TB
P[Request] --> B{Legal basis?}
B -- consent --> S[Erase now]
B -- contract --> F{Contract active?}
F -- no --> S
F -- yes --> M[Keep]
B -- obligation --> V{Period expired?}
V -- yes --> S
V -- no --> K[Block and retain]Turned into code, with injected dates and the simplified rule that the six-year period counts from the date of the
document (the bases keep their Spanish keys: consentimiento, contrato, obligación):
PLAZO_ANOS = {"contabilidad (art. 30 C. Com.)": 6}
datos = pd.DataFrame([
("mailing list", "consentimiento", None, None),
("profile and preferences", "contrato", None, False),
("invoice 2024-0312", "obligación",
"contabilidad (art. 30 C. Com.)", "2024-03-12"),
("invoice 2019-0044", "obligación",
"contabilidad (art. 30 C. Com.)", "2019-02-04"),
], columns=["dato", "base", "norma", "fecha_o_vivo"])
def resolver(fila, hoy):
if fila.base == "consentimiento":
return "erase"
if fila.base == "contrato":
return "keep" if fila.fecha_o_vivo else "erase"
fin = (pd.Timestamp(fila.fecha_o_vivo)
+ pd.DateOffset(years=PLAZO_ANOS[fila.norma]))
if hoy >= fin:
return "erase"
return f"retain blocked until {fin.date()}"
hoy = pd.Timestamp("2026-10-23")
for f in datos.itertuples():
print(f"{f.dato:<24} {resolver(f, hoy)}")mailing list erase
profile and preferences erase
invoice 2024-0312 retain blocked until 2030-03-12
invoice 2019-0044 eraseThe mailing list is erased as soon as consent is withdrawn, and the profile, because the contract has already ended. The 2024 invoice is retained, but blocked: only for the purpose of the obligation (an inspection, an audit), not for sending advertising or training a churn model. The 2019 one has already passed its period and should have been erased without waiting for any request: storage limitation does not depend on someone claiming it.
Responsible AI: the AI Act and its dates
Regulation (EU) 2024/1689 on artificial intelligence classifies systems by risk. Its application dates are in Article 113, which Regulation (EU) 2026/1744 (the “Digital Omnibus on AI”), published in the Official Journal on July 24, 2026 and in force three days later, has amended5Note 5 · Regulation (EU) 2024/1689, Articles 4, 50 and 113 and Annex III, EUR-Lex, and Regulation (EU) 2026/1744 of the European Parliament and of the Council of 8 July 2026 (OJ L, 24.7.2026), amending its Articles 4 and 113, EUR-Lex. Texts read in the Spanish version of the EU Publications Office on October 23, 2026.:
calendario = pd.DataFrame([
("2025-02-02", "chapters I and II: prohibitions and literacy"),
("2025-08-02", "general-purpose AI, governance and penalties"),
("2026-08-02", "general application, Art. 50 transparency"),
("2026-12-02", "marking (Art. 50.2) of pre-existing systems"),
("2027-12-02", "Annex III high-risk (Art. 6.2)"),
("2028-08-02", "high-risk products in Annex I (Art. 6.1)"),
], columns=["desde", "que"])
calendario["desde"] = pd.to_datetime(calendario["desde"])
def vigentes(dia):
c = calendario.copy()
c["estado"] = np.where(c["desde"] <= dia, "applicable",
(c["desde"] - dia).dt.days.astype(str)
+ " days")
return c
vigentes(pd.Timestamp("2026-10-23")) desde que estado
0 2025-02-02 chapters I and II: prohibitions and literacy applicable
1 2025-08-02 general-purpose AI, governance and penalties applicable
2 2026-08-02 general application, Art. 50 transparency applicable
3 2026-12-02 marking (Art. 50.2) of pre-existing systems 40 days
4 2027-12-02 Annex III high-risk (Art. 6.2) 405 days
5 2028-08-02 high-risk products in Annex I (Art. 6.1) 649 daysFor a systematic trader, three consequences:
- A proprietary trading model is not high-risk just for being one. The high-risk categories of Annex III are a closed list; in finance they include systems for assessing the creditworthiness of natural persons or their credit score and those for risk assessment and pricing of life and health insurance5. Buying and selling for oneself is not listed.
- Transparency may well affect the service. Since August 2, 2026, Article 50(1) requires systems that interact directly with people to be designed so that those people know they are talking to an AI, unless it is obvious. An assistant that answers the subscribers of a signals channel is the typical case. AI literacy under Article 4, as worded by the omnibus, asks providers and deployers to take measures to support it among those who operate the systems, without requiring a specific level.
- If there are clients and investment services, MiFID II prevails. ESMA said so in its statement of May 30, 2024: the firm's decisions remain the responsibility of its management body, “irrespective of whether those decisions are taken by people or AI-based tools”, and MiFID II obligations apply to the AI tools used with clients6Note 6 · ESMA, “Public Statement on the use of Artificial Intelligence (AI) in the provision of retail investment services”, ESMA35-335435667-5924, May 30, 2024, esma.europa.eu.. If, in addition, an automated decision produces significant effects on a person (rejecting a client, for example), Article 22 of the GDPR comes into play.
Selling signals: recommendation or advice
Article 20 of MAR requires whoever produces or disseminates investment recommendations to present them objectively and to disclose their interests or conflicts7Note 7 · Regulation (EU) No 596/2014 (MAR), Articles 12(2)(d) and 20, OJ L 173, 12.6.2014, copy in the BOE (Spanish version).. The CNMV puts it this way in its guide for finfluencers: “Anyone can publish investment recommendations”, but with general requirements (who produces it, date and time, facts separated from opinions, sources, interests and conflicts visible on each channel) and additional requirements for professionals and “experts”, among them the methodology, the investment horizon and risk warnings8Note 8 · CNMV, “Finfluencers: cómo actuar con responsabilidad” (guide, May 2026), sections IV to VII, cnmv.es (in Spanish; quotations are unofficial translations).. Delegated Regulation (EU) 2016/958 details them; its Article 4(1)(i) asks experts for a list of all their recommendations from the previous twelve months, with the date and price of each one9Note 9 · Commission Delegated Regulation (EU) 2016/958 of 9 March 2016, Articles 2 to 5, EUR-Lex..
Investment advice is a different matter: a service that requires authorization. Article 9 of Delegated Regulation (EU) 2017/565 defines it by the personal recommendation: one presented as suitable for that person or based on their personal circumstances, and it clarifies that “a recommendation is not a personal recommendation if it is issued exclusively to the public”10Note 10 · Commission Delegated Regulation (EU) 2017/565, Article 9, EUR-Lex..
Mermaid source
flowchart TB
M[Message] --> A{Suggests investing?}
A -- no --> I[Information]
A -- yes --> P{Personalized?}
P -- no --> R[MAR recommendation]
P -- yes --> S[Advice]
S --> Z[Requires authorization]The CNMV is explicit about disclaimers: without authorization, no personalized recommendations should be given on what to buy, sell or hold, and publishing “This is not investment advice” “will not protect you in these cases, nor does it exempt you from complying with the applicable regulations”8. In its guide for followers it lists “alerts and signals (buy/sell)” among risky content and warns that the main risk is fraud: finfluencers who provide advice without authorization or recruit clients for chiringuitos financieros, the Spanish term for boiler rooms, entities that provide investment services without being authorized11Note 11 · CNMV, “Del like a la inversión: qué debes saber de los finfluencers” (guide, April 2026), cnmv.es, and “Chiringuitos financieros” (guide), cnmv.es, both in Spanish.. Its search engine of warnings and its registers of authorized entities are the prior check it recommends12Note 12 · CNMV, search engine of warnings about unauthorized entities, cnmv.es..
Two frequent conflicts of interest in selling signals:
| Conduct | Why it is a problem |
|---|---|
| Buying before publishing the signal and selling when the subscribers buy | Article 12(2)(d) of MAR considers it manipulation to take positions, then voice an opinion in the media and profit from the effect without having disclosed the conflict |
| Receiving commissions from the recommended broker or exchange | It is an interest that must be disclosed; if the entity is not authorized, the CNMV warns that promoting it can make the promoter an accomplice to a fraud |
How a track record is manufactured
A signals seller shows their track record. The ethical problem lies in how that track record is built, even if every number is true. To measure it, the next cell creates 2,000 channels with no skill at all: every day they give a random buy or sell signal on an asset with no trend. After a year, the channels with an annual Sharpe above 1 are advertised, and their performance over the next six months is measured:
rng = np.random.default_rng(2026)
N, DIAS, FUERA = 2000, 252, 126
r = rng.normal(0, 0.01, DIAS + FUERA) # asset with no trend
senal = rng.choice([-1, 1], size=(N, DIAS + FUERA)) # no skill
ret = senal * r
def sharpe(x, axis=-1):
return np.sqrt(252) * x.mean(axis) / x.std(axis, ddof=1)
sr_dentro = sharpe(ret[:, :DIAS])
sr_fuera = sharpe(ret[:, DIAS:])
anunciado = sr_dentro > 1
print(f"advertised: {anunciado.sum()} of {N}")
print(f"average Sharpe, year of the advertisement: "
f"{sr_dentro[anunciado].mean():.2f}")
print(f"average Sharpe, six months later: "
f"{sr_fuera[anunciado].mean():.2f}")
print(f"all channels, year of the advertisement: {sr_dentro.mean():.2f}")advertised: 316 of 2000
average Sharpe, year of the advertisement: 1.49
average Sharpe, six months later: -0.04
all channels, year of the advertisement: 0.02One in six channels exceeds a Sharpe of 1 without knowing anything. Their average in the year of the advertisement, 1.49, is what their pages would show; over the following six months, that of a coin toss. The figure at the top summarizes the three numbers. In reality, the bias is worse: losing channels close, change their name and start over, and the reader only sees the survivors.
Lesson 2.5.4 provides the yardstick: the maximum Sharpe to be expected among strategies with no skill, with the approximation by Bailey and López de Prado ( is the Euler-Mascheroni constant and the standard deviation of the estimated Sharpe ratios):
from scipy.stats import norm
g = np.euler_gamma
esperado = sr_dentro.std() * ((1 - g) * norm.ppf(1 - 1 / N)
+ g * norm.ppf(1 - 1 / (N * np.e)))
mejor = sr_dentro.argmax()
print(f"best channel: Sharpe {sr_dentro[mejor]:.2f} "
f"(six months later: {sr_fuera[mejor]:.2f})")
print(f"maximum expected with no skill for N={N}: {esperado:.2f}")best channel: Sharpe 3.06 (six months later: -1.52)
maximum expected with no skill for N=2000: 3.40The best of 2,000 random channels has a Sharpe of 3.06, below what can be expected from the best of 2,000 coins. A track record with a Sharpe of 3 says nothing unless you know how many attempts it comes from.
Choosing the window
The second trick does not require advertising only the best: choosing the period is enough. Each channel shows its “last three months” right when they are the best of the year. With 63 sessions, the estimated Sharpe has twice the noise it has with 252, and among all the possible windows there is always a good one:
panel = pd.DataFrame(ret[:, :DIAS].T) # one column per channel
v = panel.rolling(63)
mejor_ventana = (np.sqrt(252) * v.mean() / v.std()).max()
print(f"average Sharpe over the full year: {sr_dentro.mean():.2f}")
print(f"average Sharpe of the best window: "
f"{mejor_ventana.mean():.2f}")
print(f"channels with some window > 2: "
f"{(mejor_ventana > 2).mean():.0%}")average Sharpe over the full year: 0.02
average Sharpe of the best window: 3.41
channels with some window > 2: 84%Over the full year, the average channel has a Sharpe of 0.02; with its best three-month window, 3.41 on average, and 84% of the channels with no skill at all have some window above 2. “Our last three months” is informative only if the cut-off date was fixed before seeing the results.
Deleting the losing signals
The third trick is the simplest: not publishing, or deleting afterward, the signals that go wrong. With a mediocre channel, the one at the median of the 2,000 by Sharpe, and one trade per day:
mediano = np.argsort(sr_dentro)[N // 2]
ops = ret[mediano, :DIAS]
publicadas = ops[ops > 0] # the losing ones “get deleted”
print(f"signals: {len(ops)}, published: {len(publicadas)}")
print(f"actual hit rate: {(ops > 0).mean():.1%}; "
f"published hit rate: {(publicadas > 0).mean():.0%}")
print(f"actual return: {ops.sum():+.1%}; "
f"published: {publicadas.sum():+.1%}")signals: 252, published: 124
actual hit rate: 49.2%; published hit rate: 100%
actual return: +0.3%; published: +107.7%The median channel is right on 49.2% of the days and gains 0.3% over the year. Without its 128 losing signals, it publishes 124 with a 100% hit rate and a sum of +107.7%. A 100% hit rate is impossible in an honest track record and easy in an edited one. That is why the complete list of recommendations for twelve months that Article 4(1)(i) of Delegated Regulation 2016/958 requires of experts matters more than any summary: with all the signals, dated and with their price, the hit rate goes back to the real one.
The letter that is right ten times in a row
The last trick is old and needs no market. A prediction (“up” or “down”) is sent to 1,024 people, half receive one and half the other; the next week it is repeated only with those who received the right one:
destinatarios = np.arange(1024)
for semana in range(1, 11):
sube = destinatarios[: len(destinatarios) // 2]
resultado_sube = rng.random() < 0.5
destinatarios = sube if resultado_sube else \
destinatarios[len(destinatarios) // 2:]
if semana in (1, 5, 10):
print(f"week {semana:>2}: {len(destinatarios):>4} people "
"without a single miss")week 1: 512 people without a single miss
week 5: 32 people without a single miss
week 10: 1 people without a single missOne person has received ten correct predictions in a row, a probability of 1 in 1,024 if they were random, and has no way of knowing there are another 1,023 letters. It is the extreme version of the advertised channels: whoever looks at the track record does not see the denominator. The question that dismantles it is always the same: how many attempts were there and where are all of them?
Exercises
- Repeat the channel simulation advertising only those with a Sharpe above 2. How many are there, what average Sharpe do they show and what Sharpe do they have afterward?
Solution
for umbral in [1, 2]:
a = sr_dentro > umbral
print(f"threshold {umbral}: {a.sum():>3} channels, "
f"in-sample {sr_dentro[a].mean():.2f}, "
f"out-of-sample {sr_fuera[a].mean():.2f}")threshold 1: 316 channels, in-sample 1.49, out-of-sample -0.04
threshold 2: 37 channels, in-sample 2.35, out-of-sample -0.10With a threshold of 2, 37 channels are advertised instead of 316 and their track record is more brilliant (2.35 on average), but the following six months stay around zero (−0.10). Tightening the filter on a selected track record does not create skill: it only selects more extreme luck. What distinguishes a channel with skill is that its Sharpe outside the selection sample holds up, and that can only be seen with results dated before they are known.
- A channel publishes 40 signals in a year; it says it got 30 right. It gives you the complete list with dates and prices and, when you check it, 12 of the 30 “winners” had an entry price that was not reached that day. Compute the real hit rate if those 12 do not count as trades and if they count as misses.
Solution
total, aciertos, imposibles = 40, 30, 12
print(f"declared: {aciertos / total:.0%}")
validas = total - imposibles
print(f"excluding impossible: {(aciertos - imposibles) / validas:.0%}")
print(f"impossible ones as misses: {(aciertos - imposibles) / total:.0%}")declared: 75%
excluding impossible: 64%
impossible ones as misses: 45%The declared 75% drops to 64% if the signals with unreachable prices are excluded and to 45% if they are counted as misses. That is why the complete list of Article 4(1)(i) includes the market price at the time of dissemination: it makes it possible to check that the signal was executable. An entry price that never existed is a signal written after the fact.
- A paid Telegram channel sends the same three ideas every morning to all its subscribers. The administrator also opens a private chat for those who pay for the “premium” plan, where they ask about the subscriber's capital and profile and say how much to buy. Which part is a recommendation and which part is advice? What changes if the chat is handled by an AI assistant?
Solution
The three daily ideas, the same for everyone, are investment recommendations disseminated through a distribution channel: they can be published without authorization, but with the requirements of Article 20 of MAR and Delegated Regulation 2016/958 (identity, date and time, objective presentation, interests and conflicts and, if whoever gives them is an “expert”, methodology, risks and the twelve-month list). The premium chat, which asks about capital and profile and says how much to buy, gives recommendations presented as suitable or based on personal circumstances: it is investment advice under Article 9 of Delegated Regulation 2017/565 and requires authorization, whatever the disclaimer says. If an AI assistant handles it, the assessment does not change (the service is provided by whoever deploys the assistant) and the Article 50(1) obligation of the AI Act is added: the user must know they are talking to an AI; the conversations are also personal data with their own purpose and retention period.
Footnotes
-
Regulation (EU) 2016/679 (GDPR), Articles 4(5), 5, 6, 17, 22 and 25, BOE (Spanish version; quotations are unofficial translations), accessed on October 23, 2026. ↩ ↩2
-
EDPB, “Guidelines 01/2025 on Pseudonymisation”, adopted on January 16, 2025 (version for public consultation), edpb.europa.eu. ↩
-
Spanish Commercial Code (Código de Comercio), Article 30.1, BOE-A-1885-6627 (in Spanish; the quotation is an unofficial translation), consolidated text accessed on October 23, 2026. ↩
-
Regulation (EU) No 600/2014 (MiFIR), Article 25(1), and Directive 2014/65/EU (MiFID II), Article 16(7), EUR-Lex. ↩
-
Regulation (EU) 2024/1689, Articles 4, 50 and 113 and Annex III, EUR-Lex, and Regulation (EU) 2026/1744 of the European Parliament and of the Council of 8 July 2026 (OJ L, 24.7.2026), amending its Articles 4 and 113, EUR-Lex. Texts read in the Spanish version of the EU Publications Office on October 23, 2026. ↩ ↩2
-
ESMA, “Public Statement on the use of Artificial Intelligence (AI) in the provision of retail investment services”, ESMA35-335435667-5924, May 30, 2024, esma.europa.eu. ↩
-
Regulation (EU) No 596/2014 (MAR), Articles 12(2)(d) and 20, OJ L 173, 12.6.2014, copy in the BOE (Spanish version). ↩
-
CNMV, “Finfluencers: cómo actuar con responsabilidad” (guide, May 2026), sections IV to VII, cnmv.es (in Spanish; quotations are unofficial translations). ↩ ↩2
-
Commission Delegated Regulation (EU) 2016/958 of 9 March 2016, Articles 2 to 5, EUR-Lex. ↩
-
Commission Delegated Regulation (EU) 2017/565, Article 9, EUR-Lex. ↩
-
CNMV, “Del like a la inversión: qué debes saber de los finfluencers” (guide, April 2026), cnmv.es, and “Chiringuitos financieros” (guide), cnmv.es, both in Spanish. ↩
-
CNMV, search engine of warnings about unauthorized entities, cnmv.es. ↩
Each answer is folded under its question
Self-assessment
A signals service stores
sha256(email)of its subscribers in the delivery log and says that this makes the data anonymous. What is wrong?- ANothing: a hash is irreversible
- BAn unkeyed hash of predictable data is undone with a list of candidates (in the lesson, all six subscribers are re-identified with a thousand emails), and even with a secret key the data are still pseudonymous, that is, personal
- CThat SHA-256 is prohibited by the GDPR
- DThat MD5 should be used instead
Show answer
Answer B. An unkeyed hash of predictable data is undone with a list of candidates (in the lesson, all six subscribers are re-identified with a thousand emails), and even with a secret key the data are still pseudonymous, that is, personal
Article 4(5) defines pseudonymization as processing after which the data can no longer be attributed to a person without additional information kept separately; the EDPB guidelines 01/2025 insist that pseudonymized data are still personal data. An HMAC with the key in a secrets manager prevents dictionary re-identification by anyone without the key; it does not make the data anonymous.
A former subscriber asks for all their data to be erased. Their invoice from two years ago is in the accounting records. What is done with it?
- AIt is erased immediately, because the right to erasure always prevails
- BIt is kept forever
- CIt is kept, blocked for other uses, for as long as the legal obligation lasts (six years under Article 30 of the Spanish Commercial Code), and erased afterward; what is based on consent, such as the mailing list, is erased now
- DIt is sent to the data subject and deleted from the system
Show answer
Answer C. It is kept, blocked for other uses, for as long as the legal obligation lasts (six years under Article 30 of the Spanish Commercial Code), and erased afterward; what is based on consent, such as the mailing list, is erased now
Article 17(3)(b) of the GDPR excludes from the right to erasure the processing necessary to comply with a legal obligation. The obligation does not authorize other uses: the data are restricted to that purpose and erased when the period expires.
An ML model decides when to buy and sell for its author's own account. Is it a high-risk system under the AI Act?
- ANot for being a trading model: Annex III does not include proprietary trading (it does include, for example, assessing the creditworthiness of natural persons); other obligations, such as the Article 50 transparency if it converses with people, may apply to other systems of the same service
- BYes, all financial AI systems are high-risk
- CYes, from August 2, 2026
- DOnly if it uses neural networks
Show answer
Answer A. Not for being a trading model: Annex III does not include proprietary trading (it does include, for example, assessing the creditworthiness of natural persons); other obligations, such as the Article 50 transparency if it converses with people, may apply to other systems of the same service
The Annex III categories are a closed list and in finance they cite the creditworthiness and credit scoring of natural persons and the pricing of life and health insurance. For those, Regulation (EU) 2026/1744 has moved the obligations to December 2, 2027. The model is still subject to MiFID II if an investment firm with clients uses it (ESMA statement of May 30, 2024).
Out of 2,000 channels that give random signals for a year, the ones with a Sharpe ratio above 1 are advertised. What Sharpe do the advertised ones have over the following six months?
- AAround 1.5, as in the year of the advertisement
- BMore than 1, because they have shown skill
- CExactly 1
- DAround 0: their average Sharpe in the year of the advertisement (1.49) was selection, not skill, and outside that sample it drops to −0.04
Show answer
Answer D. Around 0: their average Sharpe in the year of the advertisement (1.49) was selection, not skill, and outside that sample it drops to −0.04
With random signals, 316 of 2,000 channels exceed a Sharpe of 1 by sheer luck. Picking them by their track record produces an excellent track record with no ability to repeat it; it is the same selection bias that the Deflated Sharpe Ratio of lesson 2.5.4 corrects.
What protects an influencer who sends each paying subscriber buy recommendations tailored to their situation, if they add “this is not advice”?
- AThe disclaimer, which turns it into generic information
- BNothing: a recommendation presented as suitable or based on personal circumstances is advice, which requires authorization, and the CNMV warns that such disclaimers do not protect you or exempt you from complying with the rules
- CCharging less than €50 a month
- DPublishing on Telegram instead of on a website
Show answer
Answer B. Nothing: a recommendation presented as suitable or based on personal circumstances is advice, which requires authorization, and the CNMV warns that such disclaimers do not protect you or exempt you from complying with the rules
Article 9 of Delegated Regulation (EU) 2017/565 defines a personal recommendation and clarifies that one issued exclusively to the public is not. The CNMV guide for finfluencers says that publishing “This is not investment advice” does not protect you in those cases.
Key points
- The GDPR applies to the data of subscribers, clients and users of a trading service: purpose limitation, data minimization and storage limitation (Art. 5). An unkeyed hash of an email is undone by dictionary; an HMAC with the key kept apart is pseudonymization, and the data are still personal.
- Erasure (Art. 17) gives way to a legal retention obligation (Art. 17(3)(b)), such as the six years of Article 30 of the Spanish Commercial Code or the five years of Article 25(1) of MiFIR for an investment firm's orders and transactions; what is kept stays blocked for that purpose.
- AI Act: prohibitions and AI literacy from February 2, 2025, general-purpose AI from August 2, 2025, general application and Article 50 transparency from August 2, 2026, and Annex III high-risk from December 2, 2027 after Regulation (EU) 2026/1744. A proprietary trading model is not in Annex III.
- Anyone can publish investment recommendations, with the objective presentation and conflict of interest obligations of Article 20 of MAR and Delegated Regulation 2016/958; personalized advice requires authorization, and a “this is not advice” disclaimer does not change that.
- With 2,000 random channels, 316 exceed a Sharpe of 1 in a year (average 1.49) and drop to −0.04 over the following six months; choosing the best three-month window or deleting losing signals manufactures equally empty track records. The complete 12-month list of recommendations (Art. 4(1)(i) of Delegated Regulation 2016/958) is the antidote.
Resources
Research
Documentation
- Regulation (EU) 2016/679 (GDPR), text in the BOE (Spanish)
- EDPB: Guidelines 01/2025 on pseudonymisation (version for public consultation)
- Regulation (EU) 2024/1689 on artificial intelligence (EUR-Lex)
- ESMA: public statement on the use of AI in the provision of retail investment services (May 30, 2024)
- CNMV (Spain's securities regulator): guide “Finfluencers: cómo actuar con responsabilidad” (acting responsibly, in Spanish)
- CNMV: guide “Del like a la inversión” (what to know about finfluencers, in Spanish)