01BTC10 (OP)
VIP
Hero Member
Offline
Activity: 756
Merit: 503
|
|
November 20, 2013, 04:46:37 PM |
|
It is not my work. You can contact MadAlpha
|
|
|
|
Timmieman
|
|
November 29, 2013, 06:15:45 PM |
|
I`ve been trying to get this bot to work though it keeps spitting out the same error: Warning: file_get_contents(https://btc-e.com/api/2/btc_usd/depth): failed to open stream: Invalid argument in D:\Apps\XAMPP\bot.php on line 118
Public API error: Connection error My IP is not blacklisted or anything, it still pumps out values. Does anyone know how this could be fixed? With best regards, Tim
|
|
|
|
btc-mike
|
|
November 29, 2013, 08:18:07 PM |
|
Did you make any changes? If so, post the code here.
Is your XAMPP setup correctly? Have you used it successfully with any other programs.
|
|
|
|
Timmieman
|
|
November 30, 2013, 04:04:53 PM |
|
I did not make any changes as far as i can remember: Also, if I just enter the link in my URL it puts out the specific data I need, therefore i`m quite confused what the problem might be This is my complete code: <?php
// Trade API settings $key = 'Deletedddd'; // your API-key $secret = 'Deleteddddd'; // your Secret-key
// Limits for trading size (BTC) // Setting the increment too small will have a negative effect on speed $min_amount = 0.01; $max_amount = 0.06; $increment = 0.002;
// Minimum profit in percent // Must be higher than BTC-E fee * 3 to be profitable $min_profit = 1.0;
// Margin of price // Trades will be executed this much higher/lower to make "sure" they go through // 1.05 = 5 % and so on $price_margin = 1.05;
// Delay between requests (ms), check with BTC-E how high value they allow // setting this too high could cause BTC-E to potentially block the bot. $delay = 300;
// Specify a minimum time between 2 trades (s). Whenever an inbalance between prices exists // we want to quickly execute the FIRST trade, but let other arbitrage bots (with bigger balances) // clean up the rest. Otherwise there seems to be big risk for losing trades. $time_between_trades = 10; $last_trade_time = 0;
// Required for BTC-E API $mt = explode(' ', microtime()); $nonce = $mt[1];
// http://pastebin.com/QyjS3U9M function btce_query($method, array $req = array()) { global $key, $secret, $nonce;
$req['method'] = $method; $req['nonce'] = $nonce++;
// generate the POST data string $post_data = http_build_query($req, '', '&');
$sign = hash_hmac("sha512", $post_data, $secret);
// generate the extra headers $headers = array( 'Sign: '.$sign, 'Key: '.$key, );
// our curl handle (initialize if required) static $ch = null; if (is_null($ch)) { $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; BTC-E PHP client; '.php_uname('s').'; PHP/'.phpversion().')'); } curl_setopt($ch, CURLOPT_URL, 'https://btc-e.com/tapi/'); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
// run the query $res = curl_exec($ch); if ($res === false) exit('Trade API error: Connection error: ' . curl_error($ch));
$dec = json_decode($res, true); if (!$dec) exit('Trade API error: Invalid JSON.');
return $dec; }
function perform_trade($trade, $show_balance) { global $last_trade_time;
$last_trade_time = time();
$reply = btce_query('Trade', $trade);
if ($reply['success'] != 1) exit('Trade error: ' . $reply['error']);
if ($show_balance) print_balance($reply); }
function print_balance($response = false) { if (!$response) $response = btce_query('getInfo');
$str = "";
foreach ($response['return']['funds'] as $key => $val) { if ($val > 0) { if (strlen($str) > 0) $str .= ",";
$str .= " " . $val . " " . strtoupper($key); } }
echo date("H:i:s") . ' Balance:' . $str . "\n"; }
// Fetch order book for a given currency pair function order_book($pair) { $orders = file_get_contents('https://btc-e.com/api/2/' . $pair . '/depth');
if ($orders === false) exit('Public API error: Connection error.');
$dec = json_decode($orders); if (!$dec) echo date("H:i:s") . " ERROR: Unable to fetch order book for " . $pair . ".\n";
return $dec; }
// Return how big volume we can get with the given amount function ask_volume($orders, $amount) { $vol = 0; $value = 0;
for ($i = 0; $i < count($orders->asks) && $value < $amount; $i++) { $this_value = min($orders->asks[$i][0] * $orders->asks[$i][1], $amount - $value); $this_vol = $this_value / $orders->asks[$i][0];
$value += $this_value; $vol += $this_vol; }
return $vol; }
function bid_volume($orders, $amount) { $vol = 0; $value = 0;
for ($i = 0; $i < count($orders->bids) && $value < $amount; $i++) { $this_value = min($orders->bids[$i][1], $amount - $value); $this_vol = $this_value * $orders->bids[$i][0];
$value += $this_value; $vol += $this_vol; }
return $vol; }
function best_bid($orders) { return $orders->bids[0][0]; }
function best_ask($orders) { return $orders->asks[0][0]; }
// The main function of the program function main_loop() { global $min_amount, $max_amount, $increment, $min_profit, $delay, $price_margin, $time_between_trades, $last_trade_time;
// Print some starting information echo "BTC-E Arbitrage Bot v0.1 (CTRL+C to exit)\n"; echo "Trade amount (min/increment/max): " . $min_amount . " / " . $increment . " / " . $max_amount . "\n"; echo "Minimum profit: " . $min_profit . " %\n"; echo "Price margin: " . $price_margin . "\n"; echo "Delay between checks: " . $delay . " ms\n"; echo "Min time between trades: " . $time_between_trades . " s\n";
print_balance();
// Loop indefinitely (press CTRL+C to exit) while (true) { // Fetch order books for all currency pairs $btc_usd_orders = order_book('btc_usd'); $ltc_btc_orders = order_book('ltc_btc'); $ltc_usd_orders = order_book('ltc_usd');
// Proceed if we have orders for all pairs if ($btc_usd_orders && $ltc_btc_orders && $ltc_usd_orders) { $best_case = 0; $best_profit = 0; $best_amount = 0; $best_trades = array();
// Loop through different order sizes to find the one with most profit for ($amt = $min_amount; $amt <= $max_amount; $amt += $increment) { // Case 1: BTC -> LTC -> USD -> BTC $c1_ltc = ask_volume($ltc_btc_orders, $amt); $c1_usd = bid_volume($ltc_usd_orders, $c1_ltc); $c1_btc = ask_volume($btc_usd_orders, $c1_usd);
$c1_profit = $c1_btc - $amt; $c1_profit_percent = ($c1_profit * 100) / $amt;
if ($c1_profit > $best_profit && $c1_profit_percent > $min_profit) { $best_case = 1; $best_profit = $c1_profit; $best_amount = $amt; $best_trades = array ( array('pair' => 'ltc_btc', 'type' => 'buy', 'amount' => round($c1_ltc, 6), 'rate' => round(best_ask($ltc_btc_orders) * $price_margin, 3)), array('pair' => 'ltc_usd', 'type' => 'sell', 'amount' => round($c1_ltc, 6), 'rate' => round(best_bid($ltc_usd_orders) / $price_margin, 3)), array('pair' => 'btc_usd', 'type' => 'buy', 'amount' => round($c1_btc, 6), 'rate' => round(best_ask($btc_usd_orders) * $price_margin, 3)) ); }
// Case 2: BTC -> USD -> LTC -> BTC $c2_usd = bid_volume($btc_usd_orders, $amt); $c2_ltc = ask_volume($ltc_usd_orders, $c2_usd); $c2_btc = bid_volume($ltc_btc_orders, $c2_ltc);
$c2_profit = $c2_btc - $amt; $c2_profit_percent = ($c2_profit * 100) / $amt;
if ($c2_profit > $best_profit && $c2_profit_percent > $min_profit) { $best_case = 2; $best_profit = $c2_profit; $best_amount = $amt; $best_trades = array ( array('pair' => 'btc_usd', 'type' => 'sell', 'amount' => round($amt, 6), 'rate' => round(best_bid($btc_usd_orders) / $price_margin, 3)), array('pair' => 'ltc_usd', 'type' => 'buy', 'amount' => round($c2_ltc, 6), 'rate' => round(best_ask($ltc_usd_orders) * $price_margin, 3)), array('pair' => 'ltc_btc', 'type' => 'sell', 'amount' => round($c2_ltc, 6), 'rate' => round(best_bid($ltc_btc_orders) / $price_margin, 3)) ); } }
// Execute the trades if we found one if ($best_case > 0) { echo date("H:i:s") . ($best_case == 1 ? " LTC -> USD" : " USD -> LTC") . ", Amount " . $best_amount . ", Expected Profit " . number_format($best_profit, 4) . " (" . number_format(($best_profit * 100) / $best_amount, 2) . " %)\n";
// Check that enough time has passed from the last trade if ((time() - $last_trade_time) < $time_between_trades) { echo date("H:i:s") . " Rejected (not enough time passed from last trade.\n"; } else { perform_trade($best_trades[0], false); perform_trade($best_trades[1], false); perform_trade($best_trades[2], true); } } }
// Sleep for a bit usleep($delay * 1000); } }
// Execute the main loop function main_loop();
|
|
|
|
btc-mike
|
|
December 02, 2013, 03:04:13 AM |
|
Code looks like mine.
I think your XAMPP is screwed up. I asked you about it before. Getting the order books is the simple part of accessing BTC-e. Since the bot is tripping up on that, there is probably an issue with your configs.
|
|
|
|
Timmieman
|
|
December 02, 2013, 11:35:59 PM |
|
I enabled curl in php.ini of XAMPP.
Is theresomething else I should configure?
Thanks in advance
|
|
|
|
btc-mike
|
|
December 03, 2013, 02:19:41 AM |
|
Pulling the order books doesn't require curl. Curl is used later in the program.
I don't know anything about XAMPP setup.
|
|
|
|
Timmieman
|
|
December 03, 2013, 10:52:40 AM Last edit: December 03, 2013, 12:49:59 PM by Timmieman |
|
Could anyone explain me the proper settings for either XAMP or WAMP?
Thanks in advanceIt seems to be working now, though it the php explorer it still states Fatal error: Maximum execution time of 30 seconds exceeded in D:\Apps\Wamp\www\bot_mad_livekey.php on line 122
# Time Memory Function Location 1 0.0007 307720 {main}( ) ..\bot_mad_livekey.php:0 2 0.0007 310592 main_loop( ) ..\bot_mad_livekey.php:283 3 29.8922 822544 order_book( ) ..\bot_mad_livekey.php:199
Which is: $orders = file_get_contents('https://btc-e.com/api/2/' . $pair . '/depth');
So it probably stalls on getting the order_book as stated before Maybe this extra information helps somebody to find the solution? I`ll put up a bounty of 0.01BTC for the one that is able to fix it
|
|
|
|
theblazehen
|
|
December 23, 2013, 10:52:50 AM |
|
Could anyone explain me the proper settings for either XAMP or WAMP?
Thanks in advanceIt seems to be working now, though it the php explorer it still states Fatal error: Maximum execution time of 30 seconds exceeded in D:\Apps\Wamp\www\bot_mad_livekey.php on line 122
# Time Memory Function Location 1 0.0007 307720 {main}( ) ..\bot_mad_livekey.php:0 2 0.0007 310592 main_loop( ) ..\bot_mad_livekey.php:283 3 29.8922 822544 order_book( ) ..\bot_mad_livekey.php:199
Which is: $orders = file_get_contents('https://btc-e.com/api/2/' . $pair . '/depth');
So it probably stalls on getting the order_book as stated before Maybe this extra information helps somebody to find the solution? I`ll put up a bounty of 0.01BTC for the one that is able to fix it Are you running it from the command line? It appears that php is limiting the execution time
|
BURST: BURST-ZRT2-GB5S-A6CS-HBVAE
|
|
|
Voodah
|
|
December 24, 2013, 02:16:06 AM |
|
Hey btc-mike
Are you still running this bot?
Has it worked for you?
|
|
|
|
gabbello
Member
Offline
Activity: 116
Merit: 11
|
|
December 24, 2013, 08:47:20 AM |
|
I'm running the bot with the following settings, but no transactions appear to happen in over 12h (there is also no other message in the console). Is this normal?
BTC-E Arbitrage Bot v0.1 (CTRL+C to exit) Trade amount (min/increment/max): 0.001 / 0.0002 / 0.006 Minimum profit: 1 % Price margin: 1.05 Delay between checks: 1000 ms Min time between trades: 10 s 10:42:03 Balance: 62.9649178 USD, 0.0463 BTC, 1.996 LTC
|
|
|
|
gabbello
Member
Offline
Activity: 116
Merit: 11
|
|
December 25, 2013, 07:23:33 PM |
|
Ok, I managed to make it work but (at least with the current settings) the algorithm seems to lose money . Example of a set of transactions: LTC/BTC sell 2.0563 LTC 0.029 BTC 0.0596327 BTC 25.12.13 15:47 LTC/USD buy 2.0563 LTC 19 USD 39.0697 USD 25.12.13 15:47 BTC/USD sell 0.059 BTC 652.126 USD 38.475434 USD 25.12.13 15:47 So basically at the end of the transactions i'm: BTC: + 0.0006326 LTC: 0 USD: - 0.594266 Since 0.0006326 BTC in USD (at the rate of 652.126) is just -0.4126001202 I lost ~0.2 USD What am I mising?
|
|
|
|
btc-mike
|
|
December 29, 2013, 05:17:23 PM |
|
I haven't used it in months but it did work for me.
I have been using the new code released by miaviator.
Timmieman got this one running but also moved on to the new code.
|
|
|
|
Voodah
|
|
December 29, 2013, 05:25:05 PM |
|
I haven't used it in months but it did work for me.
I have been using the new code released by miaviator.
Timmieman got this one running but also moved on to the new code.
Nice. Thanks!
|
|
|
|
luicon
|
|
January 07, 2014, 06:19:03 AM |
|
where is the new code?
|
|
|
|
|
JasperDX7
Newbie
Offline
Activity: 37
Merit: 0
|
|
January 13, 2014, 05:04:15 AM |
|
Could anyone explain me the proper settings for either XAMP or WAMP?
Thanks in advanceIt seems to be working now, though it the php explorer it still states Fatal error: Maximum execution time of 30 seconds exceeded in D:\Apps\Wamp\www\bot_mad_livekey.php on line 122
# Time Memory Function Location 1 0.0007 307720 {main}( ) ..\bot_mad_livekey.php:0 2 0.0007 310592 main_loop( ) ..\bot_mad_livekey.php:283 3 29.8922 822544 order_book( ) ..\bot_mad_livekey.php:199
Which is: $orders = file_get_contents('https://btc-e.com/api/2/' . $pair . '/depth');
So it probably stalls on getting the order_book as stated before Maybe this extra information helps somebody to find the solution? I`ll put up a bounty of 0.01BTC for the one that is able to fix it php has a default execution time. Try putting this at the top of the script ini_set('max_execution_time', 0);
|
|
|
|
ezvhee
Newbie
Offline
Activity: 8
Merit: 0
|
|
January 14, 2014, 03:47:46 AM |
|
does anyone have a made a good result for this bot?
|
|
|
|
wing_hk
|
|
January 16, 2014, 12:41:09 AM |
|
I have no idea about this error PHP Warning: file_get_contents(https://btc-e.com/api/2/ltc_usd/depth): failed to open stream: HTTP request failed! HTTP/1.1 520 Origin Error
It come from this line $orders = file_get_contents('https://btc-e.com/api/2/' . $pair . '/depth');
I am running it with "php xxxx.php" in a linux server. Does it mean my location is restricted for API?
|
|
|
|
btc-mike
|
|
January 16, 2014, 06:02:42 AM |
|
I have no idea about this error PHP Warning: file_get_contents(https://btc-e.com/api/2/ltc_usd/depth): failed to open stream: HTTP request failed! HTTP/1.1 520 Origin Error
It come from this line $orders = file_get_contents('https://btc-e.com/api/2/' . $pair . '/depth');
I am running it with "php xxxx.php" in a linux server. Does it mean my location is restricted for API? Does PHP have access to internet?
|
|
|
|
|