Pages:
Author

Topic: [PHP| BTC-E arbitrage bot - page 2. (Read 22047 times)

full member
Activity: 136
Merit: 100
December 03, 2013, 06:52:40 AM
#28
Could anyone explain me the proper settings for either XAMP or WAMP?

Thanks in advance


It seems to be working now, though it the php explorer it still states

Code:
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:

Code:
$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
hero member
Activity: 938
Merit: 1001
December 02, 2013, 10:19:41 PM
#27
Pulling the order books doesn't require curl. Curl is used later in the program.

I don't know anything about XAMPP setup.
full member
Activity: 136
Merit: 100
December 02, 2013, 07:35:59 PM
#26
I enabled curl in php.ini of XAMPP.

Is theresomething else I should configure?

Thanks in advance
hero member
Activity: 938
Merit: 1001
December 01, 2013, 11:04:13 PM
#25
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.
full member
Activity: 136
Merit: 100
November 30, 2013, 12:04:53 PM
#24
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:


Code:

// 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($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_USERAGENT'Mozilla/4.0 (compatible; BTC-E PHP client; '.php_uname('s').'; PHP/'.phpversion().')');
}
curl_setopt($chCURLOPT_URL'https://btc-e.com/tapi/');
curl_setopt($chCURLOPT_POSTFIELDS$post_data);
curl_setopt($chCURLOPT_HTTPHEADER$headers);
curl_setopt($chCURLOPT_SSL_VERIFYPEERFALSE);

// run the query
$res curl_exec($ch);
if ($res === false)
exit('Trade API error: Connection error: ' curl_error($ch));

$dec json_decode($restrue);
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_ltc6), 'rate' => round(best_ask($ltc_btc_orders) * $price_margin3)),
array('pair' => 'ltc_usd''type' => 'sell''amount' => round($c1_ltc6), 'rate' => round(best_bid($ltc_usd_orders) / $price_margin3)),
array('pair' => 'btc_usd''type' => 'buy''amount' => round($c1_btc6), 'rate' => round(best_ask($btc_usd_orders) * $price_margin3))
);
}

// 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($amt6), 'rate' => round(best_bid($btc_usd_orders) / $price_margin3)),
array('pair' => 'ltc_usd''type' => 'buy''amount' => round($c2_ltc6), 'rate' => round(best_ask($ltc_usd_orders) * $price_margin3)),
array('pair' => 'ltc_btc''type' => 'sell''amount' => round($c2_ltc6), 'rate' => round(best_bid($ltc_btc_orders) / $price_margin3))
);
}
}

// Execute the trades if we found one
if ($best_case 0)
{
echo date("H:i:s") . ($best_case == " LTC -> USD" " USD -> LTC") . ", Amount " $best_amount .
", Expected Profit " number_format($best_profit4) .
" (" number_format(($best_profit 100) / $best_amount2) . " %)\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();

hero member
Activity: 938
Merit: 1001
November 29, 2013, 04:18:07 PM
#23
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.
full member
Activity: 136
Merit: 100
November 29, 2013, 02:15:45 PM
#22
I`ve been trying to get this bot to work though it keeps spitting out the same error:

Code:
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
vip
Activity: 756
Merit: 503
November 20, 2013, 12:46:37 PM
#21
It is not my work. You can contact MadAlpha
hero member
Activity: 633
Merit: 768
BTC⇆⚡⇄BTC
November 20, 2013, 12:30:03 AM
#20
Greetings!

Nice script. Thanks for sharing it.

It's been a while since BTC-e, Vircurex and Cryptsy added some more altcoins.

BTW, is it possible to add automated (triangular and 2-currency) arbitrage for altcoins pairs (LTC/BTC; NMC/BTC; PPC/BTC; XPM/BTC etc.)?

Keep up the good work!
vip
Activity: 756
Merit: 503
September 19, 2013, 12:34:48 PM
#19
so how do I implement this/?
You need PHP and curl installed then put your BTC-E API key at the appropriate place in the code.
sr. member
Activity: 294
Merit: 250
September 19, 2013, 11:24:41 AM
#18
so how do I implement this/?
vip
Activity: 756
Merit: 503
September 18, 2013, 06:48:17 AM
#17
100ms? That is crazy ... I never used intervals < 15s in my bots.

It might work for you now, but if all those hundreds of bots switch to such a scheme, the website is blocked ...

100ms on my home connection is over 300ms in reality.
legendary
Activity: 965
Merit: 1000
September 18, 2013, 04:59:43 AM
#16
100ms? That is crazy ... I never used intervals < 15s in my bots.

It might work for you now, but if all those hundreds of bots switch to such a scheme, the website is blocked ...
hero member
Activity: 938
Merit: 1001
September 17, 2013, 06:05:19 PM
#15
Agreed - not too hard to fix.

After I was white-listed, I hit them harder with no issues. You just need to ask to be white-listed.
vip
Activity: 756
Merit: 503
September 17, 2013, 03:52:21 PM
#14
It's easy to fix so it will never time-out on an error but it might give unwanted results. Like I said in my second post you need to adjust the timing so BTC-E won't ban your IP. Mine got banned temporarily a couple time before I got the settings right. It will vary depending on your connection, it wasn't the same on my home connection vs a VPS. Officialy they say once every 10 minutes but if I remember right I was able to use 300ms on my VPS and 100ms on my home connection.
hero member
Activity: 938
Merit: 1001
September 17, 2013, 03:48:52 PM
#13
Would anyone be interested in posting the results of running this script for some amount of time? (I'm thinking minimum 3 days).

Notes on what kind of balancing is necessary will be helpful as well.

You want me to test for 3 days and share my settings and results? NO

I will share this.

1. As is, the program will time out long before 3 days. The code that pulls the books will error out. I have run it on few hosted systems and they both timed out (one lasted a lot longer).

2. You will end up blacklisted at btc-e if you hit them too hard. Open a support ticket and they can whitelist your IP.
full member
Activity: 182
Merit: 100
September 17, 2013, 11:59:53 AM
#12
Would anyone be interested in posting the results of running this script for some amount of time? (I'm thinking minimum 3 days).

Notes on what kind of balancing is necessary will be helpful as well.
sr. member
Activity: 364
Merit: 250
September 17, 2013, 10:49:03 AM
#11
Thanks for sharing Smiley
jr. member
Activity: 59
Merit: 10
September 14, 2013, 09:19:43 AM
#10
Thanks for share Cheesy
hero member
Activity: 938
Merit: 1001
September 13, 2013, 01:11:58 PM
#9
I have made another bot that checks multiple paths (based on this ->https://bitcointalksearch.org/topic/btc-e-php-currency-arbitrage-bot-full-code-196313) but I still use this one. This one found a profitable trade path yesterday.
Pages:
Jump to: