0Pricing
AI Agents · Ders

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

  1. Piyasa Verisi API Entegrasyonu
  2. Portföy Analizi Aracı Araçları
  3. Risk ve Uyumluluk Güvenlik Sınırları
  4. Aracı Kararlarını Geriye Dönük Test Etme
← AI Agents Sayfasına Dön