burakoner / btcturk.net Goto Github PK
View Code? Open in Web Editor NEWOpen source .Net API wrapper for the BtcTurk web API and websockets API
License: MIT License
Open source .Net API wrapper for the BtcTurk web API and websockets API
License: MIT License
How can we implement balance update message here?
Merhaba,
Aşağıdaki kodu çalıştırdığımda bakiye bilgisini başarıyla alabiliyorum.
var apiClient = new BtcTurkClient();
apiClient.SetApiCredentials("XXXXXXXX-API-KEY-XXXXXXXX", "XXXXXXXX-API-SECRET-XXXXXXXX");
var btc11 = apiClient.GetBalances();
Ancak aşağıdaki 2 kod bloğunu çalıştırdığımda ise "Server Error" hatası geriye dönüyor. Yukarıdaki koddan farklı olarak BaseAddress giriyorum.
var apiClient = new BtcTurkClient(new BtcTurkClientOptions { BaseAddress= "https://api-dev.btcturk.com/" });
apiClient.SetApiCredentials("XXXXXXXX-API-KEY-XXXXXXXX", "XXXXXXXX-API-SECRET-XXXXXXXX");
var btc11 = apiClient.GetBalances();
var apiClient = new BtcTurkClient(new BtcTurkClientOptions { BaseAddress= "https://api.btcturk.com" });
apiClient.SetApiCredentials("XXXXXXXX-API-KEY-XXXXXXXX", "XXXXXXXX-API-SECRET-XXXXXXXX");
var btc11 = apiClient.GetBalances();
BtcTürk Test için BaseAdress girdim çalışmadı. İlginç olan şu ki: Test değil de normal BtcTürk BaseAddress girdim o da çalışmadı. Fakat Options hiç girmesek o zaman çalışıyor.
Ancak BtcTürk Test üzerinde işlemler yapabilmem için BaseAdress değerini ayarlamam gerekiyor.
Yardımcı olursanız sevinirim.
getorderbook endpointi hata vermeye başladı
Merhaba BtcTürk sitesinde minimum emir tutarları aşağıdaki gibi listelenmiştir.
Örneğin buna göre BTCUSDT için minimum 1USDT, ETHUSDT için ise minimum 5USDT'lik işlem açmak gerekiyor.
Ancak API'den gelen Exchange bilgilerinde bir eksiklik var. Filters içerisindeki MinExchangeValue değeri her zaman web sitesinde gösterilen değerin 0.09 altında.
Örneğin aşağıdaki BTCUSDT için MinExchangeValue değeri 0.9 gösteriliyor. Oysa websitesinde 1 olarak belirtilmiş. Aynı şekilde manuel işlem açılmak istendiğinde de en az 1 dolar işlem açılabiliyor.
Api'den ETHUSDT için ise MinExchangeValue => 4.91 olarak geliyor. Ancak normalde en az 5 dolarlık işlem açılabiliyor.
Bir kaç yerde TickSize üzerinden hesap yapılması gerekiyor yazılıyordu.
Bu konuda bir fikriniz var mı? Aradaki 0.09'luk değer komisyon mu? Bunun tam hesaplaması için TickSize üzerinden mi yoksa başka şekilde mi bir hesap yapmak gerekiyor?
Teşekkürler.
Merhabalar,
GetTradeTransaction metodu imzalanarak yollanması gerekiyor fakat imzalanmadan yollanmış bu sebeple authantication hatası dönüyor bilginize.
Mithat Can
Merhaba @burakoner, beni hatırladığınızı düşünüyorum :), yıllar önce yazmış olduğum botu güncellemek için bazı adımlar atmaya karar verdim.
foreach (var pair in pairs)
{
sock.SubscribeToOrderBookFull(pair, (data) =>
{
if (data != null)
{
}
});
}
ile tüm pairlerin order booklarını takip etmeye çalışıyorum. Aynı zamanda SubscribeToTickersAsync
'e de bağlıyım. Pairs içerisinde 188 tane pair var. Yukarıdaki logic ile kullandığımda yaklaşık 5-10 adet paire bağlanıp diğerlerine ait herhangi bir sonuç göstermiyor.
BtcTurkSocketClientOptions
içerisinde kullanılmayan //MaxSocketConnections = 50 gördüm. Acaba herhangi bir yerde limit var mı diye düşündüm, sorunun kaynağı hakkında bir yorumunuz var mı acaba ?
Merhaba,
Btcturk endpointleri kullanıma açmış değil ancak bazı endpointlere erişebiliyoruz, preflight olarak gönderiliyor. Onlardan birisi de komisyon endpointi.
Account_Commissions_Endpoint = "account/commissions";
curl ile token vs girdikten sonra veriyi çekebiliyorum ancak BtcTurk.net ile kullanamadım.
Error {: No credentials provided for private endpoint } CryptoExchange.Net.Objects.NoApiCredentialsError
hatası veriyor.
public WebCallResult<BtcTurkCommissions> GetCommissions(CancellationToken ct = default) => GetCommissionsAsync(ct).Result;
public async Task<WebCallResult<BtcTurkCommissions>> GetCommissionsAsync(CancellationToken ct = default)
{
var result = await SingleApi.ExecuteAsync<BtcTurkApiResponse<BtcTurkCommissions>>(SingleApi.GetUri(Account_Commissions_Endpoint, PublicVersion), method: HttpMethod.Get, ct, signed: true).ConfigureAwait(false);
if (!result.Success) return result.AsError<BtcTurkCommissions>(new BtcTurkApiError(result.Error.Code, result.Error.Message, result.Error.Data));
if (result.Data.ErrorCode != "SUCCESS" && result.Data.ErrorCode.ToInt32Safe() > 0) return result.AsError<BtcTurkCommissions>(new BtcTurkApiError(result.Data.ErrorCode.ToInt32Safe(), result.Data.ErrorMessage, null));
return result.As(result.Data.Data);
}
namespace BtcTurk.Net.Objects.RestApi;
public class BtcTurkCommissions
{
public List<Datum> data { get; set; }
}
public class Datum
{
public string pairSymbolNormalized { get; set; }
public string pairSymbol { get; set; }
public string taker { get; set; }
public string maker { get; set; }
}
incelediğimden anladığım kadarıyla signed parametresi, bunun için kullanılıyor ancak her seferinde yukarıdaki hatayı alıyorum. Gözden kaçırdığım başka ne var acaba, yardımcı olabilir misiniz ?
Merhaba,
BTCUTURK API erişiminde sorun yaşıyorum al sat listele işlemlerini basit olarak gösteren C# kodları paylaşabilir misiniz?
Merhabalar,
BtcTurk.Net
versiyon 1.2.3 sürümünü yani en son sürümü kullanıyorum.
Uygulamam ayrıca Binance entegrasyonu için Binance.Net
kütüphanesini indirdim. (Sürüm: 6.4.1)
Binance.Net kütüphanesini ekledikten sonra Constructor'da tanımladığım BtcTurkSocketClient hata vermeye başladı.
Hata mesajını aşağıda görüntüleyebilirsiniz. Binance.Net kütüphanesini kaldırınca düzgün çalışmaya devam ediyor.
Her iki kütüphane de CryptoExchange.Net
kütüphanesini kullanıyor. Bilmiyorum belki sorun buradan kaynaklanıyor olabilir.
Binance.Net URL Adresi: https://github.com/JKorf/Binance.Net
Merhabalar,
BtcTürk ekibi ile yaptığım görüşmeler sonucunda Websocket üzerinden sipariş takibi yapılabildiğini söylediler.
Şöyle ki: Mevcut bir sipariş açıldığında/kapandığında/iptal edildiğinde soket üzerinden bunun bilgisi veriliyormuş.
Websocket bağlantısı yaparken 111 kodlu mesajı göndermek gerektiğini söylediler, oturum açılabilmesi için.
Sorum şu: Şu anda BtcTurk.Net C# kütüphanenizde Websocket üzerinden sipariş dinlemesi yapılabiliyor mu? Eğer yapılabiliyorsa, soket üzerinden nasıl oturum açıldığı ile ilgili örnek bir kod bloğu paylaşabilir misiniz?
Eğer sipariş dinlemesi yapılamıyorsa şu anda, yakın zamanda bu özelliği eklemeyi düşünüyor musunuz?
Teşekkürler. :)
Merhabalar,
Son versiyonunuzda WebSocket de order listen işlemi yapılabiliyor mu? Yazdığım botta GetOpenOrders() metoduyla bu bilgileri çekebiliyorum fakat api limiti olduğu için sıkıntı çıkıyor.
Selamlar, daha onceden kullandigim buy, sell order bir kaç saattir calismiyor. Btcturk icerisinde kullanici hareketlerinde de göremiyorum. Sizde sorunsuz calisiyor mu ? Sorunun kaynagi ne olabilir ?
Merhaba Burak abi hatırlarsınız beni, projemi bitirdim ve uzun süredir hataları, ufak tefek düzeltmeleri , stratejileri falan düzelttim geliştirdim. Gelişmiş ve yüzdesel olarak çok karlı bir sistem çıktı ortaya. Büyük yardımınız oldu bana, gelen ilk karları sizinle paylaşacağımı belirtmiştim. Sayfadaki Btc cüzdanının güncel ve size ait olup olmadığını sormak için yazıyorum. Ben, cevabınızı aldıktan sonra bunu kaldırabilirsiniz.
bu metod cagrilacak alinan symbol'un filtresinde cesitli bilgiler aliniyor
var symbols = exchangeData.Data.Symbols;
var exchangeData = await BtcTurkClientManager.BtcTurkClient.GetServerExchangeInfoAsync();
var btcTurkSymbols = symbols.Where(f => f.Denominator == "USDT" && f.Status == BtcTurkSymbolStatus.Trading).ToList();
foreach (var btcturkSymbol in btcTurkSymbols)
{
var tickSize = btcturkSymbol.Filters.First().TickSize;
}
Sitede 0.00000001 minimum deger ile basliyor ve 0.00000002 0.00000003 seklinde arttirilabiliyor
Ancak API'den gelen sonuc 0.0000000000001 seklinde.
Dogru minimum deger nasil bulunur ve tabi ki dogru precision?
Binance'da lotsizefilter kullanarak stepsize alinarak hesaplama yapilabiliyor
su sekilde
var stepSize = binanceSymbol.LotSizeFilter?.StepSize
var quantity = Math.Floor(baseAmount / stepSize) * stepSize;
Tam olarak olayi cözemesem de dökümantasyonda, API call'da ekstra olarak asagidaki özellikler de geliyor ancak bunun sizin wrapper'da bir karsiligini göremedim.
{
"currencySymbol":"Btc",
"withdrawalDisabled":false, --> means Btc withdrawals are enabled
"depositDisabled":false --> means Btc deposits are enabled
}
https://docs.btcturk.com/public-endpoints/exchange-info#2.-crypto-information
bu kisimlari nasil alabiliriz?
dsadsadsadsa
It gives Unauthorized error, I set default options before create client. I checked my ip adress from btcTurk and permissions.Everything seems alright but it gives error. Did I forget something before get account balance ?
`using BtcTurk.Net;
using CryptoExchange.Net.Authentication;
public class BtcTurkController
{
private BtcTurkClient client;
public void Initialize()
{
Authenticate();
client = new BtcTurkClient();
var ping = client.Ping();
Debug.Log($"BtcTurk Ping: {ping.Success}");
}
private void Authenticate()
{
BtcTurkClient.SetDefaultOptions(new BtcTurkClientOptions()
{
ApiCredentials = new ApiCredentials(Constants.BtcTurkApiKey, Constants.BtcTurkApiSecret),
});
}
public async void GetAccountInfo()
{
try
{
var accountInfo = await client.GetBalancesAsync();
if (accountInfo.Success)
{
string text = $"BtcTurk account info: {accountInfo.Data.Length}";
foreach (var balance in accountInfo.Data)
{
if (balance.Balance > 0)
{
text += $"\n{balance.Asset} -> {balance.Balance}";
}
}
Debug.Log(text);
}
else
{
Debug.Log($"error {accountInfo.ResponseStatusCode}");
}
}
catch
{
Debug.Log("An error occurred");
}
}
}`
NO_ORDER_MATCHES_YOUR_REQUEST hatası alıyorum
Merhabalar,
Websocket üzerinden SubscribeToTickerAsync() fonksiyonu ile "ticker" kanalına abone oldum.
Normalde (https://api.btcturk.com/api/v2/ticker?pairSymbol=BTC_USDT) adresinden de görüleceği üzere last diye bir alan var. Fakat gelen websocket cevabında "last" alanı yok.
Websocket üzerinden lastPrice'ı anlık olarak dinlemek istiyorum.
Yardımcı olur musunuz?
Teşekkürler.
Merhaba;
Bir yeni başlayan sorusu sormak isterim. Kütüphaneyi yüklemek istediğimde
Could not install package 'BtcTurk.Net 2.5.0'. You are trying to install this package into a project that targets '.NETFramework,Version=v4.6.1', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author. 0
şeklinde bir hata alıyorum. Uygulama geliştirmek için VS 2015 kullanmaktayım hangi frame work ile kütüphaneyi kullanabilirim?
Teşekkürler.
Socket authentication ile ilgili kod içerisinde BtcTurkAuthenticateSocket metodunda commentli bölümler bulunuyor. BtcTurk api dokümantasyonunda da bilgi görünmüyor. Kullanımla ilgili bilgi verebilir misiniz?
mithatcy
Selamlar @burakoner, pazar günü sizi rahatsız ediyorum ama k.bakmayın , sanırım issue'yi kapattığımız için son yazdıgım size bildirim olarak gelmedi ben hala order problemi yaşıyorum ve şöyle bi hata mesajı alıyorum, önceki mesajımı yapıştırıyorum buraya...
Tekrar selam, dün herhangi bi hata almıyordum ancak order da gerçekleşmiyordu. Az önce tekrar denedim şuan hata mesajı geliyor şu şekilde
2020.08.09 12:35:43:621 | Debug | All subscription successfully resubscribed on reconnected socket.
0x2474 iş parçacığı 0 (0x0) koduyla çıktı.
0x2588 iş parçacığı 0 (0x0) koduyla çıktı.
2020.08.09 12:36:03:625 | Info | Socket 1 error: System.IO.IOException: Unable to read data from the transport connection: Varolan bir bağlantı uzaktaki bir ana bilgisayar tarafından zorla kapatıldı..
---> System.Net.Sockets.SocketException (10054): Varolan bir bağlantı uzaktaki bir ana bilgisayar tarafından zorla kapatıldı.
--- End of inner exception stack trace ---
at System.Net.Security.SslStream.g__CompleteAsync|210_1[TWriteAdapter](ValueTask writeTask, Byte[] bufferToReturn)
at System.Net.Security.SslStream.WriteAsyncInternal[TWriteAdapter](TWriteAdapter writeAdapter, ReadOnlyMemory1 buffer) at SuperSocket.ClientEngine.AuthenticatedStreamTcpSession.SendInternalAsync(PosList1 items)
2020.08.09 12:36:03:627 | Info | Socket 1 Connection lost, will try to reconnect after 00:00:05
2020.08.09 12:36:03:630 | Info | Socket 1 error: System.Net.Sockets.SocketException (10057): Yuva bağlı olmadığından ve (bir veri birimi yuvasında bir sento çağrısı kullanırken) adres sağlanmadığından bir veri gönderme veya alma isteğine izin verilmedi.
2020.08.09 12:36:08:639 | Debug | Socket 1 resetting
2020.08.09 12:36:08:642 | Debug | Socket 1 connecting
2020.08.09 12:36:13:651 | Warning | Request timed out
2020.08.09 12:36:13:660 | Warning | Socket 1 message processing slow (72832ms), consider offloading data handling to another thread. Data from this socket may arrive late or not at all if message processing is continuously slow.
2020.08.09 12:36:13:663 | Debug | Socket 1 received data: [100,{"type":100,"id":0,"ok":true,"message":"join|tradeview:ATOMTRY_1"}]
2020.08.09 12:36:13:665 | Debug | Socket 1 sending data: [151,{"type":151,"channel":"tradeview","event":"DASHTRY_1","join":true}]
2020.08.09 12:36:13:667 | Debug | Socket 1 received data: [428,{"D":1596965700,"P":"ATOMTRY","R":1,"O":"34.8700000000","H":"34.8700000000","L":"34.8700000000","C":"34.8700000000","V":"0","channel":"tradeview","event":"ATOMTRY_1","type":428}]
2020.08.09 12:36:13:670 | Info | Socket 1 error: System.Exception: You must send data by websocket after websocket is opened!
2020.08.09 12:36:13:671 | Debug | Socket 1 received data: [100,{"type":100,"id":0,"ok":true,"message":"join|tradeview:BTCTRY_1"}]
2020.08.09 12:36:13:674 | Debug | Subscription completed
2020.08.09 12:36:13:676 | Debug | Socket 1 connection failed, state: Connecting
2020.08.09 12:36:13:676 | Debug | Socket 1 received data: [428,{"D":1596965700,"P":"BTCTRY","R":1,"O":"85577.0000000000","H":"85577.0000000000","L":"85577.0000000000","C":"85577.0000000000","V":"0","channel":"tradeview","event":"BTCTRY_1","type":428}]
2020.08.09 12:36:13:682 | Debug | Socket 1 failed to reconnect
2020.08.09 12:36:18:688 | Debug | Socket 1 resetting
2020.08.09 12:36:18:691 | Debug | Socket 1 connecting
0x2718 iş parçacığı 0 (0x0) koduyla çıktı.
2020.08.09 12:36:23:680 | Debug | Socket 1 sending data: [151,{"type":151,"channel":"tradeview","event":"EOSTRY_1","join":true}]
2020.08.09 12:36:23:682 | Info | Socket 1 error: System.Exception: You must send data by websocket after websocket is opened!
2020.08.09 12:36:23:684 | Debug | Socket 1 connection failed, state: Connecting
2020.08.09 12:36:23:687 | Debug | Socket 1 failed to reconnect
0x1538 iş parçacığı 0 (0x0) koduyla çıktı.
2020.08.09 12:36:28:699 | Debug | Socket 1 resetting
2020.08.09 12:36:28:701 | Debug | Socket 1 connecting
2020.08.09 12:36:33:692 | Debug | Socket 1 sending data: [151,{"type":151,"channel":"tradeview","event":"ETHTRY_1","join":true}]
2020.08.09 12:36:33:695 | Info | Socket 1 error: System.Exception: You must send data by websocket after websocket is opened!
2020.08.09 12:36:33:697 | Debug | Socket 1 connection failed, state: Connecting
2020.08.09 12:36:33:699 | Debug | Socket 1 failed to reconnect
2020.08.09 12:36:36:602 | Debug | Socket 1 received data: [991,{"type":991,"current":"5.1.0","min":"2.3.0"}]
2020.08.09 12:36:38:712 | Debug | Socket 1 resetting
2020.08.09 12:36:38:716 | Debug | Socket 1 connecting
2020.08.09 12:36:39:042 | Debug | Socket 1 connected
2020.08.09 12:36:39:043 | Debug | Socket 1 received data: [991,{"type":991,"current":"5.1.0","min":"2.3.0"}]
2020.08.09 12:36:39:045 | Info | Socket 1 reconnected after 00:00:35.4179164
2020.08.09 12:36:39:049 | Debug | Socket 1 sending data: [151,{"type":151,"channel":"ticker","event":"BTCTRY","join":true}]
2020.08.09 12:36:39:052 | Debug | Socket 1 sending data: [151,{"type":151,"channel":"ticker","event":"all","join":true}]
2020.08.09 12:36:39:055 | Debug | Socket 1 sending data: [151,{"type":151,"channel":"tradeview","event":"ATOMTRY_1","join":true}]
2020.08.09 12:36:39:058 | Debug | Socket 1 sending data: [151,{"type":151,"channel":"tradeview","event":"BTCTRY_1","join":true}]
2020.08.09 12:36:39:061 | Debug | Socket 1 sending data: [151,{"type":151,"channel":"tradeview","event":"DASHTRY_1","join":true}]
2020.08.09 12:36:39:063 | Debug | Socket 1 sending data: [151,{"type":151,"channel":"tradeview","event":"ETHTRY_1","join":true}]
2020.08.09 12:36:39:125 | Debug | Socket 1 received data: [100,{"type":100,"id":0,"ok":true,"message":"join|ticker:BTCTRY"}]
2020.08.09 12:36:39:128 | Debug | Subscription completed
2020.08.09 12:36:39:131 | Debug | Socket 1 received data: [402,{"B":"85600","A":"85659","PS":"BTCTRY","H":"86249","L":"85025","LA":"85600","O":"85499","V":"708.51982259","AV":"85749.813858","D":"160","DP":"0.12","DS":"TRY","NS":"BTC","PId":1,"channel":"ticker","event":"BTCTRY","type":402}]
2020.08.09 12:36:39:156 | Debug | Socket 1 received data: [100,{"type":100,"id":0,"ok":true,"message":"join|ticker:all"}]
2020.08.09 12:36:39:159 | Debug | Subscription completed
2020.08.09 12:36:39:206 | Debug | Socket 1 received data: [401,{"items":[{"B":"85600","A":"85659","PS":"BTCTRY","H":"86249","L":"85025","DP":"0.12","LA":"85600","O":"85499","V":"708.51982259","AV":"85749.813858","D":"160","DS":"TRY","NS":"BTC","PId":1,"Ord":0},
There is no endpoints on websocket channel, can we use rest api endpoints according to websocket datas ? If its possible, can you show me example code ?
Btw Thanks for contributions, Best Regards...
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.