Bitcoin Forum
April 19, 2024, 10:07:32 PM *
News: Latest Bitcoin Core release: 26.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 [2] 3 »  All
  Print  
Author Topic: [PHP| BTC-E arbitrage bot  (Read 22007 times)
01BTC10 (OP)
VIP
Hero Member
*
Offline Offline

Activity: 756
Merit: 503



View Profile
November 20, 2013, 04:46:37 PM
 #21

It is not my work. You can contact MadAlpha
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1713564452
Hero Member
*
Offline Offline

Posts: 1713564452

View Profile Personal Message (Offline)

Ignore
1713564452
Reply with quote  #2

1713564452
Report to moderator
1713564452
Hero Member
*
Offline Offline

Posts: 1713564452

View Profile Personal Message (Offline)

Ignore
1713564452
Reply with quote  #2

1713564452
Report to moderator
1713564452
Hero Member
*
Offline Offline

Posts: 1713564452

View Profile Personal Message (Offline)

Ignore
1713564452
Reply with quote  #2

1713564452
Report to moderator
Timmieman
Full Member
***
Offline Offline

Activity: 136
Merit: 100


View Profile
November 29, 2013, 06: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

btc-mike
Hero Member
*****
Offline Offline

Activity: 938
Merit: 1001



View Profile
November 29, 2013, 08: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.
Timmieman
Full Member
***
Offline Offline

Activity: 136
Merit: 100


View Profile
November 30, 2013, 04: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:
<?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($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();


btc-mike
Hero Member
*****
Offline Offline

Activity: 938
Merit: 1001



View Profile
December 02, 2013, 03:04:13 AM
 #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.
Timmieman
Full Member
***
Offline Offline

Activity: 136
Merit: 100


View Profile
December 02, 2013, 11:35:59 PM
 #26

I enabled curl in php.ini of XAMPP.

Is theresomething else I should configure?

Thanks in advance

btc-mike
Hero Member
*****
Offline Offline

Activity: 938
Merit: 1001



View Profile
December 03, 2013, 02:19:41 AM
 #27

Pulling the order books doesn't require curl. Curl is used later in the program.

I don't know anything about XAMPP setup.
Timmieman
Full Member
***
Offline Offline

Activity: 136
Merit: 100


View Profile
December 03, 2013, 10:52:40 AM
Last edit: December 03, 2013, 12:49:59 PM by Timmieman
 #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

theblazehen
Full Member
***
Offline Offline

Activity: 194
Merit: 100



View Profile
December 23, 2013, 10:52:50 AM
 #29

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

Are you running it from the command line? It appears that php is limiting the execution time

BURST: BURST-ZRT2-GB5S-A6CS-HBVAE
Voodah
Sr. Member
****
Offline Offline

Activity: 266
Merit: 250



View Profile
December 24, 2013, 02:16:06 AM
 #30

Hey btc-mike

Are you still running this bot?

Has it worked for you?
gabbello
Member
**
Offline Offline

Activity: 116
Merit: 11


View Profile
December 24, 2013, 08:47:20 AM
 #31

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 Offline

Activity: 116
Merit: 11


View Profile
December 25, 2013, 07:23:33 PM
 #32

Ok, I managed to make it work but (at least with the current settings) the algorithm seems to lose money Smiley.

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 Smiley

What am I mising?



btc-mike
Hero Member
*****
Offline Offline

Activity: 938
Merit: 1001



View Profile
December 29, 2013, 05:17:23 PM
 #33

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
Sr. Member
****
Offline Offline

Activity: 266
Merit: 250



View Profile
December 29, 2013, 05:25:05 PM
 #34

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
Sr. Member
****
Offline Offline

Activity: 262
Merit: 250



View Profile
January 07, 2014, 06:19:03 AM
 #35

where is the new code?
btc-mike
Hero Member
*****
Offline Offline

Activity: 938
Merit: 1001



View Profile
January 07, 2014, 06:59:15 AM
 #36

where is the new code?

https://bitcointalk.org/index.php?topic=366546.0
JasperDX7
Newbie
*
Offline Offline

Activity: 37
Merit: 0


View Profile
January 13, 2014, 05:04:15 AM
 #37

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

php has a default execution time. Try putting this at the top of the script

ini_set('max_execution_time', 0);
ezvhee
Newbie
*
Offline Offline

Activity: 8
Merit: 0


View Profile
January 14, 2014, 03:47:46 AM
 #38

does anyone have a made a good result for this bot?
wing_hk
Full Member
***
Offline Offline

Activity: 182
Merit: 100


View Profile
January 16, 2014, 12:41:09 AM
 #39

I have no idea about this error

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

Code:
$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
Hero Member
*****
Offline Offline

Activity: 938
Merit: 1001



View Profile
January 16, 2014, 06:02:42 AM
 #40

I have no idea about this error

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

Code:
$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?
Pages: « 1 [2] 3 »  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!