Bitcoin Forum
May 04, 2024, 09:04:10 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 [2] 3 »  All
  Print  
Author Topic: [PHP| BTC-E arbitrage bot  (Read 22012 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
1714856650
Hero Member
*
Offline Offline

Posts: 1714856650

View Profile Personal Message (Offline)

Ignore
1714856650
Reply with quote  #2

1714856650
Report to moderator
Whoever mines the block which ends up containing your transaction will get its fee.
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1714856650
Hero Member
*
Offline Offline

Posts: 1714856650

View Profile Personal Message (Offline)

Ignore
1714856650
Reply with quote  #2

1714856650
Report to moderator
1714856650
Hero Member
*
Offline Offline

Posts: 1714856650

View Profile Personal Message (Offline)

Ignore
1714856650
Reply with quote  #2

1714856650
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!