Risk ve Uyumluluk Güvenlik Sınırları
Pozisyon büyüklüğü sınırları, yasaklı araç kontrolleri ve denetim günlüğü.
Risk ve Uyumluluk Güvenlik Sınırları, CoddyKit'te ücretsiz bir AI Agents dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Agents öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Agents kursu toplamda 4 dersten oluşur.
Finansal Aracıların Kesin Koruma Kurallarına Neden İhtiyacı Var
Kısıtlama olmadan herhangi bir işlemi önerebilen bir finansal aracı, kullanıcıları büyük kayıplara veya düzenleyici ihlallere maruz bırakabilir. İnsan danışmandan farklı olarak bir aracı, öneri mantığını tutarlı biçimde çalıştırır; bu da bir hatanın veya yanlış yapılandırmanın her kullanıcıyı etkilemesi anlamına gelir.
Kesin koruma kuralları en kötü sonuçları önler.
Pozisyon Büyüklüğü Sınırları
Aracının portföyün herhangi bir tek varlığına yatırılmasını önerebileceği miktarı sınırlayın. Yaygın bir kural şudur: Tek bir pozisyon, toplam portföy değerinin %20'sini aşmamalıdır. Bu, büyük yoğunlaşma riskini önler.
MAX_POSITION_PCT = 0.20 # 20% of portfolio max per asset
def check_position_size(ticker: str, trade_usd: float,
portfolio_value: float) -> dict:
proposed_pct = trade_usd / portfolio_value
if proposed_pct > MAX_POSITION_PCT:
return {
'allowed': False,
'reason': (
f'Position size {proposed_pct:.1%} exceeds limit {MAX_POSITION_PCT:.1%}. '
f'Max trade for this portfolio: USD {portfolio_value * MAX_POSITION_PCT:.0f}'
)
}
return {'allowed': True, 'position_pct': round(proposed_pct, 4)}
if __name__ == '__main__':
print('Large trade:', check_position_size('TSLA', 30000, 100000))
print('Small trade:', check_position_size('TSLA', 10000, 100000))
Yasaklı Araçlar Listesi
Aracının önermesine izin verilmeyen araçların bir listesini tutun: kuruşluk hisseler, yüksek kaldıraçlı ETF'ler, yaptırım uygulanan menkul kıymetler veya bireysel yatırımcılar için uygun olmayan araçlar.
PROHIBITED_TICKERS = {
'UVXY', # VIX leveraged ETF — too volatile
'TVIX', # Delisted leveraged VIX
'JDST', # 3x leveraged gold miners short
'NUGT', # 3x leveraged gold miners long
'YANG', # 3x China short
}
PROHIBITED_TYPES = {'penny_stock', 'leveraged_3x', 'inverse_volatility'}
def check_prohibited_instrument(ticker: str) -> dict:
if ticker.upper() in PROHIBITED_TICKERS:
return {
'allowed': False,
'reason': f'{ticker} is on the prohibited instruments list'
}
return {'allowed': True}
if __name__ == '__main__':
print("Checking UVXY:", check_prohibited_instrument('UVXY'))
print("Checking AAPL:", check_prohibited_instrument('AAPL'))
Pattern-Day-Trader Kuralı Denetimi
US'de USD 25.000'den az varlığa sahip bir hesap, 5 iş günü içinde 4 veya daha fazla gidiş-dönüş işlemi yaparsa Pattern Day Trader (PDT) olarak işaretlenir. Aracı, aynı gün içindeki işlemleri önermeden önce işlem sıklığını denetlemelidir.
from datetime import datetime, timedelta, timezone
def check_pdt_rule(account_value_usd: float,
recent_trades: list[dict]) -> dict:
if account_value_usd >= 25_000:
return {'at_risk': False, 'reason': 'Account above PDT threshold'}
cutoff = datetime.now(timezone.utc) - timedelta(days=5)
recent = [
t for t in recent_trades
if datetime.fromisoformat(t['timestamp']) > cutoff
and t.get('is_day_trade', False)
]
if len(recent) >= 3:
return {
'at_risk': True,
'day_trades_in_5_days': len(recent),
'reason': (
f'Account has {len(recent)} day trades in the last 5 days. '
f'A 4th would trigger the PDT restriction.'
)
}
return {'at_risk': False, 'day_trades_in_5_days': len(recent)}
if __name__ == '__main__':
now = datetime.now(timezone.utc)
trades = [
{'timestamp': (now - timedelta(days=1)).isoformat(), 'is_day_trade': True},
{'timestamp': (now - timedelta(days=2)).isoformat(), 'is_day_trade': True},
{'timestamp': (now - timedelta(days=3)).isoformat(), 'is_day_trade': True},
]
result = check_pdt_rule(account_value_usd=10000, recent_trades=trades)
print('PDT rule check:', result)
Oynaklığa Dayalı İşlem Büyüklüğü Ölçeklendirme
Oynaklığı daha yüksek varlıklar daha fazla risk taşır. Pozisyon büyüklüklerini oynaklıkla ters orantılı olarak ölçeklendirin: Bir varlığın oynaklığı temel düzeyin iki katıysa pozisyon büyüklüğünün yarısını önerin.
import yfinance as yf, numpy as np
BASELINE_VOL = 0.15 # 15% annualized vol — S&P 500 average
def volatility_scaled_size(ticker: str, base_allocation_usd: float) -> dict:
hist = yf.Ticker(ticker).history(period='1y')['Close'].pct_change().dropna()
vol = float(hist.std() * np.sqrt(252))
scaling_factor = BASELINE_VOL / max(vol, 0.01)
adjusted_usd = base_allocation_usd * scaling_factor
return {
'ticker': ticker,
'annualized_vol': round(vol, 4),
'scaling_factor': round(scaling_factor, 3),
'adjusted_size_usd': round(adjusted_usd, 2),
'note': 'High-vol asset: position scaled down' if scaling_factor < 1 else 'Normal sizing'
}Her Öneriyi Denetim Günlüğüne Kaydetme
Kabul edilmiş veya reddedilmiş olmasına bakılmaksızın her işlem önerisi, zaman damgası, kullanıcı ID'si, önerilen eylem, çalıştırılan koruma kuralı denetimleri ve sonuç gibi tüm bağlamla birlikte günlüğe kaydedilmelidir. Bu, uyumluluk incelemesi için eksiksiz bir denetim izi oluşturur.
import json, hashlib, time, logging
audit_logger = logging.getLogger('financial_agent.audit')
audit_logger.setLevel(logging.INFO)
def audit_log(user_id: str, action: str, ticker: str,
amount_usd: float, guardrail_results: list[dict],
approved: bool, reason: str):
log_entry = {
'timestamp': time.time(),
'user_id': user_id,
'action': action,
'ticker': ticker,
'amount_usd': amount_usd,
'guardrails': guardrail_results,
'approved': approved,
'reason': reason,
'entry_id': hashlib.md5(f'{user_id}{time.time()}'.encode()).hexdigest()[:12]
}
audit_logger.info(json.dumps(log_entry))
if __name__ == '__main__':
import sys
audit_logger.addHandler(logging.StreamHandler(sys.stdout))
audit_log('user_42', 'BUY', 'AAPL', 5000.0,
[{'check': 'position_size', 'allowed': True}],
True, 'Within limits')
Sorumluluk Reddini Otomatik Ekleme
Aracının ürettiği her finansal çıktı, bunun kişiselleştirilmiş finansal tavsiye olmadığını belirten bir sorumluluk reddi içermelidir. Bunu otomatik olarak ekleyin; tutarlı biçimde eklemesi için hiçbir zaman LLM'ye güvenmeyin.
FINANCIAL_DISCLAIMER = (
'\n\n---\n'
'DISCLAIMER: This output is generated by an AI agent and is for '
'informational purposes only. It does not constitute personalized financial advice. '
'Past performance does not guarantee future results. '
'Please consult a licensed financial advisor before making investment decisions.'
)
def inject_disclaimer(response: str) -> str:
if 'DISCLAIMER' not in response:
return response + FINANCIAL_DISCLAIMER
return response
if __name__ == '__main__':
response = 'AAPL is currently trading at $150 with strong upward momentum.'
print(inject_disclaimer(response))
Tüm Koruma Kurallarını Sırayla Çalıştırma
Tüm denetimleri sırayla çalıştıran ve gerekçesiyle birlikte başarılı/başarısız kararı döndüren tek bir guardrail_check() işlevi oluşturun. Aracı, herhangi bir öneriyi kesinleştirmeden önce bunu çağırır.
def guardrail_check(user_id: str, ticker: str, action: str,
amount_usd: float, portfolio_value: float,
account_value: float, recent_trades: list[dict]) -> dict:
checks = []
# 1. Prohibited instruments
prohibited = check_prohibited_instrument(ticker)
checks.append({'check': 'prohibited_instrument', **prohibited})
if not prohibited['allowed']:
audit_log(user_id, action, ticker, amount_usd, checks, False, prohibited['reason'])
return {'approved': False, 'reason': prohibited['reason'], 'checks': checks}
# 2. Position size
size_check = check_position_size(ticker, amount_usd, portfolio_value)
checks.append({'check': 'position_size', **size_check})
if not size_check['allowed']:
audit_log(user_id, action, ticker, amount_usd, checks, False, size_check['reason'])
return {'approved': False, 'reason': size_check['reason'], 'checks': checks}
# 3. PDT rule
if action == 'day_trade':
pdt = check_pdt_rule(account_value, recent_trades)
checks.append({'check': 'pdt_rule', **pdt})
if pdt['at_risk']:
return {'approved': False, 'reason': pdt['reason'], 'checks': checks}
audit_log(user_id, action, ticker, amount_usd, checks, True, 'All guardrails passed')
return {'approved': True, 'checks': checks}Risk Profiline Göre Uygunluk Denetimi
Öneriyi kullanıcının belirttiği risk toleransıyla eşleştirin. Muhafazakâr bir yatırımcıya yüksek betalı büyüme hisseleri önerilmemelidir; saldırgan bir yatırımcı daha yüksek oynaklığı karşılayabilir.
RISK_PROFILES = {
'conservative': {'max_beta': 0.8, 'max_vol_pct': 15},
'moderate': {'max_beta': 1.2, 'max_vol_pct': 25},
'aggressive': {'max_beta': 2.0, 'max_vol_pct': 50},
}
def suitability_check(risk_profile: str, ticker_beta: float,
ticker_vol_pct: float) -> dict:
limits = RISK_PROFILES.get(risk_profile, RISK_PROFILES['moderate'])
if ticker_beta > limits['max_beta']:
return {
'suitable': False,
'reason': f'Beta {ticker_beta:.2f} exceeds {risk_profile} limit {limits["max_beta"]}'
}
if ticker_vol_pct > limits['max_vol_pct']:
return {
'suitable': False,
'reason': f'Volatility {ticker_vol_pct:.1f}% exceeds {risk_profile} limit {limits["max_vol_pct"]}%'
}
return {'suitable': True}
if __name__ == '__main__':
print('Conservative check:', suitability_check('conservative', ticker_beta=1.5, ticker_vol_pct=20))
print('Aggressive check: ', suitability_check('aggressive', ticker_beta=1.5, ticker_vol_pct=20))
Önerileri Hız Sınırlamasına Tabi Tutma
Çok sık işlem önerileri oluşturan bir aracı, maliyetleri ve riski artıran aşırı işlemi teşvik eder. Aynı varlığa yönelik öneriler arasında bir bekleme süresi uygulayın.
import time
last_recommendation: dict[str, float] = {} # ticker -> timestamp
COOLDOWN_HOURS = 24
def check_recommendation_cooldown(ticker: str) -> dict:
last = last_recommendation.get(ticker, 0)
elapsed_hours = (time.time() - last) / 3600
if elapsed_hours < COOLDOWN_HOURS:
remaining = COOLDOWN_HOURS - elapsed_hours
return {
'allowed': False,
'reason': f'Recommendation cooldown: {remaining:.1f} hours remaining for {ticker}'
}
return {'allowed': True}
def record_recommendation(ticker: str):
last_recommendation[ticker] = time.time()
if __name__ == '__main__':
print('Before recommending:', check_recommendation_cooldown('AAPL'))
record_recommendation('AAPL')
print('Right after recommending:', check_recommendation_cooldown('AAPL'))
Zarar Durdurma ve Gerileme Devre Kesicileri
Tek tek pozisyon sınırlarının yanı sıra portföy düzeyinde bir devre kesici uygulayın: Toplam portföy tek bir günde %X'ten fazla değer kaybederse aracı, bir insan durumu inceleyene kadar yeni alım önerileri yapmayı durdurur.
MAX_DAILY_DRAWDOWN_PCT = 0.05 # 5% daily loss limit
def check_daily_drawdown(portfolio_start_of_day: float,
portfolio_current: float) -> dict:
daily_loss = (portfolio_current - portfolio_start_of_day) / portfolio_start_of_day
if daily_loss < -MAX_DAILY_DRAWDOWN_PCT:
return {
'circuit_breaker': True,
'daily_loss_pct': round(daily_loss * 100, 2),
'reason': (
f'Portfolio down {abs(daily_loss)*100:.1f}% today. '
f'Agent suspended — human review required.'
)
}
return {'circuit_breaker': False, 'daily_loss_pct': round(daily_loss * 100, 2)}
if __name__ == '__main__':
print('Small loss day:', check_daily_drawdown(100000, 98000))
print('Big loss day: ', check_daily_drawdown(100000, 92000))
Pattern Day Trader (PDT) kuralı neyi sınırlar
PDT kuralı, US piyasasında faaliyet gösteren finansal aracıların uyması gereken bir US düzenleyici gerekliliğidir. Bu kuralı anlamak, aracıların teminat hesabı kısıtlamalarını istemeden tetiklemesini önler.
Risk ve Uyumluluk Koruyucu Kuralları Özeti
Finansal aracıların koruyucu kuralları şunları içerir: pozisyon büyüklüğü sınırları, yasaklı araçlar listesi, PDT kuralı denetimi, oynaklığa göre ölçeklendirilmiş pozisyon büyüklüğü, risk profiline uygunluk eşleştirmesi, her önerinin denetim günlüğüne kaydedilmesi ve tüm çıktılara sorumluluk reddi beyanı eklenmesi.
Herhangi bir alım satım önerisini kesinleştirmeden önce tüm koruyucu kuralları mutlaka çalıştırın.
Sıkça Sorulan Sorular
“Risk ve Uyumluluk Güvenlik Sınırları” dersi ücretsiz mi?
Evet — “Risk ve Uyumluluk Güvenlik Sınırları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Agents kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Agents kursu toplamda 4 dersten oluşur.
“Risk ve Uyumluluk Güvenlik Sınırları” dersinde ne öğreneceğim?
Pozisyon büyüklüğü sınırları, yasaklı araç kontrolleri ve denetim günlüğü. AI Agents ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AI Agents öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Agents, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Risk ve Uyumluluk Güvenlik Sınırları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AI Agents dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Agents dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Piyasa Verisi API Entegrasyonu
- Portföy Analizi Aracı Araçları
- Risk ve Uyumluluk Güvenlik Sınırları
- Aracı Kararlarını Geriye Dönük Test Etme