MeowQuant bağımsız bir üçüncü taraf bilgi sitesidir, OKX'in resmî sitesi değildir. Kayıt düğmesi OK30001 davet kodunu içerir ve bu sayede tanıtım hizmet ücreti alabiliriz. Tam açıklama →

OKX · Risk yönetimi

Algo risk yönetimi: API otomatik işlemde nasıl batmazsın

Çoğu kişi algonun riskini piyasadan sanır: yönü yanlış görürsen kaybedersin. Ama bir süre betik çalıştırmış biri sana şunu söyler: hesabı anında sıfırlayan şey çoğu zaman piyasa değil, senin kendi kodundur — ters yazılmış bir yön, durdurulamayan bir döngü, bağlantı koptuktan sonraki bir çift emir. Elle işlem yaparken onaya basmadan önce son bir bakışın vardır; betiğin bu bakışı yoktur, sadakatle, art arda hatayı uygular.

Bu yazıda biz (MeowQuant editör ekibi) özellikle algo risk yönetimini, hem de «kod düzeyinde nasıl önlenir» açısından ele alıyoruz; «pozisyonu kontrol et» gibi havada laflar etmiyoruz. API işlemine özgü birkaç risk türünü açacağız, kopyalayabileceğin zarar durdur, bölünmüş pozisyon, yeniden deneme kodları vereceğiz, sonra hesap güvenliğinin alt sınırını ve «küçük tutarla soğuk başlangıç» sahaya çıkış sırasını netleştireceğiz. Okuyunca betiğine birkaç fren takabilmelisin; öyle ki hata yapsa bile seni batma noktasına sürüklemesin.

API işleminin özgün riskleri

Elle işlem ile API otomatik işlemin risk türleri farklıdır. Elle işlemin başlıca düşmanı duygu ve yargıdır; API işlemi bunun üstüne bir de «makineye özgü» bir risk türü ekler. Bunları tanımadan frenin nereye takılacağını bilemezsin.

Programın kaçması

En tipik olanı. Bir mantık yanlış yazıldı — alış-satış yönü ters, zarar durdur koşulu tersine yazılmış, döngünün çıkış koşulu eksik — program insan gibi durup «bir yanlışlık mı var» diye düşünmez, yanlış talimatı tekrar tekrar uygular. İnsan elle bir yanlış emir verince fark edebilir, betik saniyeler içinde onlarca yanlış emir verir. Kaçmanın yıkıcı gücü, tam da «sadakatinde»dir.

Çift emir

Ağ titremesi, istek zaman aşımı anında en sık çıkar. Bir emir isteği gönderdin, yanıt gelmedi, betik başarısız sandı ve yeniden gönderdi — ama aslında ilk emir gerçekleşmişti, sonuçta iki emir verdin. Bu çiftin/pozisyonun iki katına çıkması, riskin iki katına çıkması demektir. Çift emir genelde mantık hatası değil, «belirsiz ara durumun» kötü yönetilmesidir.

Bağlantı kopması ve düşme

Betik senin bilgisayarında ya da sunucunda çalışır, ağ koptuğu an borsayla bağlantısı kesilir. Kötü durum şudur: pozisyonun piyasada açıkta kalmışken, onu koruması gereken zarar durdur mantığı da betikle birlikte düşer. Sen yeniden bağlandığında durum çoktan değişmiş olabilir. Bağlantı kopması riskinin özü, tüm korumayı «betik hep çevrimiçi» varsayımına yüklememektir.

Risk uyarısı: Kripto varlık fiyatları şiddetle dalgalanır, anapara büyük ölçüde erijebilir, hatta sıfırlanabilir. API otomasyonu yukarıdaki her hata türünün uygulama hızını büyütür; üstüne vadeli işlem ve kaldıraç eklenince programın kaçması ya da çift emir çok kısa sürede %100 anapara kaybına yol açabilir. Bu yazı bir uygulama ve risk yönetimi deneyimi derlemesidir, hiçbir yatırım tavsiyesi oluşturmaz. Yalnızca tamamını kaybetmeyi göze alabileceğin parayı kullan, yerel yasalara da uy.

Pozisyon yönetimi ve bölünmüş pozisyon

Risk yönetiminin ilk duvarı, hiçbir tek hatanın tüm sermayene zarar verememesidir. Bu, pozisyon kurallarıyla sağlanır; üstelik bu kurallar koda gömülmeli, anlık iradene bırakılmamalıdır.

Bizim hep uyduğumuz birkaç ilke:

  • Tek emir üst sınırı koy. Hiçbir emir toplam sermayenin belli bir sabit oranını (örneğin %1–%2) aşmasın. Böylece bu emrin yönü tamamen yanlış olsa bile zararın bir tavanı olur.
  • Toplam pozisyon üst sınırı koy. Tüm açık pozisyonların toplamı bir üst tutarı aşmasın, programa tüm sermayeni bir kerede sokma fırsatı verme.
  • Bölünmüş pozisyon, hepsini bir kerede koyma. Sermayeyi birkaç parçaya bölüp kademe kademe gir, tek bir giriş noktasının yargı hatasının etkisini düşür.
  • Betiğe nakit bırak. Hesapta her zaman işleme katılmayan bir kısım sermaye tut; hem tampon hem de sorun çıktığında elle işlem yapabileceğin alan.

Bunları kodda sert kısıtlara dönüştür, emir vermeden önce kontrol et, sağlanmazsa emri reddet:

MAX_PER_ORDER_RATIO = 0.02   # Tek emir toplam sermayenin %2'sini aşmasın
MAX_TOTAL_RATIO     = 0.30   # Toplam pozisyon toplam sermayenin %30'unu aşmasın

def check_position_limit(okx, symbol, order_value_usdt):
    bal = okx.fetch_balance()
    equity = bal['USDT']['total']          # USDT cinsinden toplam özkaynak

    # Tek emir üst sınırı
    if order_value_usdt > equity * MAX_PER_ORDER_RATIO:
        raise ValueError('Tek emir pozisyon sınırı aşıldı, emir reddedildi')

    # Buraya ayrıca "mevcut toplam pozisyon + bu emir" MAX_TOTAL_RATIO'yu
    # aşmasın kontrolü eklenebilir
    return True

Bu kod karmaşık değil ama değeri şurada: «pozisyonu kontrol etmem lazım» iradesini, betiğin emir vermeden geçmesi zorunlu bir kapıya çevirir. İrade sallanır, kod sallanmaz.

Zarar durdur mutlaka programlı olmalı (kod)

Bu yazıdan tek bir cümle hatırlayacaksan, şunu hatırla: zarar durdur mutlaka programlı olmalı. Betik otomatik çalışır, ekranı 24 saat izleyemezsin; piyasa hızlı ters döndüğünde sen görüp elle kapatana kadar genelde birkaç fiyat kademesi geç kalmış olursun.

Programlı zarar durdurun iki yaklaşımı var, birlikte kullanmanı öneririz:

Yaklaşım bir: borsa tarafında koşullu emir / zarar durdur emri. Ana emri verirken aynı anda OKX'te bir zarar durdur emri as, borsa tetik fiyatında senin yerine pozisyonu otomatik kapatsın. En büyük faydası şu: betiğin düşse bile bu zarar durdur emri borsa tarafında çalışmaya devam eder. «Bağlantı kopunca pozisyon açıkta kalır» riskine karşı en güvenilir hamle budur.

Yaklaşım iki: betiğin yerel izleme + tetiklenince pozisyon kapatma. Betik döngüde pozisyonun zararını sürekli okur, koyduğun eşiği aşar aşmaz kendiliğinden pozisyon kapatma emri verir. Daha esnektir (takip eden zarar durdur, süreye dayalı zarar durdur vb. yapabilir) ama önkoşulu betiğin çevrimiçi olmasıdır.

Aşağıda yerel izlemeli zarar durdurun en yalın iskeleti, mantığı gösterir (gerçek hesap öncesi mutlaka demo hesapta doğrula):

import ccxt, time

okx = ccxt.okx({
    'apiKey':   'senin_apiKey',
    'secret':   'senin_secret',
    'password': 'senin_Passphrase',
    'enableRateLimit': True,
})

symbol      = 'BTC/USDT'
entry_price = 60000      # Giriş ortalama fiyatın (örnek)
amount      = 0.001      # Pozisyon miktarı
stop_ratio  = 0.05       # %5 düşünce zarar durdur

while True:
    ticker = okx.fetch_ticker(symbol)
    last = ticker['last']
    drawdown = (entry_price - last) / entry_price

    if drawdown >= stop_ratio:
        okx.create_order(symbol, 'market', 'sell', amount)
        print(f'Zarar durdur tetiklendi, piyasa fiyatıyla kapatıldı @ {last}')
        break

    time.sleep(10)   # Yeterli aralık bırak, API'yi dövme

İki noktaya dikkat: bir, döngüde mutlaka sleep olmalı, yoksa istek sınırına çarparsın; iki, yerel zarar durdur yalnızca destektir, bağlantı kopunca son savunma hattı borsa tarafındaki zarar durdur emridir, ikisini birden yapmak en sağlamı.

Çift emir ve bağlantı kopmasını önleme

Çift emrin kökü, «önceki emir gerçekleşti mi emin değilim»dir. Önlemenin özü: kör kör yeniden gönderme, önce durumu doğrula.

İki yöntem birlikte kullanılır:

İstemci tarafı özel emir numarası (clientOrderId) kullan. Emir verirken kendi ürettiğin benzersiz bir ID ekle, borsa aynı ID'yi görünce reddeder, bu doğal bir mükerrer önleme mekanizmasıdır. Zaman aşımı yüzünden yeniden göndersen bile borsa yalnızca ilk emri kabul eder.

import uuid

cid = 'meow-' + uuid.uuid4().hex[:16]   # Kendin ürettiğin benzersiz emir numarası

order = okx.create_order(
    symbol, 'limit', 'buy', 0.001, 50000,
    params={'clientOrderId': cid},       # Bunu ekle, yeniden gönderirsen yine bir kez sayılır
)

Zaman aşımı / bağlantı kopmasından sonra önce sorgula sonra tamamla. Emir isteği zaman aşımına uğradıysa doğrudan yeniden gönderme; önce açık emir sorgusu ya da pozisyon sorgusuyla önceki emrin gerçekten girip girmediğini doğrula, sonra tamamlayıp tamamlamayacağına karar ver. Yeniden bağlanınca da aynı — önce fetch_open_orders, fetch_positions ile mevcut gerçek durumu net gör, sonra stratejiyi sürdür. «Önce durumu sorgula, sonra eyleme geç»i yeniden bağlanmanın sabit ilk adımı yap, bağlantı kaybından doğan çoğu mükerrer işlemi engellersin.

Risk yönetimini ne kadar ince yaparsan yap, önkoşulu hesabın kendisinin temiz ve kontrol edilebilir olmasıdır. Betik çalıştırmak için özel bir hesabın yoksa ayrı bir tane açmanı, onu günlük paranla ayırmanı öneririz. OK30001 davet kodumuzla OKX'e kayıt ol, komisyonda indirim olur, API ile verilen emirler de aynı indirimden yararlanır. OKX'e kayıt olup API açmak için buraya tıkla →

İstek sınırı, zaman aşımı ve yeniden deneme

Risk yönetimi yalnızca para kaybını önlemek değil, betiğin «kendi kendini çökertmesini» önlemeyi de kapsar. İstek sınırı ve zaman aşımı kötü ele alınırsa stratejin kritik anda işlevsiz kalır.

İstek sınırı: Başlatırken 'enableRateLimit': True aç, ccxt istekler arasına otomatik aralık koyar. Yüksek frekanslı döngüde ayrıca üstel geri çekilme ekle (bir çarpışta 1 saniye, sonra 2, 4 saniye bekle). Bu kısmı API yaygın hataları yazımızda daha ince anlattık, burada sadece vurguluyoruz: döngüde API dövüyorsan hız sınırı standart donanımdır.

Zaman aşımı: İsteğe net bir zaman aşımı süresi koy, betiğin bir istek yüzünden takılıp tamamen donmasına izin verme. ccxt'te 'timeout' (milisaniye) ayarlanabilir:

okx = ccxt.okx({
    'apiKey':   'senin_apiKey',
    'secret':   'senin_secret',
    'password': 'senin_Passphrase',
    'enableRateLimit': True,
    'timeout': 10000,     # Tek istek 10 saniye zaman aşımı, donmayı önler
})

Yeniden denemenin üst sınırı olsun. Ağ titremesinde yeniden deneyebilirsin ama bir maksimum sayı koy, yeterince çarpınca uyarı ver/dur, sonsuz yeniden deneme yapma. Sonsuz yeniden deneme zaten bir tür «programın kaçması»dır — sen fark etmeden istekleri tüketmeye, hatta tekrar tekrar işlem yapmaya devam eder.

Yetki ve IP beyaz listesi: güvenlik alt sınırı

Risk yönetiminin en alt katmanı hesap güvenliğidir. Betiği ne kadar sağlam yazarsan yaz, bilgiler sızarsa her şey biter. Burada neredeyse istisnasız iki alt sınır var:

Sadece «Okuma» ve «İşlem»i işaretle, «Çekim»i asla. Algo çalıştırmak çekim eylemine hiç ihtiyaç duymaz. Key'in çekim yetkisi yoksa, apiKey, secret, Passphrase üçlüsü bir gün sızsa bile, onları ele geçiren kişi en fazla hesabında rastgele emir verir (bu da kötü ama yukarıdaki pozisyon ve zarar durdur kısıtları tampon olur), coin'lerini çıkaramaz. Çekimi bir kez işaretlersen, sızıntı kasanın anahtarını teslim etmek olur.

IP beyaz listesi kur. Betiğin sabit IP'li bir makinede çalışıyorsa (bulut sunucu, sabit genel IP'li ev interneti), o IP'yi Key'in beyaz listesine ekle, yalnızca ondan gelen isteği kabul et, güvenlik bir kademe daha yükselir. IP'n sık değişiyorsa beyaz liste her gün yanlışlıkla reddeder; bu durumda önce kurmayabilirsin ama bilgilerini mutlaka iyi sakla — yüklenebilecek koda gömme, ortam değişkeni ya da senkronize edilmeyen bir yapılandırma dosyası kullan.

Bu iki madde, önceki pozisyon ve zarar durdurla birlikte «en kötü durum gerçekleşse bile zararın bir sınırı olur» korumasını oluşturur. Key oluşturmanın somut adımları API'ye giriş yazımızda; Key açmadan önce bir de API yetki öz-kontrol listesiyle gözden geçirebilirsin.

Küçük tutarla soğuk başlangıç: gerçek para öncesi liste

Tüm kod düzeyi risk yönetimi kuruldu, gerçek hesaba çıkmadan son bir adım kaldı: baştan büyük pozisyon basma. Yeni strateji gerçek paraya çıktığında biz hep «küçük tutarla soğuk başlangıç» yaparız, sıra şöyle:

  • Önce demo hesapta kesintisiz çalıştır. Birkaç tur iniş çıkışı kapsa, emir, iptal, zarar durdur, geri çağrının hepsinin beklendiği gibi olduğunu doğrula. Bu adım sıfır maliyetlidir, atlamak gerçek parayı test ortamı yapmaktır.
  • Sonra çok küçük gerçek parayla soğuk başlat. Tutar, tamamı gitse bile üzülmeyeceğin kadar küçük olsun, onu eğitim parası say. Demo hesabın kopyalayamadığı kayma ve derinlik, ancak o zaman ortaya çıkar.
  • İlk birkaç gün başında dur. Gerçekten elini çekme, gerçek davranışın demo hesapla aynı olduğunu, zarar durdurun gerçekten tetiklendiğini, çift emir olmadığını doğrula, sonra kademe kademe artır.
  • Vadeli işlem ve kaldıraç en sona kalsın. Spot oturmadan kaldıraca dokunma. Kaldıraç yukarıdaki her risk türünü kat kat büyütür; yeni başlangıç aşamasında yalnızca spot yapmanı şiddetle öneririz.

Bu listeyi önceki kod kısıtlarıyla birleştirince betiğine taktığın yalnızca bir fren değil, birkaç fren olur: pozisyonun üst sınırı var, zarar durdur otomatik tetiklenir, çift emir engellenir, bilgiler sızsa bile para çıkarılamaz, sahaya çıkarken de önce küçük parayla denenir. Tek başına hiçbiri yeterli değil, birlikte «hata» ile «batma» arasına yeterli tampon koyar.

Test: bizim düştüğümüz tuzaklar

📋 Editör ekibi testi · 2026-06-04
11:30'da OKX demo hesabında bir zarar durdur döngüsü ayıklarken koşulu ters yazdık — «eşiğin altına düşünce kapat» niyetindeyken, mantığı «yukarı kırınca kapat» diye yazmışız, üstüne döngüye çıkış koşulu da koymamışız. Betik çalışınca saniyeler içinde art arda, asılması gerekmeyen bir dizi piyasa emri verdi, demo pozisyon birkaç kez ileri geri savruldu. Sahte para olduğu için sadece print ekranı doldururken izleyip Ctrl+C ile durdurduk, bu arada yönü düzeltip çıkış koşulu ve sleep(10) ekledik, bir de tek emir pozisyon üst sınırı kontrolünü koyduk. Bu olay gerçek hesapta, üstüne kaldıraçla olsaydı, o emir dizisi gerçek paranın art arda dışarı akması olurdu. Bu tökezleme şu anki kuralımızı doğrudan belirledi: zarar durdur mantığı önce demo hesapta doğrulanmalı, döngünün aralığı ve çıkış koşulu olmalı, emir vermeden önce pozisyon üst sınırı kontrolünden geçmeli — üçü de şart.

Sık sorulan sorular

API otomatik işlemde insanı en çok batıran risk nedir?

Piyasanın kendisi değil, programın «sadakati» — betik insan gibi tereddüt etmez. Ters çevrilmiş bir alış-satış yönü, çıkış koşulu eksik bir döngü, bağlantı koptuktan sonra tekrar gönderilen bir emir; elle çalışırken onaylamadan önce fark edebileceğin şeyleri, betik art arda onlarca kez uygular. Üstüne vadeli kaldıraç eklenince bu hata çok kısa sürede anaparayı sıfırlayabilir. Bunu önlemenin özü, risk yönetimini de koda yazmaktır, başında durmayı ummak değil.

Zarar durdur mutlaka koda mı yazılmalı? Elle takip etmek olmaz mı?

Programlı olmasını şiddetle öneririz. Betik otomatik çalışır, onu 24 saat başında bekleyemezsin; piyasa hızlı ters döndüğünde sen görüp elle zarar durdurana kadar genelde geç olur. Zarar durdur mantığını stratejiye yaz ya da OKX'in koşullu emir/zarar durdur emrini kullan, program tetik çizgisinde otomatik pozisyon kapatsın; ancak böyle otomatik işlemin temposuna yetişirsin. Elle takip yalnızca destek olabilir, tek savunma hattı olamaz.

Betiğin çift emir vermesi nasıl önlenir?

İki yöntem birlikte kullanılır. Bir, her emre bir istemci tarafı özel emir numarası (clientOrderId) eklemek; borsa aynı ID'yi görünce reddeder, doğal bir mükerrer önleme olur. İki, emir verdikten sonra mevcut açık emirlere ve pozisyona bakıp devam edip etmeyeceğine karar vermek, kör kör tur tur emir atmamak. Özellikle bağlantı kopması ya da zaman aşımından sonra önce durumu sorgula, sonra tamamla; önceki emir başarısız oldu varsayıp doğrudan yeniden gönderme.

API Key yetkisi nasıl ayarlanırsa güvenli olur?

Algo çalıştıran Key'de sadece «Okuma» ve «İşlem»i işaretle, «Çekim»i asla işaretleme. Böylece üç bilgi sızsa bile, onları ele geçiren kişi en fazla hesabında rastgele emir verir, coin'lerini çıkaramaz. Üstüne (sabit IP'li bir makinede çalıştırıyorsan) Key'e IP beyaz listesi bağla, yalnızca belirtilen IP'den gelen isteği kabul et, güvenlik bir kademe daha yükselir. Otomatik işlem zaten çekim eylemine hiç ihtiyaç duymaz.

Yeni strateji gerçek hesaba ilk çıkışta ne kadar yatırmalı?

Tamamını kaybetsen bile üzülmeyeceğin bir tutar kullan, onu anapara değil eğitim parası say. Önce demo hesapta akışı oturt, sonra çok küçük gerçek parayla soğuk başlangıç yap, ilk birkaç gün başında dur, gerçek davranışın demo hesapla aynı olduğunu, kayma ve gerçekleşmelerin beklendiği gibi olduğunu doğrula, sonra kademe kademe artır. Baştan büyük pozisyon basmak, doğrulanmamış kodu tüm sermayene oynamaktır.

Bağlantı koparsa çalışan betiğe ne olur?

Nasıl yazdığına bağlı. Kötü yazım, bağlantı kopunca isteğin zaman aşımına uğraması, betiğin çökmesi ya da kör kör yeniden deneyip çift emir vermesi; bu sırada pozisyonun zarar durdursuz piyasada açıkta kalır. Sağlam yol şu: isteğe zaman aşımı ve yeniden deneme üst sınırı koy, yeniden bağlanınca önce mevcut pozisyon ve açık emir durumuna bir kez bak sonra eyleme karar ver, ve (sadece betik yerel kararına değil) borsa tarafındaki zarar durdur emrine güven; böylece betik düşse bile pozisyon kapatma koruması borsa tarafında çalışmaya devam eder.

Risk yönetimi kodu bir kez yazınca bitmiş olmaz, stratejinle birlikte büyür. Bu yazının listesini kaydet, her yeni strateji çıkışında bir kez gözden geçir. Sonra betiğin kararlılığını tamamlamak için API yaygın hataları yazısına bakabilirsin, yeni kodu da hep önce demo hesapta doğrula. Şu eski sözü unutma: önce ayakta kal, sonra kazancı konuş.

Risk yönetimini kur, sonra stratejiyi senin yerine çalıştır

Önce hesabı ve API'yi hazırla, demo hesapta pozisyon, zarar durdur ve mükerrer önlemeyi doğrula, sonra küçük gerçek parayla soğuk başlat. Davet koduyla açılan yeni hesapta komisyon indirimi olur, API ile verilen emirler de aynı indirime tabidir.

OK30001 OK30001 ile OKX'e kayıt ol →

Kripto varlık fiyatları şiddetle dalgalanır, vadeli işlem ve kaldıraç anaparanın tamamen kaybına yol açabilir. Algoritmik ve otomatik işlem kâr garantisi vermez, yalnızca kaybetmeyi göze alabileceğin parayı kullan.