Post
Topic
Board Alternatif Kripto-Paralar
Merits 1 from 1 user
Re: Order Emirinde Kaçıncı Sıradayım Ne Zaman Sıra Gelir Öğrenme
by
GGurol
on 30/11/2018, 07:55:24 UTC
⭐ Merited by Carolina34 (1)
Öncelikle kendi açık emirlerimizi görebilmemiz için Binance'ın private API'sini kullanıyoruz. Ben epey sadeleştirdim buradaki amaca dönük olarak.

Bu  dosyaya api.php adını verelim ve aşağıdaki kodu ekleyelim.
Bu dosyada herhangi bir değişikliğe gerek yok.

Code:

class Binance
{
    public 
$btc_value 0.00;
    protected 
$base "https://www.binance.com/api/"$api_key$api_secret;

    public function 
__construct($api_key$api_secret)
    {
        
$this->api_key $api_key;
        
$this->api_secret $api_secret;
    }

    public function 
openOrders($symbol)
    {
        return 
$this->signedRequest("v3/openOrders", ["symbol" => $symbol]);
    }


    private function 
request($url$params = [])
    {
        
$headers[] = "User-Agent: Mozilla/4.0 (compatible; PHP Binance API)\r\n";
        
$query http_build_query($params'''&');
        return 
json_decode($this->http_request($this->base $url '?' $query$headers), true);
    }

    public function 
http_request($url$headers$data = array())
    {
        
$ch curl_init();
        
curl_setopt($chCURLOPT_URL$url);
        
curl_setopt($chCURLOPT_HTTPHEADER$headers);
        
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
        
curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
        if (
$data) {
            
curl_setopt($chCURLOPT_POST1);
            
curl_setopt($chCURLOPT_POSTFIELDS$data);
        }
        
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
        
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
        
curl_setopt($chCURLOPT_TIMEOUT5);
        
curl_setopt($chCURLOPT_ENCODING"");
        
$content curl_exec($ch);
        if (
curl_errno($ch)) {
            
$content false;
        }
        
curl_close($ch);
        return 
$content;
    }


    private function 
signedRequest($url$params = [])
    {
        
$headers[] = "User-Agent: Mozilla/4.0 (compatible; PHP Binance API)\r\nX-MBX-APIKEY: {$this->api_key}\r\n";
        
$params['timestamp'] = number_format(microtime(true) * 10000'.''');
        
$query http_build_query($params'''&');
        
$signature hash_hmac('sha256'$query$this->api_secret);
        
$endpoint "{$this->base}{$url}?{$query}&signature={$signature}";
        return 
json_decode($this->http_request($endpoint$headers), true);
    }
}

?>


Şimdide binance.php ya da adını ne isterseniz koyun, yeni bir php dosyası oluşturup içine aşağıdaki kodları giriyoruz.

Code:
require 'api.php';


//////////sadece bu 4 satir editlenecek///////////
$type "BUY";
$api "";
$secret  ="";
$pair"HOTBTC";
/////////////////////////////////////////////


//multidimentional arrayda arama fonksiyonu
function search($array$key$value)
{
    
$results = array();

    if (
is_array($array)) {
        if (isset(
$array[$key]) && $array[$key] == $value) {
            
$results[] = $array;
        }

        foreach (
$array as $subarray) {
            
$results array_merge($resultssearch($subarray$key$value));
        }
    }

    return 
$results;
}




$api = new Binance("api buraya""secret buraya");
$openorders $api->openOrders("{$pair}");


$yeni_array search($openorders[0], "side"$type); // SATIÞ emri için SELL, alýþ emri için BUY diyoruz ve yeni bir array oluþturuyoruz.

$price $yeni_array[0]['price']; // kendi satis fiyatimizi aldik.

if($price=='') {
       echo 
"Acik {$type} Emri Yok
"
;
} else {
echo 
"Girilen {$type} Emir Fiyati:" $price "
"
;
}
//simdi orderbook listelemesi yapacagiz.

$link "https://api.binance.com/api/v1/depth?symbol={$pair}&limit=1000";
$page file_get_contents($link);
$response json_decode($pagetrue);


//bids al emirleri
//asks sat emirleri

echo "#FiyatAdet";


$i=0;
foreach(
$response['asks'] AS $key) // public orderlarý lsiteliyoruz

echo "{$i}{$response['asks'][$i][0]}{$response['asks'][$i][1]}";

//echo $i . "-)" . $response['asks'][$i][0] . " - " . $response['asks'][$i][1] . "
"; // fiyatini ve adedini bas


$count+=$response['asks'][$i][1]; // toplam alim adetlerini hesapla



if($response['asks'][$i][0]==$price) // emirlerdeki fiyat ile kendi fiyatimiz eslesince, loopu durdur.

//echo "TOTAL:{$count}
";

echo "TOPLAM ADET{$count}";

break;
}

$i++;


}

echo 
"";

?>





Hepsi bu, kodu kendinize göre özelleştirebilirsiniz, ben vakit darlığından çokbasit şekilde ekrana yazdırdım sadece echo diyerek, siz daha güzel tablolar ile yapabilrisiniz.
Biraz daha zaman ayırarak kodun performasnı arttırılabilir, looplardan pek hoşlanmam genelde ama yazması en kısa şekli bu oldu şimdilik.
Eğer hâkimseniz, kendi fiyatınız ile orderbook arrayını karşılaştırıp gerekli verileri direk basan bir fonksiyon da yazabilirsiniz.
Buradaki işlem çok zor olmadığından performans olarak pek farkı yok ama daha temiz kodlama yapılabilir zamanınız varsa.

Karşınıza şöyle birşey çıkacak;