outlier-1 / btcturkapi-python

Python Wrapper For Using BTCTurk Cryptocurrency Platform
MIT License
17 stars 0 forks source link

SCALE_LIMITS #11

Closed mstfimi closed 4 years ago

mstfimi commented 4 years ago

constants.py kısmında SCALE_LIMITS kısmını dinamik yapma şansı var mı? Yani btcturk price ve amount digitlerini değiştirdiği zaman kullanışsız olabilir bu haliyle. Ayrıca yeni bir coin/market eklendiğinde yine manuel olarak buraya ekleme durumunda kalacağız sanırım. O yüzden bu scaleler otomatik hesaplanırsa daha iyi olabilir.

Bir de SCALE_LIMITS içerisinde price_scale ve amount_scale kısımları neden her market için ikişer kez yazılmış acaba? Örneğin şu şekilde: 'BTCTRY': {'price_scale': 2, 'amount_scale': 8}, 'BTC_TRY': {'price_scale': 2, 'amount_scale': 8} ...

outlier-1 commented 4 years ago

Merhaba. Evet dinamik yapmak mümkündü fakat her emirde api call yapmamak için şimdilik statik kalmalarını tercih ettim.

Scale limitlerin değişmesi düşük olasılık ama yeni işlem çifti eklendiğinde benim güncellemem gerekiyor doğrudur fakat bu da şanslıysak birkaç ayda bir olduğundan şimdilik statik olarak sabitler kısmında tutuyorum.

Neden 2 kere yazıldığı kısmı için de maalesef btcturk api sembol parametrelerinde arada altyazı olan ve olmayan olarak 2 şekilde de kabul ediyor. Benim kütüphanem de en başından beri btcturk un bu kabulüne göre işlem yaptığından kullanıcılar en başından beri diledikleri formatta kullanıyorlar, ayrıca alınan sembollerin kontrolüyle vs kodu kirletmek istemediğimden kullanıcının her iki şekilde kullanabilmesi amacıyla sabitlerin bulunduğu dictionary’de 2 seçeneği de bulundurdum.

Hem Btcturkun orijinal api dökümantasyonu ile uyumlu olması hem de kütüphanenin önceki versiyonlarla tutarlı olması açısından yapılmış bir tasarım tercihi kısaca.

Dinamik olarak api call ile alınması durumu o bilginin memory’den alınmasına göre yavaş olacağından benim gibi yüksek frekansta emir girenler için pek verimli olmaz, o sebeple ilk tercihim olmadı ama ilerleyen zamanlarda duruma göre değişiklik yapabilirim.

İyi çalışmalar

26 May 2020 Sal, saat 14:06 tarihinde mstfimi notifications@github.com şunu yazdı:

constants.py kısmında SCALE_LIMITS kısmını dinamik yapma şansı var mı? Yani btcturk price ve amount digitlerini değiştirdiği zaman kullanışsız olabilir bu haliyle. Ayrıca yeni bir coin/market eklendiğinde yine manuel olarak buraya ekleme durumunda kalacağız sanırım. O yüzden bu scaleler otomatik hesaplanırsa daha iyi olabilir.

Bir de SCALE_LIMITS içerisinde price_scale ve amount_scale kısımları neden her market için ikişer kez yazılmış acaba? Örneğin şu şekilde: 'BTCTRY': {'price_scale': 2, 'amount_scale': 8}, 'BTC_TRY': {'price_scale': 2, 'amount_scale': 8} ...

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/outlier-1/btcturkapi-python/issues/11, or unsubscribe https://github.com/notifications/unsubscribe-auth/AFN2PVAZKZIH64XIUV2HAITRTOPCDANCNFSM4NKGSNEA .

mstfimi commented 4 years ago

Cevap için teşekkürler. Ben Binance için olan kullanımımda örneğin her gün 00.00 saatinde price ve amount scale'lerini çekip o sayıları kod yardımıyla güncelliyorum. Bu sayede dediğiniz gibi her istek yaptığım zaman kontrol etmem gerekmiyor. Sadece fikir olması için söylüyorum, belki siz de belli frekanslarla constant.py scriptini otomatik güncelleyecek bir yapı kurarsanız yeni market eklendiği zaman da tekrar değiştirme ihtiyacı hissetmezsiniz. Ayrıca yakın zamanda XRPTRY ve USDTTRY çiftlerinde price_scale'ler değiştir eğer yanlış hatırlamıyorsam.

İyi çalışmalar.

outlier-1 commented 4 years ago

İlginiz için teşekkür ederim, vakit bulduğumda dediğinize benzer rest apiyi yormayacak bir çözüm üretip güncelleyeceğim.

Kolay gelsin

mstfimi commented 3 years ago

Merhaba tekrardan, son zamanlarda btcturk'e yeni coinler eklenince bu issue'ye yorum yazmak istedim. SCALE_LIMITS kısmını otomatik oluşturmayı önermiştim ama bu konuda herhangi bir çalışma yaptınız mı acaba? Yeni bir coin eklendiği zaman alım satım yapmak için SCALE_LIMITS kısmına manuel olarak eklemek gerekiyor sanırım şu an hala. Bilgilendirme yapabiirseniz sevinirim.

outlier-1 commented 3 years ago

Selamlar, birkaç patch önce ekledim o özelliği, tamamen otomatik o sistem. Eski sürümü kullanıyor olabilirsiniz, mümkünse pip üzerinden paketi bir upgrade edin. Bu konuda problem çıkmaması gerekiyor

mstfimi commented 3 years ago

Şimdi gördüm upgrade sonrası. Teşekkürler. Kullanım hakkında bilgi verebilir misiniz? Emir verirken fiyat ve miktar scale'ini belirtmek gerekiyor mu yoksa fiyat olarak 1.122222222222 de yazsak alış/satış emri iletiliyor mu? Bir de scale_limits altındaki 'has_fraction': True/False neyi ifade ediyor bunu da açıklar mısınız? Kullanımı hakkında bilgi olursa güzel olabilir.

outlier-1 commented 3 years ago

Bütün kütüphaneyle ilgili detaylı bir dökümantasyon hazırladım onu görmemiş olabilirsiniz paylaşayım;

https://btcturkapi-python.readthedocs.io/en/latest/

Burada detaylı her senaryo için örnekler vererek kullanımı açıklamaya çalıştım

mstfimi commented 3 years ago

burayı inceledim aslında ama has_fraction ile ilgili bir sekme görmemiştim. Bir kez daha inceleyeyim umarım bulurum. Teşekkürler.

outlier-1 commented 3 years ago

Tekrar selamlar,

has_fraction ile ilgili bir şey bulamamanız doğal çünkü son kullanıcının müdahale etmemesi gerekiyor. Client internal olarak kullanıyor o yapıyı. Ama ne işe yarıyor derseniz kısaca açıklayayım:

Btcturk'un web ara yüzünden istediğiniz bir pairi seçip order oluşturmayı deneyin. Aynı zaman da order oluşturmaya çalıştığınız pair için; https://api.btcturk.com/api/v2/server/exchangeinfo adresine gidip o pair'in exchange bilgisini inceleyin,

has_fraction'un false set edildiği pairlerde numerator ve denominator scale'leri override ediliyor. Yani fiyat girerken ondalıklı sayı giremiyorsunuz.

Client de siz api üzerinden order price verdiğinizde has_fraction'ın false olduğu pairlerde virgülden sonra girdiğiniz sayıyı yok sayıyor. Çünkü yok saymazsa btcturk server'ı "400 bad request" dönüyor. Umarım netleştirebilmişimdir.

outlier-1 commented 3 years ago

Emir verirken fiyat ve miktar scale'ini belirtmek gerekiyor mu yoksa fiyat olarak 1.122222222222 de yazsak alış/satış emri iletiliyor mu?

Hayır, siz fiyat olarak ne girerseniz girin emir girdiğiniz işlem çifti için doğru format neyse verdiğiniz emir o şekilde düzenleniyor. Örneğin virgülden sonra 2 basamak kabul eden bir işlem çiftine fiyat olarak 1.122222222 girdiniz. Btcturk api'ye emir iletilirken 1.22 olarak iletiliyor.

Bir de scale_limits altındaki 'has_fraction': True/False neyi ifade ediyor bunu da açıklar mısınız? Kullanımı hakkında bilgi olursa güzel olabilir.

has_fraction'u bir üstteki yorumumda anlattım, yine de tekrar etmek gerekirse o son kullanıcıyı ilgilendirmeyen bir yapı. Zaten kodu değiştirmediğiniz sürece has_fraction ile ilgili bir müdahale yapmanız mümkün değil.

mstfimi commented 3 years ago

anladım teşekkürler, scale_limits bu haliyle çok daha iyi olmuş ama her istekte +1 olarak exchange_info methodu kullanılıyor gibi anladım (virgülden sonraki digitleri hesaplamak için) bu biraz benim için yavaşlık katabilir o yüzden de kodda düzenlemeler de yapıyorum. Ayrıca balance methodunda değişiklik yapmışsınız sanırım, dönen değeri kullanmak önceden çok daha kullanışlı gibi geldi: tl_balance = balance['TRY'] gibi. şu anki haliyle balance döngüsü biraz daha farklı, yine de teşekkürler elinize sağlık.

outlier-1 commented 3 years ago

Hayır daha önceden otomatik servera call yapmak yerine scale bilgilerini dosyadan okumayı tercih etme nedenim performans konusuydu zaten, requestleri yavaşlatma konusu kırmızı çizgim. Bir özellik ekleyeceksem mutlaka hali hazırdaki requestlere ek yük bindirmemesi gerekiyor.

Bu sebeple yalnızca en başta client'i oluştururken okuyorum o bilgileri.

Balance methodunu değiştirdim evet. Eskiden tek parametre vermeniz halinde dictionary, pair listesi vermeniz halinde liste dönüyordu. Consistency'yi bozması hoşuma gitmediğinden güncelledim. Şu an yalnızca liste dönüyor.

Eğer tek parametre verirseniz tek elemanlı bir liste döneceğinden tek satırda şu şekilde bakiyeyi öğrenebilirsiniz:

my_client.get_account_balance(assets=['BTC'])[0]['balance']

'0.0003670154826363'
mstfimi commented 3 years ago

Teşekkürler bilgi için. ScaleLimits kısmı çok güzel gözüküyor. Dict'i oluştururken şu şekilde koşullu yaklaşım daha kısa olmaz mıydı ilerde has_fraction kısmını tekrar kontrol etmek yerine? scale_limits[name] = { "price_scale": price_scale if has_fraction else 0, "amount_scale": amount_scale, "has_fraction": has_fraction, }

price_scale kısmını başta 0 olarak atasak daha iyi olur diye düşündüm. Kaçırdığım bir nokta varsa düzeltirseniz memnun olurum.

outlier-1 commented 3 years ago

Hayır dediğiniz gibi yapmak da mümkün hatta evet bir tık daha güzel görünür.

En başından o kontrolü yapmamamız gerekiyor aslında da btcturk apisinin bir garipliği bu, adamlar has_fraction false olmasına rağmen yanlış 0'dan farklı yanlış bir scale veriyordu en son. İnsanlar hata aldığı için ekledim bu check'i.

Normalde has_fraction false ise scale'i 0 dönmeleri lazım mantıken ama dönmüyordu.

Bu tarz bir düzeltmeyi şimdi tek başına değil de ileriki patchlerde başka özellikler eklediğimde eklerim muhtemelen. İşten fırsat bulabilsem web socket desteği ekleyeceğim de hayırlısı bakalım

mstfimi commented 3 years ago

Teşekkürler, bekliyoruz çalışmalarınızı. Kolay gelsin.