Wyliczanie - mój mały program w PHP

Początkujący
Posty: 2
Rejestracja: 14 listopada 2015
Reputacja: 0
Reputacja postu: 
0
Napiwki za post: 0 BTC

Wyliczanie - mój mały program w PHP

Postautor: mareczek » sobota, 14 listopada 2015, 22:29

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

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.

Zacznijmy od wyliczenia, ilości BTC które kupie bez prowizji. Zakładam że to jest podstawa do wyliczania reszty, zatem prośba o sprawdzenie czy faktycznie dobrze to robie :)

Kod: Zaznacz cały

<?
function ConvertSatoshiToBTC($iSatoshi)
{
    return bcdiv($iSatoshi, '100000000', 8);
}
function ConvertBTCToSatoshi($fBitcoins)
{
    $fValue = bcmul($fBitcoins, '100000000', 10);
    $iValue = round($fValue,8);
    return $iValue;
}
function ConvertPLNToGrosze($fPLN)
{
    $fValue = bcmul($fPLN, '100000000', 8);
    return bcmul($fValue, '1', 0);
}
function ConvertGroszeToPLN($iGrosze)
{
    $fValue = bcdiv($iGrosze, '100000000', 10);
    $fValue = round($fValue,8);
    return $fValue;
}

// Wylicza ile kupimy BTC za podana kwote
// Dzielimy ilosc groszy, ktore wplaca uzytkownik przez cene w groszach na gieldzie
function CalculateOrderQty($iMarketPrice, $iUserPrice)
{
    $fOrderQty = 0;
    $fOrderQty = bcdiv($iUserPrice, $iMarketPrice, 8);
    return ConvertBTCToSatoshi($fOrderQty);
}
// Tutaj liczymy ile tak na prawde kosztuje nas zlecenie zakupu na taka ilosc BTC
function CalculateOrderCost($iMarketPrice, $iOrderQty)
{
    $fQtyInBTC = ConvertSatoshiToBTC($iOrderQty);
 tyWithFee = bcsub($iOrderPrice, $fOrderQtyWithFee,10);
    $iOrderQtyWithFee = round($fOrderQtyWithFee,0);
    return $iOrderQtyWithFee;

}




// Buy Test
//2015-11-14 13:22:30	Kupno:	 	 	1343.9998	×	0.01041666 BTC	=	14.0000 PLN
$MarketPrice = 134399980000;
$MarketFee = 0.0022;
$UserPrice = 1400000000;

echo "<B>BUY TEST</B><BR>";
echo "CENA GIELDY: ".$MarketPrice."<BR>";
echo "TWOJA WPLATA: ".$UserPrice."<BR>";
echo "ILOSC W ZLECENIU: ".CalculateOrderQty($MarketPrice, $UserPrice)."<BR>";
echo "KWOTA ZA ILOSC W ZLECENIU: ".CalculateOrderCost($MarketPrice, CalculateOrderQty($MarketPrice, $UserPrice))." (TYLE ZAPLACISZ)<BR>";
echo "PROWIZJA: ".$MarketFee."<BR>";
echo "TWOJA ILOSC PO PROWIZJI: ".CalculateOrderQtyWithFee(CalculateOrderQty($MarketPrice, $UserPrice),$MarketFee)."<BR>";

echo "<HR>";

// Sell test
//2015-11-14 12:22:40	Sprzedaż:	 	 	1342.0100	×	0.01035522 BTC	=	13.8968 PLN
$MarketPrice = 134201000000;
$MarketFee = 0.0022;
$UserBitcoins = ConvertBTCToSatoshi(0.01035522);

echo "<B>SELL TEST</B><BR>";
echo "CENA GIELDY: ".$MarketPrice."<BR>";
echo "TWOJE BTC: ".$UserBitcoins." (TYLE SPRZEDAJESZ)<BR>";
echo "SPRZEDASZ ZA: ".CalculateSellOrder($MarketPrice, $UserBitcoins)." (PRZED PROWIZJA)<BR>";
echo "PROWIZJA: ".$MarketFee."<BR>";
echo "PO PROWIZJI: ".CalculateSellOrderWithFee(CalculateSellOrder($MarketPrice, $UserBitcoins), $MarketFee)."<BR>";



?>


Wynik
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: 1035522 (TYLE SPRZEDAJESZ)
SPRZEDASZ ZA: 1389680879 (PRZED PROWIZJA)
PROWIZJA: 0.0022
PO PROWIZJI: 1386623581
Wygląda na to że działa OK, może się przyda komuś.
Ostatnio zmieniony środa, 18 listopada 2015, 21:31 przez mareczek, łącznie zmieniany 2 razy.

Bardzo Zły Moderator
Awatar użytkownika
Posty: 14380
Rejestracja: 16 kwietnia 2012
Reputacja: 2659
Reputacja postu: 
0
Napiwki za post: 0 BTC
Lokalizacja: Polska/Wwa/GW

Re: Wyliczanie - mój mały program w PHP

Postautor: rav3n_pl » niedziela, 15 listopada 2015, 18:33

Nie wiesz, z jaką dokładnością liczy giełda, zawsze może jakiś grosz lub satoshi się różnić.
Piffko: PLC/BTC 1Rav3nkMayCijuhzcYemMiPYsvcaiwHni
BIP39 Mnemonic z talii kart
Bitcoin Core 0.26.1
Linki do YT, TT, LI i reszty

Dyskutant
Posty: 217
Rejestracja: 16 marca 2013
Reputacja: 15
Reputacja postu: 
0
Napiwki za post: 0 BTC

Re: Wyliczanie - mój mały program w PHP

Postautor: sawek » niedziela, 15 listopada 2015, 21:30

Ja bym pomyslal nad innym rozwiazaniem prowizji

Lista rozwijana i wybieram sobie gielde do ktorej jest juz przypisana prowizja

a dalej idac mozliwosc porownania kilku gield

Mozna by podebrac kurs, prowizje i juz wiemy gdzie najlepiej kupic-sprzedac

Początkujący
Posty: 2
Rejestracja: 14 listopada 2015
Reputacja: 0
Reputacja postu: 
0
Napiwki za post: 0 BTC

Re: Wyliczanie - mój mały program w PHP

Postautor: mareczek » poniedziałek, 16 listopada 2015, 13:34

rav3n_pl:
Akurat to że nie wiemy z jaką dokładnością liczą giełdy to jest przykre, przecież powinno to być jasno napisane ?

sawek:
To moj pierwszy program w php, robie to dla zabawy

Chodziło mi raczej o poprawność liczenia :)

Rozmowny
Awatar użytkownika
Posty: 59
Rejestracja: 25 października 2015
Reputacja: 0
Reputacja postu: 
0
Napiwki za post: 0 BTC
Lokalizacja: Kraków

Re: Wyliczanie - mój mały program w PHP

Postautor: codemasterpl » środa, 18 listopada 2015, 15:25

rav3n_pl pisze:Nie wiesz, z jaką dokładnością liczy giełda, zawsze może jakiś grosz lub satoshi się różnić.
To bardzo ciekawe co piszesz..
Spróbujmy zapytać o to przedstawicieli giełd.
Nie chcąc spekulować, sugeruje po prostu zapytać..


Jeśli faktycznie tak jest, to kazdy grający musi być świadomy straty bądź zysku?

Bardzo Zły Moderator
Awatar użytkownika
Posty: 14380
Rejestracja: 16 kwietnia 2012
Reputacja: 2659
Reputacja postu: 
0
Napiwki za post: 0 BTC
Lokalizacja: Polska/Wwa/GW

Re: Wyliczanie - mój mały program w PHP

Postautor: rav3n_pl » środa, 18 listopada 2015, 15:53

Ja (gdybym był giełdą) dla bezpieczeństwa przy zakupie BTC dawałbym o 1 sato mniej i pewnie przy sprzedaży 1 grosz mniej... Tak na wszelki wypadek :)
Piffko: PLC/BTC 1Rav3nkMayCijuhzcYemMiPYsvcaiwHni
BIP39 Mnemonic z talii kart
Bitcoin Core 0.26.1
Linki do YT, TT, LI i reszty

Rozmowny
Awatar użytkownika
Posty: 59
Rejestracja: 25 października 2015
Reputacja: 0
Reputacja postu: 
0
Napiwki za post: 0 BTC
Lokalizacja: Kraków

Re: Wyliczanie - mój mały program w PHP

Postautor: codemasterpl » środa, 18 listopada 2015, 21:08

No to, pomogę koledze - po kolei.


BITMARKET.PL - prowizja 0.22%


ZAKUP

Kalkulator wylicza mi:
Obrazek
Obrazek

Zlecam zakup @ BitMarket.pl

Obrazek

Wynik w skrypcie / na giełdzie
Obrazek
Obrazek

SPRZEDAZ

Wyliczam:
Obrazek
Obrazek

Składam zlecenie @ BitMarket.pl

Obrazek


Wynik w skrypcie / na giełdzie
Obrazek
Obrazek


Działa.
Ostatnio zmieniony środa, 18 listopada 2015, 21:27 przez codemasterpl, łącznie zmieniany 1 raz.

Rozmowny
Awatar użytkownika
Posty: 59
Rejestracja: 25 października 2015
Reputacja: 0
Reputacja postu: 
0
Napiwki za post: 0 BTC
Lokalizacja: Kraków

Re: Wyliczanie - mój mały program w PHP

Postautor: codemasterpl » środa, 18 listopada 2015, 21:20

BitBay - prowizja 0.43%

ZAKUP

Wyliczam:
Obrazek
Obrazek

Skladam zlecenie na gieldzie:
Obrazek

Wynik:
Obrazek
Obrazek

Działa.

Rozmowny
Awatar użytkownika
Posty: 59
Rejestracja: 25 października 2015
Reputacja: 0
Reputacja postu: 
0
Napiwki za post: 0 BTC
Lokalizacja: Kraków

Re: Wyliczanie - mój mały program w PHP

Postautor: codemasterpl » środa, 18 listopada 2015, 21:35

Nevbit - prowizja 0.48%

Zlecam zakup:
Obrazek
Obrazek

Giełda:
Obrazek

Ostatecznie:
Obrazek
Obrazek



Możesz być z siebie dumny.
Good job.

Wróć do „Programowanie i wdrożenia”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 10 gości