Author

Topic: BTC-E PHP Currency Arbitrage Bot Full Code (Read 39922 times)

sr. member
Activity: 472
Merit: 254
Anlik Coin Fiyatlari BTCkur.com
November 04, 2014, 01:50:33 PM
#71
1- Does this still work?
2- Which areas we need to change to make it work? Right now If I just save the code as index.php and view it in a browser, it shows me a blank screen.
3- What is the easiest and most simple way to run this?

Thanks for your help
donator
Activity: 686
Merit: 519
It's for the children!
legendary
Activity: 965
Merit: 1000
December 04, 2013, 10:26:52 AM
#69
I'd like to do HFT, but since you can only fetch the prices every 15s, or so, it's practically impossible. Maybe with a network of servers, or so. But I only have 1 server atm, so I gave up on this for now...
hero member
Activity: 640
Merit: 771
BTC⇆⚡⇄BTC
December 03, 2013, 08:19:29 PM
#68
It seems that High-frequency trading is getting too popular in cryptocoin world nowadays...
legendary
Activity: 965
Merit: 1000
December 03, 2013, 01:29:31 PM
#67
Does this strategy still work? I wrote a similar bot, but gave up on it, because all those bots at btc-e made it impossible to be proftiable, if you respect the request limits.

newbie
Activity: 2
Merit: 0
December 03, 2013, 09:59:03 AM
#66
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!

I did try to implement multi currency legs using 3-6 hops vs the current system.  The issue was speed and getting an open socket on e proved unreliable.  If someone can build a php socket allowing data to pass without opening a new curl session each request this would be possible. 

The math on dynamic arbitrage is strange though it can be created for this many legs. 

I'll be testing some new price rolling engines with EMA soon and will post any working code here so someone better than me can work with it.

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!

I did try to implement multi currency legs using 3-6 hops vs the current system.  The issue was speed and getting an open socket on e proved unreliable.  If someone can build a php socket allowing data to pass without opening a new curl session each request this would be possible. 

The math on dynamic arbitrage is strange though it can be created for this many legs. 

I'll be testing some new price rolling engines with EMA soon and will post any working code here so someone better than me can work with it.

Hey - just sent you a PM.  I have my own code going - not clean enough to post here yet.  I have the techniques for the sockets, I do not know enough about the techniques for what to do when quite yet.  I agree the math gets strange ... Fun stuff.
The rolling bots I find fascinating when playing with the orderbooks as well.  The arb bots seem OK to a point ... Have you seen this implemented at cryptsy or others yet?

Thanks for this thread, its refreshing!
full member
Activity: 136
Merit: 100
November 30, 2013, 11:26:46 AM
#65
This might be quite a silly question:

In the case of a Bitcoin -> Litecoin > Dollar > Bitcoin transaction, does there have to be finances in all valuta?

So does the arbitrage bot trade Bitcoin to litecoin, then litecoin to dollar and dollar to bitcoin, or all at the same time?

With best regards,
Tim
newbie
Activity: 53
Merit: 0
November 29, 2013, 02:49:18 PM
#64
thanks for posting this here, really fun to look through and play with.

Quote
There is also an unfinished currency change function which would allow you to swap from B to U when the price of B is falling and U to B when it is rising.  This actually works really well, you can take advantage of arbitrage in either currency while holding funds in the most profitable currency.

what needs finishing to make this active?
full member
Activity: 136
Merit: 100
November 29, 2013, 11:12:39 AM
#63
I`ve fixed the bot with help of the 2 fixes and it's currently running.

Though after 24 hours the only thing it has traded is converted all BTC to USD, though in the code it states that it should 50/50 the amount in BTC and USD?

What could be the reason behind this?

My total finances where 6 times the minimum trading amount

With best regards,
donator
Activity: 686
Merit: 519
It's for the children!
November 20, 2013, 12:42:57 AM
#62
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!

I did try to implement multi currency legs using 3-6 hops vs the current system.  The issue was speed and getting an open socket on e proved unreliable.  If someone can build a php socket allowing data to pass without opening a new curl session each request this would be possible. 

The math on dynamic arbitrage is strange though it can be created for this many legs. 

I'll be testing some new price rolling engines with EMA soon and will post any working code here so someone better than me can work with it.
hero member
Activity: 640
Merit: 771
BTC⇆⚡⇄BTC
November 19, 2013, 11:27:44 PM
#61
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!
member
Activity: 92
Merit: 10
Well, after tinkering with this for a while, I've come to the conclusion that either a.) I don't know how to configure it, or b.) It no longer works properly and needs updates. I've let it run for a while with a small amount of funds to play with...it hardly ever makes trades, and I have yet to see a profitable one. I always end up with less than I had before trading.
member
Activity: 92
Merit: 10
Is the currency change function usable in its current state? Where would I put the call if I wanted to use it?
full member
Activity: 140
Merit: 100
Well, I'm not too worried about losing the vast US$5.38 total of all my currencies combined in an experiment that doesn't go anywhere. I'm mining on CPU and a crappy Nvidia GPU so you have to know it's about figuring out how all this works not about making money. Later perhaps I'll get serious about making money but right now it's like model rocketry—I expect it to teach me about the right shape of a nose cone, not take me to the moon.

In other words, let me make mistakes on small numbers before I try to screw myself up with big ones.

Looks like I'm not getting anywhere without being on Fast Trade. When I'm on Fast Trade it made me about two cents in an hour. So I'm calling this a successful experiment. Thanks!
newbie
Activity: 26
Merit: 0
That output is good but the arbitrage opportunities are too small now, it would take a revamp of the fee system to allow them to arb bots properly, i ran this bot on 2 Triples BTC/LTC/RUR and USD for a week for little value.

Im pretty sure that btc-e has its own feeless arb bots running.
full member
Activity: 140
Merit: 100
What does it mean if I'm getting numbers in my output but trades aren't actually happening?

------.---------.----------------------------------.-----------------------------------.-.--------------------------------.--.-.-.3.-..-.--.-.-.----.-.--.----.---.----.----.----.-.----.------.-..-------..------.-.--.----.-.----.--.--------------------------------..------.7-.----.1-----..-.-.--.-.-.1.-----..-.-.-.--.1.----------.-...--.-------------.----.-.--.------.3.--.-.----.---.------.---------------------.2--.-.-----------.----.1------.--.-------------.----.-----------.---------.----.-----------------------------------------.----.------------------------------------------.--.------.--.-.-----------.----.---------.----.------.-----------.-.--.------------.--------.--------------.----.------.--.----------------.----.------.-.--.------.--------.1.------.----.----.----.-.--------.1.-.----.2-----.---------.------------.------.-----------.1--.---.------.----------------.----..---.---------

Have I done something wrong? The script is running and it did trigger one transaction when I started running it, but since then no.

Thanks!
sr. member
Activity: 350
Merit: 250
Install WAMP
Edit PHP.INI and make sure CURL is enabled
copy script to WAMP PHP directory (call the file bot.php)
open command prompt
change directory to the WAMP instead PHP version
run "php.exe bot.php"

it starts scanning / trading

*********DON'T FORGET TO EDIT SETTINGS IN SCRIPT!!!*

If you can't get it running I would suggest to just leave it alone then as it has the potential to lose your BTC / LTC / USD if not configured correctly.
newbie
Activity: 34
Merit: 0
How exactly do I make this work??? What do I do with the script? paste it into DOS or Python or something? I hate not knowing anything about coding, since everything surrounding bitcoin is so coding-intensive

upload to webserver -> Go to address Smiley  As long as all dependancies are setup you should be good to go.

Webserver? So does this mean it won't run on a desktop pc? If anyone feel's like giving an oversimplified explanation (or a link) of how to run a script/program like this it would be very much appreciated.  Smiley
I've looked at some very simple java stuff before (should I admit it was minecraft or hide that in shame? lol.) And I have worked on a website or two, but only through a control panel and UI with alot of drag n drop, so I really know almost nothing about what it takes to code or run these types of bots.
sr. member
Activity: 350
Merit: 250
How exactly do I make this work??? What do I do with the script? paste it into DOS or Python or something? I hate not knowing anything about coding, since everything surrounding bitcoin is so coding-intensive

upload to webserver -> Go to address Smiley  As long as all dependancies are setup you should be good to go.
member
Activity: 98
Merit: 10
How exactly do I make this work??? What do I do with the script? paste it into DOS or Python or something? I hate not knowing anything about coding, since everything surrounding bitcoin is so coding-intensive
full member
Activity: 294
Merit: 100
Well I spent a few more days running this/playing around with settings and I simply can't get it to trade consistently, let alone for a profit.  Thanks for releasing this to the public anyhow, maybe I'm just not using it properly.
donator
Activity: 686
Merit: 519
It's for the children!
That seems to have done it, thanks.  Though now the activity level is way down.  I was getting at least a couple of trades per 10-15 mins, now I just ran for an hour and only 1.  Forgive my ignorance if the lack of trades is just a product of current market prices, but are there other settings that are tweakable to increase activity?  

Ideally to make the most trades: (when I was running this my account had at least 100 trades per day)  

1. You need a low latency to cloudflare and btc-e (fast connection or tier 1 network, or server in russia?)
2. The script needs to be able to run with no timers firing.
3. The script needs to print no output or only print output if a trade path was analyzed and no profit was found.
4. fastTrade should be enabled! - This again ideally will cause the script to fire all three trades with no error checking and no currency clearing.  The best chance to complete three trade legs is to complete them sequentially as soon as they are found.  The issue is that this method will leave your funds stuck in whatever the last currency leg that filled was.  Since I normally run bots to make the exchange a higher profit (.2%-.6% to exchange vs .1% to me) there can be a loss when converting back to the original currency.  In the crypto currency world it is dangerous to sit in anything other than 50%Crypto 50%USD continuously balanced since the prices are extremely volatile.

To make the most profit, the script should detect price trends in BTC and trade B to B while the price is rising and U to U while the price is falling.  Or swap from B to U to ensure a 50% balance in the portfolio.

Hmm tried running it in fastTrade mode and every trade path it finds, it cancels the order immediately afterwards.  I set minbidusd/maxbidusd to = $5, in my account I have more than that so I figured that was a good place to start unless I'm not understanding what those variables stand for.  Also, how can I optimize the settings for minbid/maxbid related to me account?

And thanks for releasing this code to the public as well as helping us get it running.  If I see some profits from this I will definitely be sending some your way.

Edit:  Left it running for about 24 hours and seems like every O is followed by a C soon after, running fasttrade or not.  Is this normal behavior?

The difference between fastrade and standard is that in standard the bot polls your balance after every trade.  In fast mode it doesn't care if the orders place fill fail.  it just attempts to set the orders and then immediately cancels anything that doesn't fill.
donator
Activity: 686
Merit: 519
It's for the children!
That seems to have done it, thanks.  Though now the activity level is way down.  I was getting at least a couple of trades per 10-15 mins, now I just ran for an hour and only 1.  Forgive my ignorance if the lack of trades is just a product of current market prices, but are there other settings that are tweakable to increase activity? 

Ideally to make the most trades: (when I was running this my account had at least 100 trades per day) 

1. You need a low latency to cloudflare and btc-e (fast connection or tier 1 network, or server in russia?)
2. The script needs to be able to run with no timers firing.
3. The script needs to print no output or only print output if a trade path was analyzed and no profit was found.
4. fastTrade should be enabled! - This again ideally will cause the script to fire all three trades with no error checking and no currency clearing.  The best chance to complete three trade legs is to complete them sequentially as soon as they are found.  The issue is that this method will leave your funds stuck in whatever the last currency leg that filled was.  Since I normally run bots to make the exchange a higher profit (.2%-.6% to exchange vs .1% to me) there can be a loss when converting back to the original currency.  In the crypto currency world it is dangerous to sit in anything other than 50%Crypto 50%USD continuously balanced since the prices are extremely volatile.

To make the most profit, the script should detect price trends in BTC and trade B to B while the price is rising and U to U while the price is falling.  Or swap from B to U to ensure a 50% balance in the portfolio.

Even if you are on to better things, we the people, greatly appreciate you sharing your work. I've rekindled an interest in coding due to looking at and tinkering with the bots on here for btc-e. Good times.

I've found that latency mostly isn't relevant for bitcoin exchanges. As long as your server is in europe it will make very little difference. What I have found is that establishing the connection for a http trade call (from php) will take anywhere between 0.5 and 1.0 second regardless of where your location is. This in relative terms is massive.

That is an excellent point!  It would be good to open a connection with curl (or websocket) and feed things through it vs opening a new session every time.

I don't have any servers in europe?  can I borrow one?
donator
Activity: 848
Merit: 1078
That seems to have done it, thanks.  Though now the activity level is way down.  I was getting at least a couple of trades per 10-15 mins, now I just ran for an hour and only 1.  Forgive my ignorance if the lack of trades is just a product of current market prices, but are there other settings that are tweakable to increase activity? 

Ideally to make the most trades: (when I was running this my account had at least 100 trades per day) 

1. You need a low latency to cloudflare and btc-e (fast connection or tier 1 network, or server in russia?)
2. The script needs to be able to run with no timers firing.
3. The script needs to print no output or only print output if a trade path was analyzed and no profit was found.
4. fastTrade should be enabled! - This again ideally will cause the script to fire all three trades with no error checking and no currency clearing.  The best chance to complete three trade legs is to complete them sequentially as soon as they are found.  The issue is that this method will leave your funds stuck in whatever the last currency leg that filled was.  Since I normally run bots to make the exchange a higher profit (.2%-.6% to exchange vs .1% to me) there can be a loss when converting back to the original currency.  In the crypto currency world it is dangerous to sit in anything other than 50%Crypto 50%USD continuously balanced since the prices are extremely volatile.

To make the most profit, the script should detect price trends in BTC and trade B to B while the price is rising and U to U while the price is falling.  Or swap from B to U to ensure a 50% balance in the portfolio.

Even if you are on to better things, we the people, greatly appreciate you sharing your work. I've rekindled an interest in coding due to looking at and tinkering with the bots on here for btc-e. Good times.

I've found that latency mostly isn't relevant for bitcoin exchanges. As long as your server is in europe it will make very little difference. What I have found is that establishing the connection for a http trade call (from php) will take anywhere between 0.5 and 1.0 second regardless of where your location is. This in relative terms is massive.
full member
Activity: 124
Merit: 100
I probably won't be using this, but I like your code and found it interesting to see a trading bot's source code. Thanks.
legendary
Activity: 1610
Merit: 1000
Crackpot Idealist
That seems to have done it, thanks.  Though now the activity level is way down.  I was getting at least a couple of trades per 10-15 mins, now I just ran for an hour and only 1.  Forgive my ignorance if the lack of trades is just a product of current market prices, but are there other settings that are tweakable to increase activity? 

Ideally to make the most trades: (when I was running this my account had at least 100 trades per day) 

1. You need a low latency to cloudflare and btc-e (fast connection or tier 1 network, or server in russia?)
2. The script needs to be able to run with no timers firing.
3. The script needs to print no output or only print output if a trade path was analyzed and no profit was found.
4. fastTrade should be enabled! - This again ideally will cause the script to fire all three trades with no error checking and no currency clearing.  The best chance to complete three trade legs is to complete them sequentially as soon as they are found.  The issue is that this method will leave your funds stuck in whatever the last currency leg that filled was.  Since I normally run bots to make the exchange a higher profit (.2%-.6% to exchange vs .1% to me) there can be a loss when converting back to the original currency.  In the crypto currency world it is dangerous to sit in anything other than 50%Crypto 50%USD continuously balanced since the prices are extremely volatile.

To make the most profit, the script should detect price trends in BTC and trade B to B while the price is rising and U to U while the price is falling.  Or swap from B to U to ensure a 50% balance in the portfolio.

Even if you are on to better things, we the people, greatly appreciate you sharing your work. I've rekindled an interest in coding due to looking at and tinkering with the bots on here for btc-e. Good times.
full member
Activity: 294
Merit: 100
That seems to have done it, thanks.  Though now the activity level is way down.  I was getting at least a couple of trades per 10-15 mins, now I just ran for an hour and only 1.  Forgive my ignorance if the lack of trades is just a product of current market prices, but are there other settings that are tweakable to increase activity?  

Ideally to make the most trades: (when I was running this my account had at least 100 trades per day)  

1. You need a low latency to cloudflare and btc-e (fast connection or tier 1 network, or server in russia?)
2. The script needs to be able to run with no timers firing.
3. The script needs to print no output or only print output if a trade path was analyzed and no profit was found.
4. fastTrade should be enabled! - This again ideally will cause the script to fire all three trades with no error checking and no currency clearing.  The best chance to complete three trade legs is to complete them sequentially as soon as they are found.  The issue is that this method will leave your funds stuck in whatever the last currency leg that filled was.  Since I normally run bots to make the exchange a higher profit (.2%-.6% to exchange vs .1% to me) there can be a loss when converting back to the original currency.  In the crypto currency world it is dangerous to sit in anything other than 50%Crypto 50%USD continuously balanced since the prices are extremely volatile.

To make the most profit, the script should detect price trends in BTC and trade B to B while the price is rising and U to U while the price is falling.  Or swap from B to U to ensure a 50% balance in the portfolio.

Hmm tried running it in fastTrade mode and every trade path it finds, it cancels the order immediately afterwards.  I set minbidusd/maxbidusd to = $5, in my account I have more than that so I figured that was a good place to start unless I'm not understanding what those variables stand for.  Also, how can I optimize the settings for minbid/maxbid related to me account?

And thanks for releasing this code to the public as well as helping us get it running.  If I see some profits from this I will definitely be sending some your way.

Edit:  Left it running for about 24 hours and seems like every O is followed by a C soon after, running fasttrade or not.  Is this normal behavior?
donator
Activity: 686
Merit: 519
It's for the children!
Can you share your latest version of this script?

This is the latest version of the arbitrage script, I can't share any of the rolling engines yet.
sr. member
Activity: 363
Merit: 250
Can you share your latest version of this script?
donator
Activity: 686
Merit: 519
It's for the children!
That seems to have done it, thanks.  Though now the activity level is way down.  I was getting at least a couple of trades per 10-15 mins, now I just ran for an hour and only 1.  Forgive my ignorance if the lack of trades is just a product of current market prices, but are there other settings that are tweakable to increase activity? 

Ideally to make the most trades: (when I was running this my account had at least 100 trades per day) 

1. You need a low latency to cloudflare and btc-e (fast connection or tier 1 network, or server in russia?)
2. The script needs to be able to run with no timers firing.
3. The script needs to print no output or only print output if a trade path was analyzed and no profit was found.
4. fastTrade should be enabled! - This again ideally will cause the script to fire all three trades with no error checking and no currency clearing.  The best chance to complete three trade legs is to complete them sequentially as soon as they are found.  The issue is that this method will leave your funds stuck in whatever the last currency leg that filled was.  Since I normally run bots to make the exchange a higher profit (.2%-.6% to exchange vs .1% to me) there can be a loss when converting back to the original currency.  In the crypto currency world it is dangerous to sit in anything other than 50%Crypto 50%USD continuously balanced since the prices are extremely volatile.

To make the most profit, the script should detect price trends in BTC and trade B to B while the price is rising and U to U while the price is falling.  Or swap from B to U to ensure a 50% balance in the portfolio.
donator
Activity: 686
Merit: 519
It's for the children!
Any updates to code? BTW why dont put it on github?

I moved on from the project so no updates, if you request something here I might be able to modify it.

I don't know anything about github.
sr. member
Activity: 363
Merit: 250
Any updates to code? BTW why dont put it on github?
legendary
Activity: 1610
Merit: 1000
Crackpot Idealist
That seems to have done it, thanks.  Though now the activity level is way down.  I was getting at least a couple of trades per 10-15 mins, now I just ran for an hour and only 1.  Forgive my ignorance if the lack of trades is just a product of current market prices, but are there other settings that are tweakable to increase activity? 

That is what I assumed but I never posted any trades. I tried dropping the %'s and starting B U L and no noticeable effect. Very curious.
full member
Activity: 294
Merit: 100
That seems to have done it, thanks.  Though now the activity level is way down.  I was getting at least a couple of trades per 10-15 mins, now I just ran for an hour and only 1.  Forgive my ignorance if the lack of trades is just a product of current market prices, but are there other settings that are tweakable to increase activity? 
donator
Activity: 686
Merit: 519
It's for the children!
Edit Again:  Well it appeared to be working and it executed some trades (created an order/cancelled it/sold LTC for USD) but then it ended with an E1E2E3 again.  Tried running it again and now I'm back to ".E1-E2-E3" then terminates.  Any idea what could be causing this?  And the btc-e.com/api links are all still accessible and return data so my IP isn't blocked.  Just to be thorough I connected to a VPN and tried running the bot again, still no luck.  It seems like there is some sort of "timeout".  After running the bot successfully for ~10 minutes it returns E1E2E3 then becomes unusable for about 15-20 minutes.  After that timeout it will work again, but this process just repeats itself.  Tried changing the api key/secret to a new one just to see if it was being tracked by that, but no luck.  

You may need to space out your API requests a little more, or remove the
Code:
exit;
statement in the error block.  I think after a while of continuously polling data cloudflare lets you keep going.  Again this is why I developed the roundrobbin helper to swap IP's often. 

Try upping the nano-sleep variable to something like 500000000 if it works you can reduce it by a few million every hour or so.

Code:
//100,001-999,999,999 max wait between non-trade & book duplications reduced 1.2.3.4.
$nanosleep = 500000000; //nanoseconds
full member
Activity: 294
Merit: 100
Hmm tried to get this running in windows with XAMPP.  I applied grabble's fix and when that was still giving E1.E2.E3 error I tried miaviator's code change for outputting more info.  This is what I get:

Code:
C:\xampp\php>php test.php
#screen -dmS arbot -h 1024 -L ./roundrobin.sh
.
Notice: Undefined variable: postData in C:\xampp\php\test.php on line 710

Notice: Undefined variable: headers in C:\xampp\php\test.php on line 711

Warning: curl_setopt(): You must pass either an object or an array with the CURL
OPT_HTTPHEADER, CURLOPT_QUOTE, CURLOPT_HTTP200ALIASES and CURLOPT_POSTQUOTE argu
ments in C:\xampp\php\test.php on line 711

Notice: Undefined variable: postData in C:\xampp\php\test.php on line 710

Notice: Undefined variable: headers in C:\xampp\php\test.php on line 711

Warning: curl_setopt(): You must pass either an object or an array with the CURL
OPT_HTTPHEADER, CURLOPT_QUOTE, CURLOPT_HTTP200ALIASES and CURLOPT_POSTQUOTE argu
ments in C:\xampp\php\test.php on line 711

Notice: Undefined variable: postData in C:\xampp\php\test.php on line 710

Notice: Undefined variable: headers in C:\xampp\php\test.php on line 711

Warning: curl_setopt(): You must pass either an object or an array with the CURL
OPT_HTTPHEADER, CURLOPT_QUOTE, CURLOPT_HTTP200ALIASES and CURLOPT_POSTQUOTE argu
ments in C:\xampp\php\test.php on line 711
E1Array
(
)
Array
(
)
Array
(
)
-

It does this 5 times then exits.  I thought maybe I copy/pasted something wrong but repeated the process twice and still get the same error.  Not sure why it thinks postData and headers are undefined, I see them being defined right before this function.  

Edit:  Ah nevermind looks like I messed something up when I entered my api key/secret.  I'm use to programming languages that don't mind if you take a space out.  Ran it for a bit, got a bunch of - and . then E1E2E3.  I checked the btc-e.com/api links and get data returned so I don't think the IP was banned.  Ran it a second time and got ".E1-E2-E3".  When I apply miaviator's change to the
Code:
while( empty($BTCtoUSD) || empty($LTCtoBTC) || empty($LTCtoUSD) ){
loop, I get the same output as above again.

Edit Again:  Well it appeared to be working and it executed some trades (created an order/cancelled it/sold LTC for USD) but then it ended with an E1E2E3 again.  Tried running it again and now I'm back to ".E1-E2-E3" then terminates.  Any idea what could be causing this?  And the btc-e.com/api links are all still accessible and return data so my IP isn't blocked.  Just to be thorough I connected to a VPN and tried running the bot again, still no luck.  It seems like there is some sort of "timeout".  After running the bot successfully for ~10 minutes it returns E1E2E3 then becomes unusable for about 15-20 minutes.  After that timeout it will work again, but this process just repeats itself.  Tried changing the api key/secret to a new one just to see if it was being tracked by that, but no luck.  
legendary
Activity: 1610
Merit: 1000
Crackpot Idealist
Groovy... I'm glad I did not miss something (again) when going through the code. Fun stuff.
donator
Activity: 686
Merit: 519
It's for the children!
Question about this:

Code:
//Programs
//A - Currency Arbitrage, Choose UtoU or BtoB arbitrage through L
//B - Portfolio Balancing, Maintain 50% of two currencies at all times
//D - Buy Down, Buy 1/2 spread each .5 drop and sell 1 each $1 gain

Is this just informative? Glancing through the code I did not see a place to set this.

I try to keep a changelog and bug log inside my code, this was just the rewrite log for ARBOT which is now:

Code:
////////////////////////////////////////////////////////////////////
//Programs
////////////////////////////////////////////////////////////////////
//A - Currency Arbitrage, Choose UtoU or BtoB arbitrage through L
//B - Portfolio Balancing, Maintain 50% of two currencies at all times
//C - Custom trailing/advancing buy/sell bot for gna
//D - Buy Down, Buy 1/2 spread each .5 drop and sell 1 each $1 gain
//E - Rolling buy/sell on dips and spikes V1,1.1,1.2,V2,2.1
//F - 24 Hour high/low balancing bot, maintain (high-last)/(high-low) balance in USD and (last-low)/(high-low) in BTC
//G - EMA triggered rolling with Fibonacci shares and high/low balancing combination with micro-trade re-balancing.

legendary
Activity: 1610
Merit: 1000
Crackpot Idealist
Question about this:

Code:
//Programs
//A - Currency Arbitrage, Choose UtoU or BtoB arbitrage through L
//B - Portfolio Balancing, Maintain 50% of two currencies at all times
//D - Buy Down, Buy 1/2 spread each .5 drop and sell 1 each $1 gain

Is this just informative? Glancing through the code I did not see a place to set this.
newbie
Activity: 44
Merit: 0
Thank you for the excellent explanation.
legendary
Activity: 1610
Merit: 1000
Crackpot Idealist
Well hello mr fancy pants...

Thank you for the technical answer and the fun code to play with.
donator
Activity: 686
Merit: 519
It's for the children!
Is arbitrage still profitable? and how has your experience been so far running this?

Arbitrage is less profitable now that a lot of bots exist.   As I said I have abandoned this for a rolling buy sell bot which is proving more profitable.  I did make several B over the course of a few weeks using this bot.  I would think that other exchanges and auto transfers could be added in order to take advantage of the dozen or so alts out there with different prices and faster transaction times than B.

All of that said.  I'm not one to turn down making even $.01 a day while I sleep, eat and work.  Free money is free money.

Can you point a noob to something that explains what the strategy is for a rolling buy sell bot?

Thanks.

BTC to USD rolls, as in the value repeatedly crosses the same point or the same trailing/advancing points.

In it's simplest form a lot of people roll BTC just by buying at 120,110,100,90,80 and selling at 100,110,120,130. 

In a more advanced form BTC experiences hundreds of micro spikes and dips (my trade engine V2) which lets you buy at 114.26 and sell at 114.84 etc.
Code:
Buy = Last*(1-.002)*((1-$profitThreshold/2)^(1+iteration))
Sell = Buy/(1-.002)/((1-$profitThreshold/2)^(1+iteration))
up to hundreds of times a day.   


In a more advanced form, BTC experiences macro-rolls of 2-10% on a daily/weekly/monthly basis allowing you to buy at almost any price and sell at an advancing price of +2.5/5/10% while at the same time experiencing micro-rolls mentioned above (my trade engine V3)
Code:
Sell = Dolar Cost Average /(1-.002)/(1-.002)/((1-$biggerProfitThreshold)^(1+iteration))

In an even more advanced form, BTC Appreciates and Depreciates to USD at different intervals (rolling price) and moves toward and away from a rolling 24 hour high and low.  If you were always 100% in BTC as it approached and broke the high, and were always 100% in USD as BTC approached and broke the low, you would profit (a lot) from the resulting appreciation of BTC vs USD and USD vs BTC.
Code:
Omitted

The n00b answer is "a rolling bot, automatically buys low and sells high using a very volatile vehicle" 

My trade history for the first three versions of the engine show low buys followed by high sells in each version.  They also show an overall loss due to B appreciation beating the profit from rolling.  If the price of B slowly declined I would have made a profit from the micro and macro rolls in addition to USD vs BTC appreciation.
donator
Activity: 686
Merit: 519
It's for the children!
newbie
Activity: 44
Merit: 0
Is arbitrage still profitable? and how has your experience been so far running this?

Arbitrage is less profitable now that a lot of bots exist.   As I said I have abandoned this for a rolling buy sell bot which is proving more profitable.  I did make several B over the course of a few weeks using this bot.  I would think that other exchanges and auto transfers could be added in order to take advantage of the dozen or so alts out there with different prices and faster transaction times than B.

All of that said.  I'm not one to turn down making even $.01 a day while I sleep, eat and work.  Free money is free money.

Can you point a noob to something that explains what the strategy is for a rolling buy sell bot?

Thanks.
legendary
Activity: 1610
Merit: 1000
Crackpot Idealist
well shit, I didn't even spot the (obvious) curl call. Shame on me.

Curl alone did not sort it out. I had to create the nonce file and now the bot is spitting out what looks like morse code so I guess its working now. Thanks!

[edit] ok, i will bite. this is what the output looks like

Code:
#screen -dmS arbot -h 1024 -L ./roundrobin.sh
..---....-....----.--------.--..-.---.------------.---.--.-.----.---------------------.----.----.-.--------.------.--.-..--..------------------------.-------.-----------.-..-.--.-..-.--....---------.-------.------------------.--.---.----.-------------------------..-..------.-.--.---.----..-----------------------.-----------.------------.---.--------.-----.-------------.--------.----.-----------.-.3....-..-.---.-.----.----..---....-.-..-..----.---.--......-----..-...---------.---...-..---..-..---.----..---.-..-----.-----.--.-------...---.---..-----.-.----.----------.---.-..-.----.-.1------.-.--.------.-------.----.---.---------.----------------------.-..-.---.---..-------.---.----.-.-.--...---..-.-------------..-.--.---..-----.-.....-.----.--..--.--....1-------..---.---..------..--..--.--....-.-----...-.-..--.--.-.---..---.---.----.-------.--.-....--.-------.-.-----.--...--.-..-..--.-.---..-..-..-.--.--.....-.-..-..-........--.-......--------.-..1-.------------..------.1----.------------...-.-----..--..-..-.----.--.-----------....---.-..--.--------.----.-...-.-...-.--...--.-.-..-..-..--...--.....-.--...-...--------.-----.-...---.-------.------.-----------.---.---..-.-.-...-.--------...-------.--.-.--.---.---.-----.2..----.------..-..--..-------..--.--------.-------.-.--.-.1----.-.------.-.1.-.-...-...--.1.----.--..-..--.-----.------.--.--.--------------.------..-..--.----..-.---.--.------------.---------.-.-----.--.----..---------....-.--.-.-.--.---------.----..------..-----.-.--------.----------..---...-----...--.-.1.---.-...-----.-----.----.--------------------------..------------.----.-.----.-..-.-..1---.-..-.--..--------.---------.--------.1-..-.-...-..-.1----.--.-..--.-----.--------...--.---..--.--------.--.-..------.-.-----.1-.--...-.-------.-.-..-..-------.----------.---..---.----.

Reading the translation of this I ASSUME all is well and the script just does not see a profitable path? Reason I ask is becuase this looks nothing like Jude Austin's output he posted.
newbie
Activity: 23
Merit: 0
I've been mining LTC and depositing directly to my btc-e account, running the arb bot to find the most profitable path to BTC on btc-e then sending the BTC to gox to cash out for USD and take advantage of the price difference. It's a rather round-a-bout way of going about things but it works out pretty well.

Also I figured out if you put in a support request with btc-e and ask them to white list your IP address it will stop your bot from getting blocked and eliminate the need for the round robin script.

I would highly suggest anyone using their API to ask them to white list their IP address.
donator
Activity: 848
Merit: 1078
Is arbitrage still profitable? and how has your experience been so far running this?

I ran an arb bot for a long time and it was very profitable. I stopped it to pursue more profitable ventures, i monitor the prices a lot still (out of habit) and see a lot of arb opportunities. Good luck to those running the script. The more arbitrage there is, the more efficient the market will become.

Thank you for pointing that out!  Since exchanges are not internally arbitrating and there is no open cooperation to create an inter-exchange arbitration system the markets have strange gaps in prices and exchange rates.  In an ideal system the prices and rates would automatically even out over all of the exchanges (which could also reduce BTC's price correlation to gox uptime).

Thats the whole idea of people running arb bots, as well as giving them profits, it helps normalise the prices across each exchange. At the moment MtGox still leads price movements.

As for internal arb, an exchange trading on its own books isn't good practise and is a severe conflict of interest as they would easily have the capability to both under cut everyone and perform 'front running'.
donator
Activity: 686
Merit: 519
It's for the children!
Tried running this to see what it would do and it's throwing me these errors:

Code:
gdlinux@gdlinux:~/Desktop$ php phpbot.php
#screen -dmS arbot -h 1024 -L ./roundrobin.sh
PHP Warning:  fopen(nonce): failed to open stream: No such file or directory in /home/gdlinux/Desktop/phpbot.php on line 689
PHP Warning:  fread() expects parameter 1 to be resource, boolean given in /home/gdlinux/Desktop/phpbot.php on line 690
PHP Warning:  fclose() expects parameter 1 to be resource, boolean given in /home/gdlinux/Desktop/phpbot.php on line 691
PHP Fatal error:  Call to undefined function curl_init() in /home/gdlinux/Desktop/phpbot.php on line 665

and this is a little beyond me to figure out. I set debug to TRUE and the output did not give me any more hints. Thoughts?

My guess would be that you don't have the Curl extension installed for PHP

I would agree that curl_init() error would tell me you don't have the curl extension.  Also this is odd "PHP Warning:  fopen(nonce): failed to open stream: No such file or directory in /home/gdlinux/Desktop/phpbot.php on line 689"  Try creating an empty file called nonce with no extension at /home/gdlinux/Desktop/nonce and see if that helps.

Code:
touch /home/gdlinux/Desktop/nonce
donator
Activity: 686
Merit: 519
It's for the children!
Is arbitrage still profitable? and how has your experience been so far running this?

I ran an arb bot for a long time and it was very profitable. I stopped it to pursue more profitable ventures, i monitor the prices a lot still (out of habit) and see a lot of arb opportunities. Good luck to those running the script. The more arbitrage there is, the more efficient the market will become.

Thank you for pointing that out!  Since exchanges are not internally arbitrating and there is no open cooperation to create an inter-exchange arbitration system the markets have strange gaps in prices and exchange rates.  In an ideal system the prices and rates would automatically even out over all of the exchanges (which could also reduce BTC's price correlation to gox uptime).
donator
Activity: 848
Merit: 1078
Is arbitrage still profitable? and how has your experience been so far running this?

I ran an arb bot for a long time and it was very profitable. I stopped it to pursue more profitable ventures, i monitor the prices a lot still (out of habit) and see a lot of arb opportunities. Good luck to those running the script. The more arbitrage there is, the more efficient the market will become.
sr. member
Activity: 350
Merit: 250
Tried running this to see what it would do and it's throwing me these errors:

Code:
gdlinux@gdlinux:~/Desktop$ php phpbot.php
#screen -dmS arbot -h 1024 -L ./roundrobin.sh
PHP Warning:  fopen(nonce): failed to open stream: No such file or directory in /home/gdlinux/Desktop/phpbot.php on line 689
PHP Warning:  fread() expects parameter 1 to be resource, boolean given in /home/gdlinux/Desktop/phpbot.php on line 690
PHP Warning:  fclose() expects parameter 1 to be resource, boolean given in /home/gdlinux/Desktop/phpbot.php on line 691
PHP Fatal error:  Call to undefined function curl_init() in /home/gdlinux/Desktop/phpbot.php on line 665

and this is a little beyond me to figure out. I set debug to TRUE and the output did not give me any more hints. Thoughts?

My guess would be that you don't have the Curl extension installed for PHP
legendary
Activity: 1610
Merit: 1000
Crackpot Idealist
Tried running this to see what it would do and it's throwing me these errors:

Code:
gdlinux@gdlinux:~/Desktop$ php phpbot.php
#screen -dmS arbot -h 1024 -L ./roundrobin.sh
PHP Warning:  fopen(nonce): failed to open stream: No such file or directory in /home/gdlinux/Desktop/phpbot.php on line 689
PHP Warning:  fread() expects parameter 1 to be resource, boolean given in /home/gdlinux/Desktop/phpbot.php on line 690
PHP Warning:  fclose() expects parameter 1 to be resource, boolean given in /home/gdlinux/Desktop/phpbot.php on line 691
PHP Fatal error:  Call to undefined function curl_init() in /home/gdlinux/Desktop/phpbot.php on line 665

and this is a little beyond me to figure out. I set debug to TRUE and the output did not give me any more hints. Thoughts?
sr. member
Activity: 350
Merit: 250
It's officially working, I appreciate the help! It totally was the SSL.

My fix should work for anyone using Windows who wants to run the bot.

Thanks again, I'll donate my first week of profit and a little extra next Sunday for taking the time to code this thing and help me out.

Hi!  I am giving this a try to see how it performs.  I tried out grabble's fix on windows here and can confirm it successfully fixed the issue for me as well.  Loaded the account with a couple LTC and smaller amounts of BTC so its not a huge loss if I do lose Cheesy

I will donate some of my profits if I am successful aswell!
newbie
Activity: 23
Merit: 0
It's officially working, I appreciate the help! It totally was the SSL.

My fix should work for anyone using Windows who wants to run the bot.

Thanks again, I'll donate my first week of profit and a little extra next Sunday for taking the time to code this thing and help me out.
donator
Activity: 686
Merit: 519
It's for the children!
Nice!  I would assume it has something to do with the windows vs linux curl and ssl implementations?

That output shows it's searching for trades.  If you change debug from NULL to TRUE it will spit out some more information.

Keep in mind debug has to be off in order to complete any trades as it takes to much time for php to print messages between trades.
newbie
Activity: 23
Merit: 0
Holy crap. Progress! (I think).

I started to understand php more and got suspicious of the send function.

I modified the function's options to this:

Code:
	

function send( $url = NULL )
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; BTCE PHP client; '.php_uname('s').'; PHP/'.phpversion().')');
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
$result = curl_exec($ch);
curl_close($ch);

return $result;
}


I seem to be getting this:

Code:
C:\Apache2\htdocs>php bot.php
..---..--.-------------------------------------------.--.--------------------.--------.-.-

At least it's not getting errors anymore right? I think it had to do with SSL using HTTPS. It was giving curl an error that wasn't coming over to the php side for me to see but when I started messing with curl I realized it was getting a certificate error ...
newbie
Activity: 23
Merit: 0
C:\Apache24\htdocs>php bot.php
.E1Array
(
)
Array
(
)
Array
(
)
-E2Array
(
)
Array
(
)
Array
(
)
-E3Array
(
)
Array
(
)
Array
(
)
-E4Array
(
)
Array
(
)
Array
(
)
-E5

I don't even know what to make of it, it's not returning anything it appears. I'm going to try downgrading my PHP as I'm running 5.4.15 maybe this will help? I don't really see why else it does not seem to work.
donator
Activity: 686
Merit: 519
It's for the children!
I'm running PHP 5.3.2-1ubuntu4.19 with Suhosin-Patch (cli)

Try changing this code block out with the changes below and past the output, this should show what's happening.

Code:
	while( empty($BTCtoUSD) || empty($LTCtoBTC) || empty($LTCtoUSD) ){
$BTCtoUSD = @json_decode( send( 'https://btc-e.com/api/2/btc_usd/depth' ), TRUE );
$LTCtoBTC = @json_decode( send( 'https://btc-e.com/api/2/ltc_btc/depth' ), TRUE );
$LTCtoUSD = @json_decode( send( 'https://btc-e.com/api/2/ltc_usd/depth' ), TRUE );
//Verify the order book changed
$old = $BTCtoUSDold+$LTCtoBTCold+$LTCtoUSDold+$BTCtoUSDold1+$LTCtoBTCold1+$LTCtoUSDold1;
$new = $BTCtoUSD['bids'][0][0]+$LTCtoBTC['bids'][0][0]+$LTCtoUSD['bids'][0][0]+$BTCtoUSD['asks'][0][0]+$LTCtoBTC['asks'][0][0]+$LTCtoUSD['asks'][0][0];
if( !@$BTCtoUSD['bids'] || !@$LTCtoBTC['bids'] || !@$LTCtoUSD['bids']){
$BTCtoUSD = $LTCtoBTC = $LTCtoUSD = array();
//$sleep=rand(6, 36)*(++$e);
$e++;
print "E" . $e;
sleep(5);
if ( $e > 2 ) exit;
/*
if ($nanosleep > 100000)
{$nanosleep = $nanosleep+100000;} //up to 9999 runs
else
{$nanosleep = $nanosleep^10;}
*/
}


TO:
Code:
	while( empty($BTCtoUSD) || empty($LTCtoBTC) || empty($LTCtoUSD) ){
$BTCtoUSD = json_decode( send( 'https://btc-e.com/api/2/btc_usd/depth' ), TRUE );
$LTCtoBTC = json_decode( send( 'https://btc-e.com/api/2/ltc_btc/depth' ), TRUE );
$LTCtoUSD = json_decode( send( 'https://btc-e.com/api/2/ltc_usd/depth' ), TRUE );
//Verify the order book changed
$old = $BTCtoUSDold+$LTCtoBTCold+$LTCtoUSDold+$BTCtoUSDold1+$LTCtoBTCold1+$LTCtoUSDold1;
$new = $BTCtoUSD['bids'][0][0]+$LTCtoBTC['bids'][0][0]+$LTCtoUSD['bids'][0][0]+$BTCtoUSD['asks'][0][0]+$LTCtoBTC['asks'][0][0]+$LTCtoUSD['asks'][0][0];
if( !$BTCtoUSD['bids'] || !$LTCtoBTC['bids'] || !$LTCtoUSD['bids']){
$BTCtoUSD = $LTCtoBTC = $LTCtoUSD = array();
$e++;
print "E" . $e;
sleep(5);
if ( $e > 4 ) exit;
                        print_r($BTCtoUSD);
                        print_r($LTCtoBTC);
                        print_r($LTCtoUSD);
}
newbie
Activity: 23
Merit: 0
I can pull the data just fine with:

Code:

$c = curl_init('https://btc-e.com/api/2/btc_usd/depth');
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);

$html = curl_exec($c);

if (curl_error($c))
    die(curl_error($c));

// Get the status code
$status = curl_getinfo($c, CURLINFO_HTTP_CODE);

curl_close($c);

echo "
".print_r($html, true)."
";


It prints this:

{"asks":[[110.999,0.482],[111,0.08565512],[111.44,2.42373056],[111.45,0.95797641],[111.46,12.766699],[111.47,43.73969491],[111.499,0.02],[111.5,1.0
4798],[111.59,0.22061],[111.6,1.35216595],[111.608,0.01],[111.64,0.011],[111.65,0.2989164],[111.69,0.08],[111.698,0.010978],[111.7,0.6438],[111.769,0.01],[111
.829,5.282],[111.839,0.1825],[111.84,0.25],[111.93,0.25],[111.949,0.02],[111.95,0.2601796],[111.96,0.01],[111.98,0.14],[111.99,4.55689031],[111.999,0.21026026
],[112,6.56381636],[112.01,0.01],[112.012,0.1117995],[112.06,0.01],[112.07,0.25],[112.1,24.371],[112.14,0.09123795],[112.198,0.010978],[112.2,0.3323],[112.28,
0.25],[112.298,0.01],[112.3,1.925859],[112.312,0.010976],[112.32,0.01],[112.373,0.05],[112.384,0.05],[112.394,0.05],[112.395,0.05],[112.4,3.2528],[112.406,0.1
],[112.41,0.01],[112.417,0.05],[112.418,0.05],[112.428,0.05],[112.43,0.25],[112.44,1.05],[112.45,0.0101796],[112.46,0.01],[112.47,0.11079744],[112.479,0.01],[
112.49,0.01],[112.5,6.79002662],[112.51,0.04998],[112.544,0.1996],[112.55,0.25691786],[112.555,0.01],[112.57,0.25],[112.578,0.05],[112.598,0.0101796],[112.6,0
.07858852],[112.63,0.0113],[112.634,0.01],[112.65,0.2685204],[112.69,10.01300269],[112.698,0.010978],[112.7,0.2994],[112.75,0.04882465],[112.77,0.1127627],[11
2.79,5],[112.8,2.20190831],[112.81,0.02104057],[112.86,0.25],[112.87,0.0109],[112.878,0.019],[112.89,0.30755],[112.9,5.80713602],[112.93,0.474],[112.94,0.2009
6176],[112.95,10.0101796],[112.967,0.01],[112.98,5.89170535],[112.988,0.02],[112.99,6.111],[113,34.99802712],[113.03,0.25],[113.05,0.15],[113.13,10.01996],[11
3.136,0.02062671],[113.16,3.961],[113.17,0.5],[113.171,0.03369487],[113.176,0.04990195],[113.177,0.2],[113.178,2.42799529],[113.179,0.2],[113.187,0.2],[113.18
8,0.2],[113.189,0.2],[113.19,0.6],[113.197,0.2],[113.198,0.010978],[113.199,1],[113.2,1.01400002],[113.22,0.27],[113.227,0.24837326],[113.228,0.05],[113.229,0
.05],[113.23,3.5325],[113.25,0.31757619],[113.3,1.33626884],[113.32,0.25],[113.33,0.2],[113.39,0.84166937],[113.4,10.05373585],[113.412,0.01],[113.421,0.03],[
113.423,0.01],[113.45,0.0101796],[113.47,3.992],[113.471,0.022],[113.49,1.32405],[113.5,232.2819077],[113.58,0.1],[113.59,10],[113.6,1.87955804],[113.606,0.02
],[113.61,0.25],[113.613,0.1996],[113.64,0.05],[113.65,0.05198778],[113.698,0.010978],[113.7,0.69915719],[113.71,0.1],[113.75,0.02],[113.751,0.02],[113.759,0.
0103152],[113.76,0.1],[113.8,1.91389155],[113.82,1],[113.83,0.02],[113.839,0.95492748],[113.84,0.01],[113.865,0.02]],"bids":[[110.9,0.13374988],[110.84,0.15],
[110.83,1.91367751],[110.829,3.02409137],[110.82,0.25],[110.74,0.44115717],[110.71,4.4743],[110.7,8.68410389],[110.699,0.01],[110.69,0.15],[110.506,0.01002],[
110.5,0.0399],[110.401,5.96690474],[110.4,0.743],[110.381,0.01795565],[110.38,0.25],[110.37,0.89],[110.347,0.017],[110.27,0.25],[110.179,0.02004008],[110.01,0
.0102],[110.002,0.011],[110.001,1.803123],[110,11.24350583],[109.981,0.1825],[109.98,0.25],[109.95,0.0102],[109.93,4.90219398],[109.793,0.017],[109.699,0.01],
[109.698,0.03],[109.61,0.12729965],[109.55,0.25],[109.502,0.011],[109.42,0.0101],[109.4,5.17183642],[109.39,0.25],[109.27,0.25],[109.239,0.017],[109.18,0.8502
],[109.176,2.583],[109.061,0.1],[109.02,0.01],[109.01,2.9652],[109.002,0.011],[109,2.48760606],[108.96,0.01],[108.834,0.0122],[108.685,0.017],[108.65,0.261211
22],[108.61,3.7799184],[108.6,22.45158424],[108.59,5.9299154],[108.56,0.25],[108.52,0.02],[108.51,0.7],[108.502,0.011],[108.5,6.47790337],[108.42,1.25680822],
[108.352,0.030764],[108.3,0.55],[108.29,0.25],[108.25,1.05030486],[108.131,0.017],[108.13,1.453],[108.1,4.55772433],[108.085,0.011],[108.084,0.01],[108.07,0.0
5201],[108.06,0.2555],[108.02,9.794],[108.01,0.0202],[108.002,0.011],[108,35.30530543],[107.945,2.2234],[107.847,0.5563],[107.8,0.05],[107.75,0.05],[107.74,0.
25],[107.7,0.1],[107.685,11.972857],[107.66,0.0553],[107.6,0.35039174],[107.577,0.03704008],[107.539,0.2],[107.53,0.03],[107.52,5],[107.51,0.71513592],[107.50
2,0.011],[107.5,8.202],[107.47,0.01],[107.43,0.51262715],[107.4,0.4],[107.348,0.027],[107.337,0.2],[107.33,0.8],[107.32,0.2],[107.3,0.4],[107.28,0.09],[107.21
,0.45],[107.18,0.02],[107.17,0.02],[107.12,1.59895495],[107.111,0.01],[107.1,3.10063865],[107.023,0.017],[107.01,1.16919169],[107.002,0.011],[107,24.92454336]
,[106.93,3],[106.9,1],[106.838,0.32819],[106.76,0.01683],[106.63,1.35803264],[106.614,0.0235],[106.6,0.2056],[106.54,0.04],[106.517,0.01],[106.502,0.011],[106
.5,24.31393613],[106.469,0.017],[106.44,0.01872844],[106.411,0.01],[106.41,0.011],[106.4,1],[106.305,0.01],[106.25,2.91808503],[106.21,10],[106.2,23.19],[106.
12,0.92432135],[106.1,40.05754467],[106.01,10.0617591],[106.002,0.011],[106,18.16052253],[105.99,499.22271165],[105.94,0.7],[105.915,0.017],[105.9,1.2525],[10
5.89,0.664],[105.72,4],[105.711,0.040504],[105.6,3.49097394],[105.56,0.4],[105.55,0.05],[105.502,0.011],[105.5,1.55],[105.45,0.304844],[105.42,1.10233139],[10
5.361,0.017],[105.36,0.011]]}

C:\Apache24\htdocs>php bot.php
.E1-E2-E3
C:\Apache24\htdocs>

So I don't think I'm running up against the DDOS protection. I've been wracking my brain for 2 days and can't figure it out.

What version of php do you run? Maybe that has something to do with it?
donator
Activity: 686
Merit: 519
It's for the children!
EDIT: You can also remove the @ symbol before each of those three json_decode lines and it should spit out an error that will help find out what's wrong with the url.

I think I'm just doing something wrong, I got past the 301 error but now the only output I get is .E1-E2-E3 and then the process terminates. I think I must have configured something wrong with my php or I'm executing it wrong (I'm literally just putting php bot.php). PHP has never been my strong suit haha.

Your getting hit by their DDOS protection still.

Those errors show when you can't pull the ticker pages from E:

Code:
		$BTCtoUSD = @json_decode( send( 'https://btc-e.com/api/2/btc_usd/depth' ), TRUE );
$LTCtoBTC = @json_decode( send( 'https://btc-e.com/api/2/ltc_btc/depth' ), TRUE );
$LTCtoUSD = @json_decode( send( 'https://btc-e.com/api/2/ltc_usd/depth' ), TRUE );

check those links from a browser using the same IP as the machine you are running the script from:
https://btc-e.com/api/2/btc_usd/depth
https://btc-e.com/api/2/ltc_btc/depth
https://btc-e.com/api/2/ltc_usd/depth

This is where swapping IP's comes in handy.

You can also stop the program from exiting (so it will keep trying to pull the books until your IP is banned Smiley  by removing this line:

Code:
			
if ( $e > 2 ) exit;
newbie
Activity: 23
Merit: 0
I think I'm just doing something wrong, I got past the 301 error but now the only output I get is .E1-E2-E3 and then the process terminates. I think I must have configured something wrong with my php or I'm executing it wrong (I'm literally just putting php bot.php). PHP has never been my strong suit haha.
donator
Activity: 686
Merit: 519
It's for the children!
I've been having a hell of a time getting this thing to work at all. I think my curl is all screwed up. I just keep getting 301 moved permanently ... Anyone else having this issue?

Yes.  I have seen this.  99% of the time this means that Cloudflare is either asking you to verify you are human (using browser javascript) or they have banned your IP.

This was a huge Issue for me since I run everything on headless linux server boxes.  I would normally setup a quick socks proxy via ssh and open btc-e via a browser to verify I was human via the javascript and then it would run.  This was one of the reasons I instituted the round Robbin script.  CloudFlare is horrible.  It protects the company from DDOS by preventing valid users access which makes the DDOS successful. 

Let me know if your issue is different and look into it.
donator
Activity: 686
Merit: 519
It's for the children!
Is arbitrage still profitable? and how has your experience been so far running this?

Arbitrage is less profitable now that a lot of bots exist.   As I said I have abandoned this for a rolling buy sell bot which is proving more profitable.  I did make several B over the course of a few weeks using this bot.  I would think that other exchanges and auto transfers could be added in order to take advantage of the dozen or so alts out there with different prices and faster transaction times than B.

All of that said.  I'm not one to turn down making even $.01 a day while I sleep, eat and work.  Free money is free money.
donator
Activity: 686
Merit: 519
It's for the children!
Any recommended settings?

I assume that when these amounts become positive it will begin to trade them accordingly?

Thanks for your time and script!

You are correct, it should trade as soon as you see a positive result.  Keep in mind it takes a profit amount in B and a profit threshold as a percentage so it has to meet both criteria before trading.

Code:
//Using dynamic depth we can execute the most profitable trade in $currency with a minimum % profit
//set both to 0 to trade everything profitable
$threshold = 0; // Execute any profitable trade **Trade will not execute unless we beat the P % below
$thresholdP = .5; //Threshold as a %
newbie
Activity: 23
Merit: 0
I've been having a hell of a time getting this thing to work at all. I think my curl is all screwed up. I just keep getting 301 moved permanently ... Anyone else having this issue?
legendary
Activity: 3192
Merit: 1279
Primedice.com, Stake.com
Is arbitrage still profitable? and how has your experience been so far running this?
legendary
Activity: 1140
Merit: 1000
The Real Jude Austin
Any recommended settings?

Been messing with it for awhile now.

I decided not to use the roundrobin.sh and I set the error sleep time to 15 seconds and to terminate after 100 errors.

This let's it time out but continue to still run.

Here is some output from it:
Code:
 BULB Amount: -0.026001930645792 BULB Percent: -2.6001930645792
 BLUB Amount: -0.012551582183679 BLUB Percent: -1.2551582183679.-------
 BULB Amount: -0.025993288249436 BULB Percent: -2.5993288249436
 BLUB Amount: -0.012551582183679 BLUB Percent: -1.2551582183679.----------------------------------
 BULB Amount: -0.025993288249436 BULB Percent: -2.5993288249436
 BLUB Amount: -0.014935900543359 BLUB Percent: -1.4935900543359.---------------------
 BULB Amount: -0.031117841275131 BULB Percent: -3.1117841275131
 BLUB Amount: -0.014935900543359 BLUB Percent: -1.4935900543359.-----------
 BULB Amount: -0.031117841275131 BULB Percent: -3.1117841275131
 BLUB Amount: -0.014935900543359 BLUB Percent: -1.4935900543359.------------------------------------------------------------
 BULB Amount: -0.025310014512676 BULB Percent: -2.5310014512676
 BLUB Amount: -0.012210022717122 BLUB Percent: -1.2210022717122.-------------------------------------------------------------------------------------------------------------------------------------------
 BULB Amount: -0.020668865787978 BULB Percent: -2.0668865787978
 BLUB Amount: -0.01340038470649 BLUB Percent: -1.340038470649.-----------------------
 BULB Amount: -0.020668865787978 BULB Percent: -2.0668865787978
 BLUB Amount: -0.01340038470649 BLUB Percent: -1.340038470649.------------
 BULB Amount: -0.020668865787978 BULB Percent: -2.0668865787978
 BLUB Amount: -0.01340038470649 BLUB Percent: -1.340038470649.-----------
 BULB Amount: -0.020668865787978 BULB Percent: -2.0668865787978
 BLUB Amount: -0.01340038470649 BLUB Percent: -1.340038470649.---------------------
 BULB Amount: -0.020668865787978 BULB Percent: -2.0668865787978
 BLUB Amount: -0.01340038470649 BLUB Percent: -1.340038470649.-------------------------
 BULB Amount: -0.020668865787978 BULB Percent: -2.0668865787978
 BLUB Amount: -0.01340038470649 BLUB Percent: -1.340038470649.---------------------
 BULB Amount: -0.020668865787978 BULB Percent: -2.0668865787978
 BLUB Amount: -0.013097281999212 BLUB Percent: -1.3097281999212.-----------
 BULB Amount: -0.020668865787978 BULB Percent: -2.0668865787978
 BLUB Amount: -0.013097281999212 BLUB Percent: -1.3097281999212.----------
 BULB Amount: -0.020668865787978 BULB Percent: -2.0668865787978
 BLUB Amount: -0.013097281999212 BLUB Percent: -1.3097281999212.----------------------
 BULB Amount: -0.019983779300247 BULB Percent: -1.9983779300247
 BLUB Amount: -0.013097281999212 BLUB Percent: -1.3097281999212.-------------------------
 BULB Amount: -0.019983779300247 BULB Percent: -1.9983779300247
 BLUB Amount: -0.013097281999212 BLUB Percent: -1.3097281999212.----------
 BULB Amount: -0.019983779300247 BULB Percent: -1.9983779300247
 BLUB Amount: -0.011582071565528 BLUB Percent: -1.1582071565528.
 BULB Amount: -0.019983779300247 BULB Percent: -1.9983779300247
 BLUB Amount: -0.011240531161784 BLUB Percent: -1.1240531161784.-------------------------------

I assume that when these amounts become positive it will begin to trade them accordingly?

Thanks for your time and script!
donator
Activity: 686
Merit: 519
It's for the children!
That (is a reminder) to kick off my roundrobbin program inside a screen session -> if Btc-e errors a lot their ddos tends to block IP's so I swap IP's on the second error, here is the roundrobin.sh script.

Code:
#!/bin/bash
NODE1="IP"
NODE2="IP"

#########################
#Arbitrage Bot Round Robin Controller
#must copy nonce
#must update master script
#must swap nodes on second error
#must respect ddos timer
##########################
echo "Round Robbin Started...  Ensure you are in a screen session!"

#node 1
node1(){
    echo "Starting Node 1..."
    ssh -T $NODE1 "cd ~/arbot;php ~/arbot/arbot.php;exit 0;"
    echo "Exited Node 1, Copying Files to Node 2."
    scp $NODE1:/PATH/arbot.php  $NODE2:/PATH/arbot.php
    scp $NODE1:/PATH/nonce $NODE2:/PATH/nonce
}


#node 2
node2(){
    echo "Node 2 Started."
    ssh -T $NODE2 "cd ~/arbot;php ~/arbot/arbot.php;exit 0;"
    echo "Exited Node 2, Copying Files to Node 1."
    scp $NODE2:/PATH/arbot.php  $NODE1:/PATH/arbot.php
    scp $NODE2:/PATH/nonce $NODE1:/PATH/nonce
}

#Main Loop
while [ 1 -eq 1 ];
do
        node1
        sleep 5
        node2
        sleep 5
    done
sr. member
Activity: 252
Merit: 250
what does the first line do with the shell script call?
donator
Activity: 686
Merit: 519
It's for the children!
Reserved.
donator
Activity: 686
Merit: 519
It's for the children!


EDIT: Rolling Bot code posted: https://bitcointalksearch.org/topic/btc-e-gox-rolling-bot-rocking-bot-trading-bot-full-code-366546

This project took a while to write up.

It made several BTC then several USD though it acted way to slow for my needs.  I've changed over to a price rolling bot and no longer need to run this.

This is not a .01B to L to U bot.  You can run from B to B or U to U, it analyses two paths each way (BULB,BLUB) (UBLU,ULBU) and chooses the most profitable path (In B or U) as an amount NOT AS A PERCENTAGE my goal was to the most money not the highest percent and since this is dynamic that feature was required.  You can still set a minimum % profit for each trade and I recommend setting it to at least the exchange fee of .2% as you will frequently get stuck in LTC.  There is a currency flush used on trade leg three that trades out all L for $currency.  This uses a recursive dynamic depth calculation and can perform circular trades of any amount.  If you tell it to trade 1B it will sort the order book and find out what the max B,L,U available is before executing a trade (So if you try with 1B it might trade .01, .2, 1, .98, .023 etc.)  depending on the size of each leg of the order book.

There are a lot of configurable variables.  There is also an unfinished currency change function which would allow you to swap from B to U when the price of B is falling and U to B when it is rising.  This actually works really well, you can take advantage of arbitrage in either currency while holding funds in the most profitable currency.

Output is very minimal because output costs time, the goal was sub 1ms per trade analysis.  When a trade is kicked off there is often several opportunities back to back or a large order book on all legs so the code prints no output after a trade, it simply runs the paths again and keeps trading until no profit opportunity is found.

- = duplicate orderbook
. = trade path analysed
a number = number of trades completed
E# = error getting the order book (The current code was written to run on a round robbin set of servers and will exit after two errors)
o = orders placed
C = orders cancelled

you'll have to enter your key and secret
be careful setting min & max to the same number as this will use a different trading mechanism.

I'm not responsible for any N00B losing money or making money (Though I'll gladly accept donations! 18DBdwc6JkCGrz2svV6mCPeURbZM8La5TN)

Code:
#screen -dmS arbot -h 1024 -L ./roundrobin.sh
 
//USER CONFIGURABLE
//Print Debug information on trading
$DEBUG NULL;

//Your min and max bid, set to the same for static trades
$minBTC .01;
$maxBTC .025;
$minUSD 2;
$maxUSD 10;
//To use fastTrade set min and max to the same amount.

if ( $minBTC == $maxBTC || $minUSD == $maxUSD){
$fastTrade TRUE;
print "Fast Trade Enabled ->> Remember to Clear currencies";
}
//Minimum Bids the exchange will accept (BTC-E Mins)
$minBidBTC .01;
$minBidLTC .1;
$minBidUSD .01


//Using dynamic depth we can execute the most profitable trade in $currency with a minimum % profit
//set both to 0 to trade everything profitable
$threshold 0// Execute any profitable trade **Trade will not execute unless we beat the P % below
$thresholdP .5//Threshold as a %

//100,001-999,999,999 max wait between non-trade & book duplications reduced 1.2.3.4.
$nanosleep 1//nanoseconds

//The maximum time you want to keep an order in the order book in seconds
//This is only applicable to currency flushing (leg 3) orders.
$maxAge 60//seconds

//Currency To start and End in B || L || U
$currency "U";
$interval 12// your currency change interval, this many ticks will be analyzed to determine changes in currency
$curve 1//the number of opposite ticker pairs to throw away.
/* IE, if you pull $10,11,12,9,13 with an interval 5 and a curve of 1 the price will be assumed to be rising.
 * if your interval is 0 the price will be assumed to be stagnant
 */

//BTC-E Currency pairs & bid ask JSON names
$btcesymbol = array("btc_usd""ltc_btc""ltc_usd");
$btcebidorask = array("bids""asks");
$executeTrade $postTrade FALSE;

//Programs
//A - Currency Arbitrage, Choose UtoU or BtoB arbitrage through L
//B - Portfolio Balancing, Maintain 50% of two currencies at all times
//D - Buy Down, Buy 1/2 spread each .5 drop and sell 1 each $1 gain

//COUNTERS
$count=1//# of trades
$o $i $e 0
$t 0;
$GLOBALS['ticker'] = array();
//Holds order numbers and times

$price $volume = array();
$path $BULB $BLUB $UBLU $ULBU 0;

//get the incriment from our file
$nonce readInc();

//Were starting a fresh run, cancel pending orders.
cancelOrders();

//changeCurrency();
//$currency = changeCurrency();

// repeat forever
while ( 'miaviator' != 'uncool'){
//We did not execute a trade the last loop
if (!$executeTrade){ 
//This is a non-trade loop, write out the incriment to a file.
writeInc($nonce);
//changeCurrency();
//Program Output
print ".";
//we Executed a trade the last run (not this run)
if ($postTrade){
$minUSD $minBTC*$BTCtoUSD['bids'][0][0];
$maxUSD $maxBTC*$BTCtoUSD['asks'][0][0];
//The total trades made this run
//@$total = $total + $count;
print $count;
//Reset the trade counter
$count 0;
//turn off post trade
$postTrade FALSE;
if(@$fastTrade){
cancelOrders();
//$trade = json_decode(btce_query("getInfo"), TRUE);
//DEBUG add currency clearing method.
} else {
while ( $o ){
print "o";
$o--;
}
}
}
}
if ($executeTrade){
//We traded last run
$postTrade TRUE;
//Add a trade to the counter
$count++;
//reset trade BOOL for next run
$executeTrade FALSE
}

//Get order book
$i $e 0;
//this is horrible code \/ 
$BTCtoUSDold = @$BTCtoUSD['bids'][0][0];
$LTCtoBTCold = @$LTCtoBTC['bids'][0][0];
$LTCtoUSDold = @$LTCtoUSD['bids'][0][0];
$BTCtoUSDold1 = @$BTCtoUSD['asks'][0][0];
$LTCtoBTCold1 = @$LTCtoBTC['asks'][0][0];
$LTCtoUSDold1 = @$LTCtoUSD['asks'][0][0];
//blank the orderbooks
$BTCtoUSD $LTCtoBTC $LTCtoUSD = array();
while( empty($BTCtoUSD) || empty($LTCtoBTC) || empty($LTCtoUSD) ){
$BTCtoUSD = @json_decodesend'https://btc-e.com/api/2/btc_usd/depth' ), TRUE );
$LTCtoBTC = @json_decodesend'https://btc-e.com/api/2/ltc_btc/depth' ), TRUE );
$LTCtoUSD = @json_decodesend'https://btc-e.com/api/2/ltc_usd/depth' ), TRUE );
//Verify the order book changed
$old $BTCtoUSDold+$LTCtoBTCold+$LTCtoUSDold+$BTCtoUSDold1+$LTCtoBTCold1+$LTCtoUSDold1;
$new $BTCtoUSD['bids'][0][0]+$LTCtoBTC['bids'][0][0]+$LTCtoUSD['bids'][0][0]+$BTCtoUSD['asks'][0][0]+$LTCtoBTC['asks'][0][0]+$LTCtoUSD['asks'][0][0];
if( !@$BTCtoUSD['bids'] || !@$LTCtoBTC['bids'] || !@$LTCtoUSD['bids']){
$BTCtoUSD $LTCtoBTC $LTCtoUSD = array();
//$sleep=rand(6, 36)*(++$e);
$e++;
print "E" $e;
sleep(5);
if ( $e ) exit;
/*
if ($nanosleep > 100000)
{$nanosleep = $nanosleep+100000;} //up to 9999 runs
else
{$nanosleep = $nanosleep^10;}
*/
}
if ( $old == $new ){
$BTCtoUSD $LTCtoBTC $LTCtoUSD = array();
print "-";
//Dynamic Timer
//$sleep=rand(100000 , $nanosleep);//100000
//time_nanosleep(0, $sleep);
//Static Timer
time_nanosleep(0$nanosleep);
//if (@$postCancel)
//If we have pending orders cancel them (they may not exist)
if (@$times){
//set the current time to compare orders to
$time time();
//find the earliest order in the array (end)
$orderOne end($times);
//If this order is older than maxage start canceling
if ( $orderOne $time-$maxAge){
//echo loop through order times
foreach ($times as $key => $value ){
//if we've hit orders newer than maxage break
if ( $value $time-$maxAge ){
break;
}
else {
$order_id $orders[$key];
//cancel the order by number we don't need to check if it filled or not
$trade json_decode(btce_query("CancelOrder", array("order_id" => $order_id)), TRUE);
//remove this order and time from the array
unset($orders[$key]);
unset($times[$key]);
print "C";
}
}
}

}
}

if ( $currency == "B"){
////////////////////////////////////////////////////////////////////
//BULB Depth Math
////////////////////////////////////////////////////////////////////
//trade 1 math, B to U, B input
$BTC $maxBTC;
$minimumBidBTC $minBTC;
foreach ($BTCtoUSD['bids'] as $value){
$BTCtoUSDbidRate $value[0]; //set Rate
if ($value[1] >= $minimumBidBTC && $value[1] < $BTC ){  
$BTC  $value[1]; //set to book value
break;    
}
if ( $value[1] >= $minimumBidBTC && $value[1] >= $BTC){
break;
}
}
$USD=$BTC*$BTCtoUSDbidRate*.998// set U to move on
//trade 2 math, U to L, L input
foreach ($LTCtoUSD['asks'] as $value){
$minimumBidLTC = ($minimumBidBTC*$BTCtoUSDbidRate/.998)/$value[0];
$LTCtoUSDaskRate $value[0];
if ($value[1] >= $minimumBidLTC/.998 && $value[1]*$value[0] < $USD ) {
$BTC $USD/$BTCtoUSDbidRate/.998// set new B
$USD $BTC*$BTCtoUSDbidRate*.998// set new U to move on
break;
}
if ( $value[1] >= $minimumBidLTC && $value[1]*$value[0] >= $USD ){
break;
  }        
}
$LTC =($USD*.998)/$LTCtoUSDaskRate// set L to move on
//trade 3 math, L to B’, L input
foreach ($LTCtoBTC['bids'] as $value){
$LTCtoBTCbidRate $value[0];
if ( $value[1]/.998 >= $minimumBidLTC && $value[1] < $LTC  ){
$minimumBidBTC = ($minimumBidBTC*$BTCtoUSDbidRate/.998)/$value[0]; //This is in the wrong place and it's not used?
$USDX=($value[1]*$LTCtoUSDaskRate)/.998;
$BTC=($USDX/$BTCtoUSDbidRate)/.998;
$USD = ($BTC*$BTCtoUSDbidRate)*.998;
$LTC = ($USD/$LTCtoUSDaskRate)*.998;
break;
}
if ( $value[1]/.998 >= $minimumBidLTC && $value[1] >= $LTC ){
break;
}
}
$BULBamount = array($BTC,$USD,$LTC);
$BULBrate = array($BTCtoUSDbidRate,$LTCtoUSDaskRate,$LTCtoBTCbidRate);
//$BULB = round((($LTC*$LTCtoBTCbidRate*.998/$BTC)-1)*100,4);
$BULB $LTC*$LTCtoBTCbidRate*.998-$BTC//B Profit
//4/19 testing only trading above .2% commision threshold to save on currency clearing costs.
$BULBpercent = (($LTC*$LTCtoBTCbidRate*.998)/$BTC-1)*100;
if (@$DEBUG) print "\n BULB Amount: {$BULB} BULB Percent: {$BULBpercent}";
if ($BULB $threshold && $BULBpercent $thresholdP ){$executeTrade TRUE;}//Trade if criteria are met.
if ($BULBamount $minBidBTC){exit;}  //ERROR CHECK
////////////////////////////////////////////////////////////////////
//END END END BULB Depth Math
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//BLUB Depth Math
////////////////////////////////////////////////////////////////////
//trade 1 math, B to L, L input
$BTC $maxBTC;
$minimumBidBTC $minBTC;
foreach ($LTCtoBTC['asks'] as $value){
$minimumBidLTC $minimumBidBTC/$value[0];
$LTCtoBTCaskRate $value[0];
if ($value[1] >= $minimumBidLTC && $value[1]*$value[0] < $BTC && $value[1]*$value[0] >= $minimumBidBTC){
$BTC $value[1]*$value[0]; //set to book value
break;    
}
if ( $value[1] >= $minimumBidLTC && $value[1]*$value[0] >= $BTC){
break;
}
}
$LTC=($BTC/$LTCtoBTCaskRate)*.998// set L to move on
//trade 2 math, L to U, L input
foreach ($LTCtoUSD['bids'] as $value){
$minimumBidLTC $minimumBidLTC/.998;
if ($value[1] >= $minimumBidLTC && $value[1] < $LTC ){
$LTCtoUSDbidRate $value[0];
$BTC $value[1]*$LTCtoBTCaskRate/.998;
$LTC=($BTC/$LTCtoBTCaskRate)*.998// recalc trade 1 with new B
break;
}
if ( $value[1] >= $minimumBidLTC && $value[1] >= $LTC){
$LTCtoUSDbidRate $value[0];
break;

}
$USD = ($LTC*$LTCtoUSDbidRate)*.998// set U to move on
//trade 3 math, U to B’, B input
foreach ($BTCtoUSD['asks'] as $value){
$minimumBidBTC $minimumBidBTC/.998;
if ( $value[1] >= $minimumBidBTC && $value[1]*$value[0] < $USD){
$BTCtoUSDaskRate $value[0];
$LTCX = ($value[1]*$value[0])/( $LTCtoUSDbidRate*.998 ); // set new L from book 
$BTC = ($LTCX*$LTCtoBTCaskRate)/.998// set new B with new L
$LTC = ($BTC/$LTCtoBTCaskRate)*.998// recalc trade 1 with new B
$USD = ($LTC*$LTCtoUSDbidRate)*.998// recalc trade 2 with new U
break;
}
if ( $value[1] >= $minimumBidBTC && $value[1]*$value[0] >= $USD){
$BTCtoUSDaskRate $value[0];
break;
}
}
$BLUBamount = array($BTC,$LTC,$USD);
$BLUBrate = array($LTCtoBTCaskRate,$LTCtoUSDbidRate,$BTCtoUSDaskRate);
//$BLUB = round((((($USD/$BTCtoUSDaskRate)*.998)/$BTC)-1)*100,4);
$BLUB $USD/$BTCtoUSDaskRate*.998-$BTC;
$BLUBpercent = (($USD/$BTCtoUSDaskRate*.998)/$BTC-1)*100;
if ($USD/$BTCtoUSDaskRate*.998-$BTC $threshold && $BLUBpercent $thresholdP )
{$executeTrade TRUE;}
if (@$DEBUG) print "\n BLUB Amount: {$BLUB} BLUB Percent: {$BLUBpercent}";
//ERROR CHECK
if ($BLUBamount $minBidBTC)
{exit;}
////////////////////////////////////////////////////////////////////
//END END END BLUB Depth Math
////////////////////////////////////////////////////////////////////
}
if ( $currency == "U"){
////////////////////////////////////////////////////////////////////
//ULBU Depth Math
////////////////////////////////////////////////////////////////////
//UBLU is ask, ask, bid.
$minimumBidLTC $minBidLTC;
$minimumBidBTC $minBidBTC;
$USD=$maxUSD;
//print "USD: {$USD} \n";
//print "Leg 1 \n";
//trade 1, Buy L with U, L input
foreach ($LTCtoUSD['asks'] as $value){
//print_r($value);
//minbid ltc already set
$LTCtoUSDaskRate=$value[0];               // set rate
//After this transaction and commision you must have at least 1LTC left
//If we buy .1 LTC we can't sell the .0998LTC in LEG 2
if ($value[1] >= $minimumBidLTC/.998 && $value[1]*$value[0] < $USD ){  
$USD=$value[1]*$value[0];                 // set U to book value
//print "USD: {$USD} \n";
break;    
}
if ( $value[1] >= $minimumBidLTC/.998 && $value[1]*$value[0] >= $USD){
//$USD = $USD;                            // use current U
break;
}
}
$LTC =($USD/$LTCtoUSDaskRate)*.998;                   // set L to move on
//print "LTC: {$LTC} \n";
//trade 2, Sell L for B, L input
//print "Leg 2 \n";
//At current rates we don't worry about minimum USD bids
//Value0 is rate(inB) value 1 is amount (inL) 0*1 is total B
foreach ($LTCtoBTC['bids'] as $value){
//print_r($value);
$LTCtoBTCbidRate $value[0];             // set rate
        
if ( $value[1] >= $minimumBidLTC && $value[1] < $LTC && $value[0]*$value[1]*.998 >= $minimumBidBTC ){
            
$USD = ($value[1]*$LTCtoUSDaskRate)/.998;   // set new U up
//print "USD: {$USD} \n";
            
$LTC $USD/$LTCtoUSDaskRate*.998;        // set new L down
//print "LTC: {$LTC} \n";
break;
}
if ($value[1]/.998 >= $minimumBidLTC && $value[1] >= $LTC && $value[0]*$value[1]*.998 >= $minimumBidBTC ){
//$USD = $USD;                            // use current U
//$LTC = $LTC;                            // use current L
            
break;
}       
}
$BTC =($LTC*$LTCtoBTCbidRate)*.998;                   // set B to move on
 
//print "BTC: {$BTC} \n";
//trade 3, Sell B for U’, B input
//print "Leg 3 \n";
foreach ($BTCtoUSD['bids'] as $value){
//print_r($value);
$BTCtoUSDbidRate $value[0];               // set rate 
        
if ( $value[1] >= $minimumBidBTC && $value[1] < $BTC ){
//$LTCX = $value[1]/*Total B*//$LTCtoBTCbidRate/*Div .002 ish for L*//.998/*Add commision*/
//$LTCX=$value[1]/($LTCtoUSDaskRate*.998);    // set new L up
$LTCX $value[1]/$LTCtoBTCbidRate/.998;
//print "LTCX: {$LTCX} \n";
$USD=($LTCX*$LTCtoUSDaskRate)/.998;         // set new U up
//print "USD: {$USD} \n";
$LTC=($USD/$LTCtoUSDaskRate)*.998;          // set new L down
//print "LTC: {$LTC} \n";
$BTC=($LTC*$LTCtoBTCbidRate)*.998;          // set new B down
//print "BTC: {$BTC} \n";
            
break;
        }
        if ( 
$value[1] >= $minimumBidBTC && $value[1] >= $BTC){
//$USD = $USD;                              // use current U
//$LTC = $LTC;                              // use current L
//$BTC = $BTC;                              // use current B
            
break;
        }
}
$USDX =($BTC*$BTCtoUSDbidRate)*.998;                  // final U
//print "USDX: {$USDX} \n";
$ULBUamount = array($USD,$LTC,$BTC);
//print "ULBUamount: {$ULBUamount} \n";
$ULBUrate = array($LTCtoUSDaskRate,$LTCtoBTCbidRate,$BTCtoUSDbidRate);
//print_r($ULBUrate);
$ULBU $USDX-$USD;
//print "ULBU: {$ULBU} \n";
if ( $ULBU $threshold)
{$executeTrade TRUE;}
//ERROR CHECK
if ($ULBUamount $minBidUSD)
{exit;}
////////////////////////////////////////////////////////////////////
//END ULBU Depth Math
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
//UBLU Depth Math
////////////////////////////////////////////////////////////////////
/// initial trade amount = $USD
///UBLU///
$minimumBidBTC $minBidBTC;
$USD=$maxUSD;
//print "USD: {$USD} \n";
//(define mins)
//trade 1, Buy B with U, B input 
foreach ($BTCtoUSD['asks'] as $value){
//print_r($value);
        
$BTCtoUSDaskRate=$value[0];               // set rate
        
if ( $value[1] >= $minimumBidBTC && $value[1]*$value[0] < $USD ){  
            
$USD=$value[1]*$value[0];                 // set U to book value
//print "USD: {$USD} \n";
            
break;    
        }
        if ( 
$value[1] >= $minimumBidBTC && $value[1]*$value[0] >= $USD){
            
//$USD = $USD;                            // use current U
            
break;
}
}
$BTC =($USD/$BTCtoUSDaskRate)*.998;                   // set B to move on
//print "BTC: {$BTC} \n";
//trade 2, Buy L with B, L input
foreach ($LTCtoBTC['asks'] as $value){
//print_r($value);
$LTCtoBTCaskRate $value[0];             // set rate
        
if ( $value[1]/.998 >= $minimumBidLTC && $value[1]*$value[0] < $BTC ){
            
$USD=($value[1]*$value[0]*$BTCtoUSDaskRate)/.998;     // set new U up
//print "USD: {$USD} \n";
            
$BTC=($USD/$BTCtoUSDaskRate)*.998;        // set new B down
//print "BTC: {$BTC} \n";
break;
    }
if ($value[1]/.998 >= $minimumBidLTC && $value[1] >= $BTC){
//$USD = $USD;                            // use current U
//$BTC = $BTC;                            // use current B
break;
}       
}
$LTC =($BTC/$LTCtoBTCaskRate)*.998;                   // set L to move on
 
//print "LTC: {$LTC} \n";
//trade 3, Sell L for U’, L input
foreach ($LTCtoUSD['bids'] as $value){
$LTCtoUSDbidRate $value[0];
        if ( 
$value[1] >= $minimumBidLTC && $value[1] < $LTC ){
$BTCX=($value[1]*$LTCtoBTCaskRate)/.998;    // set new B up
//print "BTCX: {$BTCX} \n";
$USD=($BTCX*$BTCtoUSDaskRate)/.998;         // set new U up
//print "USD: {$USD} \n";
$BTC=($USD/$BTCtoUSDaskRate)*.998;          // set new B down
//print "BTC: {$BTC} \n";
$LTC=($BTC/$LTCtoBTCaskRate)*.998;          // set new L down
//print "LTC: {$LTC} \n";
break;
        }
        if ( 
$value[1] >= $minimumBidLTC && $value[1] >= $LTC){
//$USD = $USD;                              // use current U
//$BTC = $BTC;                              // use current B
//$LTC = $LTC;                              // use current L
break;
        }
}
$USDX =($LTC*$LTCtoUSDbidRate)*.998;                  // final U
//print "USDX: {$USDX} \n";
$UBLUamount = array($USD,$BTC,$LTC);
//print "UBLUamount: {$UBLUamount} \n";
$UBLUrate = array($BTCtoUSDaskRate,$LTCtoBTCaskRate,$LTCtoUSDbidRate);
//print_r($UBLUrate);
$UBLU $USDX-$USD;
//print "UBLU: {$UBLU} \n";
if ($UBLU $threshold)
{$executeTrade TRUE;}
//ERROR CHECK
if ($UBLUamount $minBidUSD)
{exit;}
////////////////////////////////////////////////////////////////////
//END UBLU Depth Math
////////////////////////////////////////////////////////////////////
}


////////////////////////////////////////////////////////////////////
//Modular Trade Arrays
////////////////////////////////////////////////////////////////////
if (@$executeTrade){
//FIND THE HIGHEST PROFIT OPPORTUNITY
if ( $currency == "B"){
$path max(@$BULB, @$BLUB);
}

if ( $currency == "U"){
$path max(@$UBLU, @$ULBU);
}
if ( $path == @$BULB )
{
//define bulb trade arrays
$tradeName "BULB";
$type = array("sell","buy","sell");
$symbol = array("btc_usd","ltc_usd","ltc_btc");
$amount $BULBamount;
$rate $BULBrate
$round = array(8,8,8);
$funds = array("btc","usd","ltc");
}
if ( $path == @$BLUB )
{
//define BLUB trade arrays
$tradeName "BLUB";
$type = array("buy","sell","buy");
$symbol = array("ltc_btc","ltc_usd","btc_usd");
$amount $BLUBamount
$rate $BLUBrate
$round = array(8,8,8);
$funds = array("btc","ltc","usd");
}
if ( $path == @$ULBU )
{
$tradeName "ULBU";
$type = array("buy","sell","sell");
$symbol = array("ltc_usd","ltc_btc","btc_usd");
$amount $ULBUamount;
$rate $ULBUrate
$round = array(8,8,8);
$funds = array("usd","ltc","btc");
}
if ( $path == @$UBLU )
{
$tradeName "UBLU";
$type = array("buy","buy","sell");
$symbol = array("btc_usd","ltc_btc","ltc_usd");
$amount $UBLUamount
$rate $UBLUrate
$round = array(8,8,8);
$funds = array("usd","btc","ltc");
}





////////////////////////////////////////////////////////////////////
//Modular Trade Code
////////////////////////////////////////////////////////////////////
//How to speed up trading?
//Use microtrades, no orders, no error testing, nothing.
if (@$fastTrade){
//Execute trade one
$amount[0] = round($amount[0],8);
$trade json_decode(btce_query("Trade", array("pair" => $symbol[0], "type" => $type[0], "amount" => $amount[0], "rate" => $rate[0])), TRUE);
$amount[1] = round($amount[1],8);
//execute trade 2
$trade json_decode(btce_query("Trade", array("pair" => $symbol[1], "type" => $type[1], "amount" => $amount[1], "rate" => $rate[1])), TRUE);
$amount[2] = round($amount[2],8);
if ($amount[2] > 0){
//execute trade 3
$trade json_decode(btce_query("Trade", array("pair" => $symbol[2], "type" => $type[2], "amount" => $amount[2], "rate" => $rate[2])), TRUE);
}
} else {
//Set the trade time for order cancellations
$tradeTime time();
//Start executing trades
//Execute trade one
$amount[0] = round($amount[0],8);
$trade json_decode(btce_query("Trade", array("pair" => $symbol[0], "type" => $type[0], "amount" => $amount[0], "rate" => $rate[0])), TRUE);
if (@$DEBUGprint_r ($trade);
if (@$DEBUG) echo "pair" $symbol[0] . "type" $type[0] . "amount" $amount[0] . "rate" $rate[0] . "\n";
//If we traded, and we recieved an order, log it to Orders
if ( $trade['success'] == && $trade['return']['order_id'] > ){
$cancel json_decode(btce_query("CancelOrder", array("order_id" => $trade['return']['order_id'])), TRUE);
$trade json_decode(btce_query("getInfo"), TRUE);
}
//If the trade failed, get the balance for trade 2
elseif( $trade['success'] !== ){
$trade json_decode(btce_query('getInfo'), TRUE);
}
//Set the available funds for trade 2 (different for buy and sell orders)
if ( $type[1] == "buy" ){
$tmp = (@$trade['return']['funds'][$funds[1]]/$rate[1]);
//print_r($trade);
}
elseif ( $type[1] == "sell" ){
$tmp = (@$trade['return']['funds'][$funds[1]]);
//print_r($trade);
}
//Trade 2 can cause exchange loops if it trades the balance, prevent this
if ( $tmp $amount[1] ){
$amount[1] = $tmp;
}
$amount[1] = round($amount[1],8);
//If we have funds to make trade 2 execute the trade otherwise move to trade 3
//on second thought, just execute it anyways....
//if ($amount[1] > 0){
//execute trade 2
$trade json_decode(btce_query("Trade", array("pair" => $symbol[1], "type" => $type[1], "amount" => $amount[1], "rate" => $rate[1])), TRUE);
if (@$DEBUGprint_r ($trade);
if (@$DEBUG) echo "pair" $symbol[1] . "type" $type[1] . "amount" $amount[1] . "rate" $rate[1] . "\n";
//If we traded, and we recieved an order, log it to Orders
if ( $trade['success'] == && $trade['return']['order_id'] > ){
$cancel json_decode(btce_query("CancelOrder", array("order_id" => $trade['return']['order_id'])), TRUE);
$trade json_decode(btce_query("getInfo"), TRUE);
}
//If the trade failed, get the balance for trade 3 
elseif( $trade['success'] !== ){
$trade json_decode(btce_query("getInfo"), TRUE); 
}
//Set the available funds for trade 3 (different for buy and sell orders)
//Trade 3 clears currency by trading the Balance of this currency out
if ( $type[2] == "buy" ){
$amount[2] = (@$trade['return']['funds'][$funds[2]]/$rate[2]);
//print_r($trade);
}
elseif ( $type[2] == "sell" ){
$amount[2] = (@$trade['return']['funds'][$funds[2]]);
//print_r($trade);
}
//Check if we have funds to trade (or just orders)
$amount[2] = round($amount[2],8);
if ($amount[2] > 0){
//execute trade 3
$trade json_decode(btce_query("Trade", array("pair" => $symbol[2], "type" => $type[2], "amount" => $amount[2], "rate" => $rate[2])), TRUE);
if (@$DEBUGprint_r ($trade);
if (@$DEBUG) echo "pair" $symbol[2] . "type" $type[2] . "amount" $amount[2] . "rate" $rate[2] . "\n";
//If we traded, and we recieved an order, log it to Orders
if ( $trade['success'] == && $trade['return']['order_id'] > ){
$o++;
$orders[$nonce] =  $trade['return']['order_id'];
$times[$nonce] = $tradeTime;
}
}
}
}
}
 
////////////////////////////////////////////////////////////////////
//END Modular Trade Code
////////////////////////////////////////////////////////////////////
 

print "\n\n DANGER miaviator IS NO LONGER COOL? \n\n";
exit;

// FUNCTIONS
    
function btce_query$method NULL$req = array() )
{

//MAIN KEY
$key ''// your API-key
$secret ''// your Secret-key

// API settings
$req['method'] = $method;
$req['nonce'] = $GLOBALS['nonce']++;

// generate the POST data string
$postData http_build_query($req'''&');

// generate the extra headers
$headers = array(
'Sign: '.hash_hmac("sha512"$postData$secret
,"Key: {$key}"
);

$ch curl_init();
curl_setopt($chCURLOPT_HEADERFALSE);
curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
curl_setopt($chCURLOPT_USERAGENT'Mozilla/4.0 (compatible; BTCE PHP client; '.php_uname('s').'; PHP/'.phpversion().')');
curl_setopt($chCURLOPT_URL'https://btc-e.com/tapi');
curl_setopt($chCURLOPT_POSTFIELDS$postData);
curl_setopt($chCURLOPT_HTTPHEADER$headers);
curl_setopt($chCURLOPT_SSL_VERIFYPEERFALSE);

return curl_exec($ch);
}

function writeInc$value NULL )
{
$fp fopen('nonce','w');
fwrite($fp$value);
fclose($fp);

return;
}


function readInc()
{
$fp fopen('nonce','r');
$value = (int)fread($fp8);
fclose($fp);

return $value;
}

function cancelOrders()
{
$return json_decode(btce_query("OrderList"), TRUE);
if($return['success'] > 0){
foreach ($return['return'] as $key => $value){
$order_id $key;
$trade json_decode(btce_query("CancelOrder", array("order_id" => $order_id)), TRUE);
print "C";
}
}
}
function send$url NULL )
{
$ch curl_init();
curl_setopt($chCURLOPT_URL$url);
curl_setopt($chCURLOPT_HEADERFALSE);
curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
$result curl_exec($ch);
curl_close($ch);

return $result;
}
function changeCurrency()
{
//DEBUG if ticker fails to download you could have issues?
//SOLVED if a GAP between buy and sell develops you could change, used buy and sell, now using last
//DEBUG change must be greater than original spread,

//incriment ticker count
$t $GLOBALS["t"];
$t++;
//pull ticker
$GLOBALS['ticker'][$t] = @json_decodesend'https://btc-e.com/api/2/btc_usd/ticker' ), TRUE );
//if we returned invalid data or the price didnt change do nothing
if ( !@$GLOBALS['ticker'][$t] || $GLOBALS['ticker'][$t]['ticker']['last'] < .00000001 || $GLOBALS['ticker'][$t]['ticker']['last'] == $GLOBALS['ticker'][$t-1]['ticker']['last'] ){ 
//unset($GLOBALS['ticker'][$t]); //throw away the data
$t--;//Decriment Ticker 
$GLOBALS["t"] = $t//copy ticker to global
return $GLOBALS['ticker']; //exit the function
}
//if we have enough data to determine direction
if ( $t $GLOBALS['interval']+){
//reset changecurrency
$changeCurrency 0;
if ($GLOBALS['currency'] == "B"){
//reset quote # counter
$q 0;
//loop through last Interval quotes
while ( $q <= $GLOBALS['interval'] ){
//if our first ticker is GT than the tickers after, price is decreasing
if ( $GLOBALS['ticker'][$t-$GLOBALS['interval']]['ticker']['last'] > $GLOBALS['ticker'][$t-$q]['ticker']['last'] ) {$changeCurrency++;}
$q++;
}
if ( $changeCurrency >= $GLOBALS['interval']-$GLOBALS['curve'] ){
//CHANGE CURRENCY B to U SELL B for U
$GLOBALS['sellPrice'] = $GLOBALS['ticker'][$t]['ticker']['sell'];
$GLOBALS['currency'] = "U";

$trade json_decode(btce_query("getInfo"), TRUE);
//Trade out 50% of B for U
$trade json_decode(btce_query("Trade", array("pair" => "btc_usd""type" => "sell""amount" => $trade['return']['funds']['btc'], "rate" => $GLOBALS['ticker'][$t]['ticker']['sell'])), TRUE);
cancelOrders();
print "\n Changed Currecy B to U: {$GLOBALS['sellPrice']} ";
}
}


if ($GLOBALS['currency'] == "U"){
// reset quote # counter
$q 0;
//loop through quotes
while ( $q <= $GLOBALS['interval'] ){
//if first ticker < following tickers price is increasing
if ( $GLOBALS['ticker'][$t-$GLOBALS['interval']]['ticker']['last'] < $GLOBALS['ticker'][$t-$q]['ticker']['last'] ) {$changeCurrency++;}
$q++;
}
if ( $changeCurrency >= $GLOBALS['interval']-$GLOBALS['curve'] ){
$GLOBALS['buyPrice'] = $GLOBALS['ticker'][$t]['ticker']['buy'];
if ( $GLOBALS['sellPrice'] < $GLOBALS['buyPrice'] ){
//You'll loose money if you sell low and buy high.
//You'll also lose money if you sit while currency declines
}
//CHANGE CURRENCY B to U
$GLOBALS['currency'] = "B";

$trade json_decode(btce_query("getInfo"), TRUE);
$trade json_decode(btce_query("Trade", array("pair" => "btc_usd""type" => "buy""amount" => $trade['return']['funds']['usd'] , "rate" => $GLOBALS['ticker'][$t]['ticker']['buy'])), TRUE);
cancelOrders();
print "\n Changed Currecy U to B: {$GLOBALS['buyPrice']}";
}
}
}
$GLOBALS["t"] = $t;
return;
}

/************************************************************************************
 *OLD CHANGE CURRENCY CODE
 * function changeCurrency()
{
//SOLVED the price can't change if the last doesn't change or our calc shouldn't change unless the last changes
//DEBUG if ticker fails to download you could have issues?
//DEBUG if a GAP between buy and sell develops you could change,
//Analyse last buy and sell x 4 not 5 
//
//Execute from non-trading and non-duplicate runs, where arbot prints a .
//incriment ticker count
$t = $GLOBALS["t"];
$t++;

//unset($GLOBALS['ticker'][$t-$GLOBALS['interval']-1]); we can proly leave this.... IDK how large it will get.
//pull ticker
$GLOBALS['ticker'][$t] = @json_decode( send( 'https://btc-e.com/api/2/btc_usd/ticker' ), TRUE );
//if we returned invalid data or the price didnt change

if ( !@$GLOBALS['ticker'][$t] || $GLOBALS['ticker'][$t]['ticker']['last'] < .00000001 || $GLOBALS['ticker'][$t]['ticker']['last'] == $GLOBALS['ticker'][$t-1]['ticker']['last'] ){ 
//unset($GLOBALS['ticker'][$t]); //throw away the data
$t--;//Decriment Ticker 
$GLOBALS["t"] = $t; //copy ticker to global
return $GLOBALS['ticker']; //exit the function
}
if ( $t > $GLOBALS['interval']+1 ){
//print "Last: {$GLOBALS['ticker'][$t]['ticker']['last']}";
//keep last interval price and volumes
//{"ticker":{"high":154.99001,"low":121.12,"avg":138.055005,"vol":4033206.07126,"vol_cur":29514.1577,"last":133,"buy":133.4,"sell":132.2,"server_time":1366830779}}

$changeCurrency = 0;
if ($GLOBALS['currency'] == "B"){
//analyse price trend to sell out of B (sell price)
//first if buyPrice < sellPrice buy at 110 current 102 price up buy price down sell 
//if 4 of 5 are less than first
//we need to analyze 6, 1 = original, 2,3,4,5,6 = 5 comps, 4 of which must be up or down,
$q = 1;
while ( $q <= $GLOBALS['interval']+1 ){
if ( $GLOBALS['ticker'][$t-$GLOBALS['interval']]['ticker']['sell'] > $GLOBALS['ticker'][$t-$q]['ticker']['sell'] ) {$changeCurrency++;}
$q++;
//print "CC: {$changeCurrency} ";
}
if ( $changeCurrency >= $GLOBALS['interval']-$GLOBALS['curve'] ){
//Analyse buy Book
$q = 1;
while ( $q <= $GLOBALS['interval']+1 ){
if ( $GLOBALS['ticker'][$t-$GLOBALS['interval']]['ticker']['buy'] > $GLOBALS['ticker'][$t-$q]['ticker']['buy'] ) {$changeCurrency++;}
$q++;
//print "CC: {$changeCurrency} ";
}

if ( $changeCurrency >= $GLOBALS['interval']-$GLOBALS['curve'] ){
//CHANGE CURRENCY B to U
$GLOBALS['sellPrice'] = $GLOBALS['ticker'][$t]['ticker']['sell'];
$GLOBALS['currency'] = "U";

$trade = json_decode(btce_query("getInfo"), TRUE);
$trade = json_decode(btce_query("Trade", array("pair" => "btc_usd", "type" => "sell", "amount" => $trade['return']['funds']['btc']/2, "rate" => $GLOBALS['ticker'][$t]['ticker']['sell']-.01)), TRUE);
cancelOrders();
print "\n Changed Currecy B to U: {$GLOBALS['sellPrice']} ";
//place order to trade out currency? .1B at a time? how to repeat?
//Trade out 50% of B for U

}
}
}

$changeCurrency = 0;
if ($GLOBALS['currency'] == "U"){
//analyse price trend to sell out of B (sell price)
//first if buyPrice < sellPrice buy at 110 current 102 price up buy price down sell 
//if x-1 of x buys are less than first
$q = 1;
while ( $q <= $GLOBALS['interval']+1 ){
if ( $GLOBALS['ticker'][$t-$GLOBALS['interval']]['ticker']['buy'] < $GLOBALS['ticker'][$t-$q]['ticker']['buy'] ) {$changeCurrency++;}
$q++;
//print "CC: {$changeCurrency} ";
}

//if x-1 of x sells are less than first
//SOLVED make this a nested if,
if ( $changeCurrency >= $GLOBALS['interval']-$GLOBALS['curve'] ){
$q = 1;
while ( $q <= $GLOBALS['interval']+1 ){
if ( $GLOBALS['ticker'][$t-$GLOBALS['interval']]['ticker']['sell'] < $GLOBALS['ticker'][$t-$q]['ticker']['sell'] ) {$changeCurrency++;}
$q++;
//print "CC: {$changeCurrency} ";
}
if ( $changeCurrency >= $GLOBALS['interval']-$GLOBALS['curve'] ){
$GLOBALS['buyPrice'] = $GLOBALS['ticker'][$t]['ticker']['buy'];
if ( $GLOBALS['sellPrice'] < $GLOBALS['buyPrice'] ){
//You'll loose money if you sell low and buy high.
//You'll also lose money if you sit while currency declines
}
//CHANGE CURRENCY B to U
$GLOBALS['currency'] = "B";

$trade = json_decode(btce_query("getInfo"), TRUE);
$trade = json_decode(btce_query("Trade", array("pair" => "btc_usd", "type" => "buy", "amount" => $trade['return']['funds']['usd']/2 , "rate" => $GLOBALS['ticker'][$t]['ticker']['buy']+.01)), TRUE);
cancelOrders();
print "\n Changed Currecy U to B: {$GLOBALS['buyPrice']}";
}
//and if volume is increasing
}
}
//if last is lt low
//if last is gt than high
//if last is lt average
//if last is gt average

//current currency = $GLOBALS['currency']
}
$GLOBALS["t"] = $t;
return;
}
****************************************************************************************************/

?>


Jump to: