Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Wyliczanie prowizji, Prosty(?) program do liczenia prowizji od kupna i sprzedazy kryptowalu
mareczek87
post 14.11.2015, 23:09:48
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 14.11.2015

Ostrzeżenie: (0%)
-----


Cześć, dopiero się ucze stąd z góry prośba o wyrozumiałość i o pomoc.

Postawiłem sobie małe zadanie, prosty przelicznik cen ze sprzedaży i kupna BTC - który bierze pod uwagę prowizje na giełdach.

[ZAKUP]
Podajesz mu cene na giełdzie,
podajesz mu za jaką kwotę chcesz kupić BTC,
podajesz mu prowizję,
wypluwa Ci ile kupisz BTC.

[SPRZEDAZ]
Podajesz mu cene na giełdzie,
podajesz mu ile chcesz sprzedać BTC
podajesz mu prowizję,
wypluwa Ci ile zyskujesz PLN

Sam temat wydaje się być bardzo prosty, ale robie to całkowicie sam i pomyślałem, że pomożecie w tych dwóch tematach.
A więc do dzieła, najpierw ZAKUP. Ubzdurałem sobie, że wszystkie wartości trzymam z dokładnością do 8 miejsca po przecinku, zatem zarówno PLNy jak i BTC mnoże i dziele przez 100000000. Doczytałem już, że do tych celów powinienem używać bcmath, stąd też tak wygląda moja implementacja.

Tam gdzie wartosc podaje jako integer, stosuje przedrostek 'i', tam gdzie spodziewam sie floata przedrostkiem jest litera 'f'
  1. <?
  2. function ConvertSatoshiToBTC($iSatoshi)
  3. {
  4. return bcdiv($iSatoshi, '100000000', 8);
  5. }
  6. function ConvertBTCToSatoshi($fBitcoins)
  7. {
  8. $fValue = bcmul($fBitcoins, '100000000', 10);
  9. $iValue = round($fValue,8);
  10. return $iValue;
  11. }
  12. function ConvertPLNToGrosze($fPLN)
  13. {
  14. $fValue = bcmul($fPLN, '100000000', 8);
  15. return bcmul($fValue, '1', 0);
  16. }
  17. function ConvertGroszeToPLN($iGrosze)
  18. {
  19. $fValue = bcdiv($iGrosze, '100000000', 10);
  20. $fValue = round($fValue,8);
  21. return $fValue;
  22. }
  23.  
  24. // Wylicza ile kupimy BTC za podana kwote
  25. // Dzielimy ilosc groszy, ktore wplaca uzytkownik przez cene w groszach na gieldzie
  26. function CalculateOrderQty($iMarketPrice, $iUserPrice)
  27. {
  28. $fOrderQty = 0;
  29. $fOrderQty = bcdiv($iUserPrice, $iMarketPrice, 8);
  30. return ConvertBTCToSatoshi($fOrderQty);
  31. }
  32. // Tutaj liczymy ile tak na prawde kosztuje nas zlecenie zakupu na taka ilosc BTC
  33. function CalculateOrderCost($iMarketPrice, $iUserCost)
  34. {
  35. $iOrderQty = CalculateOrderQty($iMarketPrice, $iUserCost);
  36. $iOrderCost = 0;
  37. $iOrderCost = bcmul($iOrderQty, $iMarketPrice, 10);
  38. $iOrderCost = bcdiv($iOrderCost, 100000000,10);
  39. $iOrderCost = round($iOrderCost, 0);
  40. return $iOrderCost;
  41. }
  42. // Zwraca ilosc ktora tak naprawde dostaje uzytkownik, potracona o prowizje
  43. function CalculateOrderQtyWithFee($iOrderQty, $fFee)
  44. {
  45. $fOrderQtyWithFee = bcmul($iOrderQty, $fFee, 10);
  46. $fOrderQtyWithFee = bcsub($iOrderQty, $fOrderQtyWithFee,10);
  47. $iOrderQtyWithFee = round($fOrderQtyWithFee,0);
  48. return $iOrderQtyWithFee;
  49. }
  50. // Zwraca kwote za ktora sprzedamy podana przez uzytkownika ilosc BTC po podanej cenie na Gieldzie
  51. function CalculateSellOrder($iMarketPrice, $iUserSatoshi)
  52. {
  53. $iOrder = bcmul($iUserSatoshi, $iMarketPrice, 10);
  54. $iOrder = bcdiv($iOrder, 100000000,10);
  55. $iOrder = round($iOrder, 0);
  56. return $iOrder;
  57. }
  58. // Zwraca ilosc w groszach potracona o prowizje
  59. function CalculateSellOrderWithFee($iOrderPrice, $fFee)
  60. {
  61. $fOrderQtyWithFee = bcmul($iOrderPrice, $fFee, 10);
  62. $fOrderQtyWithFee = bcsub($iOrderPrice, $fOrderQtyWithFee,10);
  63. $iOrderQtyWithFee = round($fOrderQtyWithFee,0);
  64. return $iOrderQtyWithFee;
  65.  
  66. }
  67.  
  68.  
  69.  
  70.  
  71. // Buy Test
  72. //2015-11-14 13:22:30 Kupno: 1343.9998 × 0.01041666 BTC = 14.0000 PLN
  73. $MarketPrice = 134399980000;
  74. $MarketFee = 0.0022;
  75. $UserPrice = 1400000000;
  76.  
  77. echo "<B>BUY TEST</B><BR>";
  78. echo "CENA GIELDY: ".$MarketPrice."<BR>";
  79. echo "TWOJA WPLATA: ".$UserPrice."<BR>";
  80. echo "ILOSC W ZLECENIU: ".CalculateOrderQty($MarketPrice, $UserPrice)."<BR>";
  81. echo "KWOTA ZA ILOSC W ZLECENIU: ".CalculateOrderCost($MarketPrice, $UserPrice)." (TYLE ZAPLACISZ)<BR>";
  82. echo "PROWIZJA: ".$MarketFee."<BR>";
  83. echo "TWOJA ILOSC PO PROWIZJI: ".CalculateOrderQtyWithFee(CalculateOrderQty($MarketPrice, $UserPrice),$MarketFee)."<BR>";
  84.  
  85. echo "<HR>";
  86.  
  87. // Sell test
  88. //2015-11-14 12:22:40 Sprzedaż: 1342.0100 × 0.01035522 BTC = 13.8968 PLN
  89. $MarketPrice = 134201000000;
  90. $MarketFee = 0.0022;
  91. $UserBitcoins = 0.01035522;
  92.  
  93. echo "<B>SELL TEST</B><BR>";
  94. echo "CENA GIELDY: ".$MarketPrice."<BR>";
  95. echo "TWOJE BTC: ".$UserBitcoins." (TYLE SPRZEDAJESZ)<BR>";
  96. echo "SPRZEDASZ ZA: ".CalculateSellOrder($MarketPrice, ConvertBTCToSatoshi($UserBitcoins))." (PRZED PROWIZJA)<BR>";
  97. echo "PO PROWIZJI: ".CalculateSellOrderWithFee(CalculateSellOrder($MarketPrice, ConvertBTCToSatoshi($UserBitcoins)), $MarketFee)."<BR>";
  98.  
  99.  
  100.  
  101. ?>

Wynik

Cytat
BUY TEST
CENA GIELDY: 134399980000
TWOJA WPLATA: 1400000000
ILOSC W ZLECENIU: 1041666
KWOTA ZA ILOSC W ZLECENIU: 1399998896 (TYLE ZAPLACISZ)
PROWIZJA: 0.0022
TWOJA ILOSC PO PROWIZJI: 1039374


SELL TEST
CENA GIELDY: 134201000000
TWOJE BTC: 0.01035522 (TYLE SPRZEDAJESZ)
SPRZEDASZ ZA: 1389680879 (PRZED PROWIZJA)
PO PROWIZJI: 1386623581


Pozwole sobie aktualizować wątek w miare rozwoju programu.

Ten post edytował Kshyhoo 14.11.2015, 23:31:41
Powód edycji: [Kshyhoo]: bb-code
Go to the top of the page
+Quote Post

Posty w temacie
- mareczek87   [PHP] Wyliczanie prowizji   14.11.2015, 23:09:48


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 14:59