Pages:
Author

Topic: HAL 10K - Bitcoin PHP trading bot - page 6. (Read 24347 times)

full member
Activity: 194
Merit: 100
January 02, 2014, 09:05:04 AM
#14
snogcel,
sorry, another bug fix to solve this "ethernal limbo" bug, please fork files below and try again:
https://github.com/intrd/bitcoin/blob/master/hal10k/start.php
https://github.com/intrd/bitcoin/blob/master/hal10k/functions.php

thanks n keep testing!


Works great! Will test out a bit more this evening, but really like what I'm seeing - awesome work on this project!!
member
Activity: 75
Merit: 10
HAL10K developer
January 02, 2014, 01:57:56 AM
#13
snogcel,
sorry, another bug fix to solve this "ethernal limbo" bug, please fork files below and try again:
https://github.com/intrd/bitcoin/blob/master/hal10k/start.php
https://github.com/intrd/bitcoin/blob/master/hal10k/functions.php

thanks n keep testing!
full member
Activity: 194
Merit: 100
January 02, 2014, 01:39:57 AM
#12
$ 748.9999 ask @ 767 stoploss: -223 (last: bid @ 767 [loss])
According to your defined parameters, you started the bot with a bid made at 767, and using a very high value for the stop-loss ($up_diff_inv and $down_diff_inv), then the bot will only sell at stoploss hit (-223) never!
If you want to see some action, you have two options:
- Set the first bid (767) to a nearest value of current: 748;
- Set a low value(maybe 5) for stoploss($up_diff_inv and $down_diff_inv);

are u trying paper trading, right?
please do not go to the live trading before mastering the paper trading.

Doh! Didn't realize that this new release had a stoploss set of 999 by default! =)

I've just started playing around with Paper Trading - first checking out the EMA algo. Absolutely steering clear of real trading until I get a feel for it.

Regarding further testing, I adjusted the following variables:

Code:
	/* Custom trading algoritm parameters */
$percentual=0.45; //Minimum percentage of profit on the purchase (Use the current fee applied by MtGox);
$up_diff=0; //(sell) profit points (in USD) above the purchase price;
$up_diff_inv=15; //(sell) stop loss (in USD) below the purchase price;
$down_diff=0; //(buy) profit points (in USD) below the selling price;
$down_diff_inv=15; //(buy) stop loss (in USD) above the selling price;
$secure_ticker=300.99500; //Security value that prevents the bot to make sales below a certain value;
$emacross=true; //Turn on EMA crossover method (if emacross=true, Simple Market Direction Method automatically is turned off);
$emaShort=10; //EMA short period(in seconds) for EMA crossover method;
$emaLong=22; //EMA long period(in seconds) for EMA crossover method;
$emaDiff=0; //EMA difference between short and long crossover;
$last_two_orders=false; //Base next move on the last two transactions value;
$interval=10; //Bot loop interval (in seconds);
$timeout=80; //Timeout in seconds for completion of the bid/ask;
$sudden_mode=0; //When active, the bot makes a purchase at the sale price, or a sale at the purchase price. Used only when there is a need for immediate order processing. It will be disabled after the order is processed;
$reverse_prices=0; //Same as Sudden, but definite. It will never turned off;
$manualstoploss=0; //When active, in every action stop-loss requests remote confirmation of the bot operator;
$dire=6; //Amount of past intervals used in the identification of Simple Market Direction Method;
$dire_limbo=13; //Minimum variation (in USD) to define whether the direction is out of limbo or not (limbo: when the bot still trying to set the direction of the market);
$vol_limbo=450.78526468; //Minimum volume (in USD) to consider an abnormal change at the volume of an interval to another;

/* Backtesting and Paper trading */
$fake=true; //Turns on/off simulation (backtesting);
$paper=false; //Paper trading is simulation with Real Live Tickers but w/ fake money balance. (If Paper trading is true, $fake needs to be defined to "true");
$fake_btc_balance="0.03161308"; //Initial amount of BTC for the simulation;
$fake_btc_usd_buyedprice="700"; //Initial purchase price of BTC (ATENTION: you need to set this value for Backtesting and Paper trading);
$fake_datetime_of_firstbid="2013-24-12 00:00:00"; //Initial datetime (same as first line of $fakegox_tickers file below)
$fakegox_tickers=$datadir."fakegox_tickers(24.12-26.12).txt"; //Access http://bitcoincharts.com/charts/mtgoxUSD, set the period (must be a period that supports interval 1min), click Raw Data, copy/paste the contents of the table in a TXT file and replaces tabulations by "," comma);

Seeing the following output:

Code:
*** Checking for open orders...  no orders.
$ 707.8188 ask @ 700 stoploss: 685 (last: bid @ 700 [loss])
*** Checking for open orders...  no orders.
$ 707.79498 ask @ 700 stoploss: 685 (last: bid @ 700 [loss])
*** Checking for open orders...  no orders.
$ 704 ask @ 700 stoploss: 685 (last: bid @ 700 [loss])
*** Checking for open orders...  no orders.
$ 707.78387 ask @ 700 stoploss: 685 (last: bid @ 700 [loss])
*** Checking for open orders...  no orders.
$ 707.9 ask @ 700 stoploss: 685 (last: bid @ 700 [loss])
*** Checking for open orders...  no orders.
$ 689.0125 ask @ 700 stoploss: 685 (last: bid @ 700 [loss])
*** Checking for open orders...  no orders.
$ 683.01 ask @ 700 stoploss: 685 (last: bid @ 700 [loss])
*** Checking for open orders...  no orders.
$ 680 ask @ 700 stoploss: 685 (last: bid @ 700 [loss])
*** Checking for open orders...  no orders.
$ 679 ask @ 700 stoploss: 685 (last: bid @ 700 [loss])
*** Checking for open orders...  no orders.
$ 685 ask @ 700 stoploss: 685 (last: bid @ 700 [loss])
*** Checking for open orders...  no orders.
$ 682 ask @ 700 stoploss: 685 (last: bid @ 700 [loss])

Very well could be that my brain is fried and it's time for sleep - it doesn't seem to be hitting the stoploss? Will play around with this a bit more tomorrow, let me know what you think =)
member
Activity: 75
Merit: 10
HAL10K developer
January 02, 2014, 01:26:32 AM
#11
$ 748.9999 ask @ 767 stoploss: -223 (last: bid @ 767 [loss])
According to your defined parameters, you started the bot with a bid made at 767, and using a very high value for the stop-loss ($up_diff_inv and $down_diff_inv), then the bot will only sell at stoploss hit (-223) never!
If you want to see some action, you have two options:
- Set the first bid (767) to a nearest value of current: 748;
- Set a low value(maybe 5) for stoploss($up_diff_inv and $down_diff_inv);
full member
Activity: 194
Merit: 100
January 02, 2014, 01:12:25 AM
#10
Sorry snogcel! please fork again this file: https://github.com/intrd/bitcoin/blob/master/hal10k/functions.php
i've fixed a little bug Wink

Thanks man that seemed to do the trick - one other thing I noticed is that it doesn't seem to be making any moves?

Code:
*** Checking for open orders...  no orders.
$ 748.9999 ask @ 767 stoploss: -223 (last: bid @ 767 [loss])
*** Checking for open orders...  no orders.
$ 748.9999 ask @ 767 stoploss: -223 (last: bid @ 767 [loss])
*** Checking for open orders...  no orders.
$ 744.01001 ask @ 767 stoploss: -223 (last: bid @ 767 [loss])
*** Checking for open orders...  no orders.
$ 744.01001 ask @ 767 stoploss: -223 (last: bid @ 767 [loss])
*** Checking for open orders...  no orders.
$ 748.4 ask @ 767 stoploss: -223 (last: bid @ 767 [loss])
*** Checking for open orders...  no orders.
$ 748.99 ask @ 767 stoploss: -223 (last: bid @ 767 [loss])
*** Checking for open orders...  no orders.
$ 745 ask @ 767 stoploss: -223 (last: bid @ 767 [loss])
*** Checking for open orders...  no orders.
$ 744.50001 ask @ 767 stoploss: -223 (last: bid @ 767 [loss])
*** Checking for open orders...  no orders.
$ 744 ask @ 767 stoploss: -223 (last: bid @ 767 [loss])
*** Checking for open orders...  no orders.
$ 744 ask @ 767 stoploss: -223 (last: bid @ 767 [loss])
*** Checking for open orders...  no orders.
$ 743.38 ask @ 767 stoploss: -223 (last: bid @ 767 [loss])^CTermin

Using this sample test data:

Code:
        $fake_btc_balance="0.03161308"; //Initial amount of BTC for the simulation;
$fake_btc_usd_buyedprice="767"; //Initial purchase price of BTC (ATENTION: you need to set this value for Backtesting and Paper trading);
$fake_datetime_of_firstbid="2013-24-12 00:00:00"; //Initial datetime (same as first line of $fakegox_tickers file below)
$fakegox_tickers=$datadir."fakegox_tickers(24.12-26.12).txt"; //Access http://bitcoincharts.com/charts/mtgoxUSD, set the period (must be a period that supports interval 1min), click Raw Data, copy/paste the contents of the table in a TXT file and replaces tabulations by "," comma);

Sorry to be such a pain in the a**!! =) Any ideas on what could be going on there?
member
Activity: 75
Merit: 10
HAL10K developer
January 02, 2014, 01:04:05 AM
#9
Sorry snogcel! please fork again this file: https://github.com/intrd/bitcoin/blob/master/hal10k/functions.php
i've fixed a little bug Wink
full member
Activity: 194
Merit: 100
January 02, 2014, 12:57:55 AM
#8
To backtesting use $fake=true and $paper=false, to paper trading use $fake=true and $paper=true; (I will improve this vars on the next release)

Nice!! I've been checking this out - ended up moving from WAMP to XAMMP to fix an issue with curl, still seeing a problem though and I'm a bit stumped:

$fake = true;
$paper = false;

this creates the following error:

Notice: Undefined index: datetime in F:\xampp\htdocs\hal10k\start.php on line 56

commenting that line out of start.php seems to fix it, but then the simulation mode doesn't appear to actually do anything. Any ideas?

Can't wait to play around with this! Thanks for putting the work in on this, very cool project.


I think I've got it set properly?

Code:
/* Backtesting and Paper trading */
$fake=true; //Turns on/off simulation (backtesting);
$paper=false; //Paper trading is simulation with Real Live Tickers but w/ fake money balance. (If Paper trading is true, $fake needs to be defined to "true");
$fake_btc_balance="0.03161308"; //Initial amount of BTC for the simulation;
$fake_btc_usd_buyedprice="819.00000"; //Initial purchase price of BTC (ATENTION: you need to set this value for Backtesting and Paper trading);
$fake_datetime_of_firstbid="2014-01-01 00:00:00"; //Initial datetime (same as first line of $fakegox_tickers file below)
$fakegox_tickers=$datadir."fakegox_tickers(24.12-26.12).txt"; //Access http://bitcoincharts.com/charts/mtgoxUSD, set the period (must be a period that supports interval 1min), click Raw Data, copy/paste the contents of the table in a TXT file and replaces tabulations by "," comma);

I've tried a couple of the backtesting txt files provided - for some reason it's no dice?
member
Activity: 75
Merit: 10
HAL10K developer
January 02, 2014, 12:55:18 AM
#7
To backtesting use $fake=true and $paper=false, to paper trading use $fake=true and $paper=true; (I will improve this vars on the next release)

Nice!! I've been checking this out - ended up moving from WAMP to XAMMP to fix an issue with curl, still seeing a problem though and I'm a bit stumped:

$fake = true;
$paper = false;

this creates the following error:

Notice: Undefined index: datetime in F:\xampp\htdocs\hal10k\start.php on line 56

commenting that line out of start.php seems to fix it, but then the simulation mode doesn't appear to actually do anything. Any ideas?

Can't wait to play around with this! Thanks for putting the work in on this, very cool project.

full member
Activity: 194
Merit: 100
January 02, 2014, 12:48:45 AM
#6
Nice!! I've been checking this out - ended up moving from WAMP to XAMMP to fix an issue with curl, still seeing a problem though and I'm a bit stumped:

$fake = true;
$paper = false;

this creates the following error:

Notice: Undefined index: datetime in F:\xampp\htdocs\hal10k\start.php on line 56

commenting that line out of start.php seems to fix it, but then the simulation mode doesn't appear to actually do anything. Any ideas?

Can't wait to play around with this! Thanks for putting the work in on this, very cool project.
member
Activity: 75
Merit: 10
HAL10K developer
January 01, 2014, 11:41:24 PM
#5

Just released the v2.0 beta 1, improved the bot decisions using the technique of EMA short/long crossover, now also possible beyond Backtesting, making simulation using Live ticker(Paper trading), among other improvements, changelog below:
  • New trading technique implemented: EMA short/long crossover
  • Paper trading: Differs to Backtesting, its a simulation with Live Tickers but w/ fake money balance.
  • Improvements in Clear Log file
  • Improvements in en_US translation
  • Improvements in Twitter oauth conf

New configurable parameters:
  • emacross - Turn on EMA crossover method;
  • emaShort - EMA short period(in seconds) for EMA crossover method;
  • emaLong - EMA long period(in seconds) for EMA crossover method;
  • emaDiff - EMA difference between short and long crossover;

Please test! i realy need feedbacks..  Wink
full member
Activity: 194
Merit: 100
January 01, 2014, 01:10:14 PM
#4
Really nice work on this man! Love the way that historical data can be tested, this will be HUGE in determining optimal profitability. Really excited about this project -

A few weeks back I tried playing around with Moving Averages on btc-e by hacking around with a jQuery API I found, was never able to get the system working how I'd like (it's painful waiting for real test data to see what parts of the algorithm need tweaking!) - but - if you'd like to check the code and integrate any of it in I'd be happy to share =)
member
Activity: 75
Merit: 10
HAL10K developer
December 30, 2013, 04:25:35 PM
#3
That's cool that you enjoyed! The fact of using Twitter to notify operators and allow the decision to stop-loss with remote commands was really very good.

Please test my bot, your help will be very welcome!

Remembering that it works perfectly on Linux platforms, simply edit the file. BAT (used just to keep a non stop looping) and convert to a simple Shell Script+Crontab. (plan to do this soon, if no one do before..)

Woow this looks really awesome  (as is the name btw)! I love how you use twitter as an interface, that's clever.

Can we expect cross platform support as well (I don't have any windows machines for example) and would prefer to run 24/7 like this in the cloud or on something like a raspberry PI. I really would want to check this out though.

sr. member
Activity: 287
Merit: 250
December 30, 2013, 08:01:19 AM
#2
Woow this looks really awesome  (as is the name btw)! I love how you use twitter as an interface, that's clever.

Can we expect cross platform support as well (I don't have any windows machines for example) and would prefer to run 24/7 like this in the cloud or on something like a raspberry PI. I really would want to check this out though.
member
Activity: 75
Merit: 10
HAL10K developer
December 30, 2013, 05:15:40 AM
#1
HAL 10K - Bitcoin PHP trading bot

* Official post -> HAL 10K @ PHP Bitcoin trading & helper bot
* GitHUB stable Source code
* Bitcointalk announcemnt thread

After losing some money on Bitcoin exchanges, I decided to develop my own Trading bot/helper. This bot acts with pre-defined parameters based on statistics/strategies and not with the emotion of the moment, so it's much easier to perform trading operations.

HAL10K is a Bitcoin trading/helper bot written in PHP (open source). It was developed to be used on the API MtGox, but can be easily adapted to other exchanges. Their decisions are based on customizable parameters and trading techniques for market analysis. It also works in semi-automatic mode, in which each loss(stop-loss) asks via Twitter for remote confirmation of a bot operator. Besides the "Live Trading" so it also runs simulations "Backtesting/Paper trading" using "Fake Balance" and historical raw data from Bitcoincharts.com. All bot actions(buying/selling) and alerts(high volume detected) are notified via Twitter. Log results is accompanied by HTTP Control panel where the bot displays its own performance chart panel.

HAL10K was developed "from scratch", without taking basis of existing algorithms/trading techniques. This project is a learning exercise on Trading/Economics for me, when started this project my experience was limited in programming and Bitcoin. Yes, I'm already getting real profits with this trading bot, and the idea of ​​Open Source assumed that sharing experiences, together we can greatly improve the algorithm and achieve even greater profits.

Quote
Please, do not go to the Live trading before mastering the paper trading.
The author of this project and its contributors are not responsible for any losses.

WEB Control panel & console
Daemon



Live statistics, "Sudden" and "Death mode" remote control.




####Backtesting sample

Code:
Period: 21/12/2013 até 27/12/2013      
Starting w/ 1.03161308 BTC @ 700    
$ask [btc0/usd:699.43] @ $678 (lucro) #transaction  
$bid [btc1.07/usd:0] @ $649.43505 (lucro) #transaction  
$ask [btc0/usd:721.03] @ $672.513 (lucro) #transaction  
$bid [btc1.08/usd:0] @ $665.41 (lucro) #transaction    
$ask [btc0/usd:775.37] @ $718.795 (lucro) #transaction  
$bid [btc1.14/usd:0] @ $679.995 (lucro) #transaction    
$ask [btc0/usd:795.73] @ $701 (lucro) #transaction  
$bid [btc1.14/usd:0] @ $701 (nulo) #transaction    
Ending w/ 1.14 BTC @ 701

####Trading bot EMA Short/Long Crossover based


Perfect for high frequency trading, better than simple trading method

Twitter notifications sample


Bot notifying your operator a large volume that just happened;
Bot requesting help on Stop-Loss decision;
Bot informing a purchase(loss) made ​​starting from a Sudden Mode remote command, Buying 1.03BTC when the value of btc/usd was at 830USD.

Main features & configs
* Exchanges
  * MTGox API (MTGox app data. If you do not have access to the API gox, visit: https://www.mtgox.com/security and create your key (with read/write));
* Text result logs
* Audible beeps when running transactions (differentiated for profits/losses)
* Trading parameters
   - up_diff - (sell) points profit (in USD) above the purchase price;  
   - up_diff_inv - (sell) stop loss (in USD) below the purchase price;
   - down_diff - (buy) points profit (in USD) below the selling price;    
   - down_diff_inv - (buy) stop loss (in USD) above the selling price;    
   - percentual - Minimum percentage of profit on the purchase (Use the current fee applied by MtGox);    
   - secure_ticker - Security value that prevents the bot to make sales below a certain value;  
   - emacross - Turn on EMA crossover method (if emacross=true, Simple Market Direction Method automatically is turned off);
   - emaShort - EMA short period(in seconds) for EMA crossover method;
   - emaLong - EMA long period(in seconds) for EMA crossover method;
   - emaDiff - EMA difference between short and long crossover;
   - last_two_orders - Base next move on the last two transactions value;
   - interval - Bot loop interval (in seconds);  
   - timeout - Timeout in seconds for completion of the bid/ask;  
   - sudden_mode - When active, the bot makes a purchase at the sale price, or a sale at the purchase price. Used only when there is a need for immediate order processing. It will be disabled after the order is processed; (ATTENTION)      
   - reverse_prices - Same as Sudden, but definite. It will never turned off; (ATTENTION)    
   - manualstoploss - When active, in every action stop-loss requests remote confirmation of the bot operator; (ATTENTION)    
   - dire - Amount of past intervals used in the identification of market direction;  
   - dire_limbo - Minimum variation (in USD) to define whether the direction is out of limbo or not (limbo: when the bot still trying to set the direction of the market);    
   - vol_limbo - Minimum volume (in USD) to consider an abnormal change at the volume of an interval to another;    
Backtesting
   - fake - Turns on/off simulation (backtesting); (ATTENTION)
   - paper - Paper trading is simulation with Real Live Tickers but w/ fake money balance. (If Paper trading is true, $fake needs to be defined to "true")
   - fake_btc_balance - Initial amount of BTC for the simulation;    
   - fake_btc_usd_buyedprice - Initial purchase price of BTC fake balance;    
   - fake_datetime_of_firstbid - //Initial datetime (same as first line of fakegox_tickers file below);
   - fakegox_tickers - Access http://bitcoincharts.com/charts/mtgoxUSD, set the period (must be a period that supports interval 1min), click Raw Data, copy/paste the contents of the table in a TXT file and replaces tabulations by "," comma);
* Notificações via Twitter
   - enable_tweet - Enable/disable Twitter notifications;  
   - twitter_oauth - Data to access the Twitter API, if you do not have, go to: https://dev.twitter.com/apps and create your key w/ read/write permission access;
   - twitter_users - Twitter @users to be notified;    
   - Alert bot operator on high volumes;  
* Graphic WEB interface
   - Graphic results log (period, last action, asks/bids);  
  * HTTP control panel
         - Sudden mode (Activates sudden mode immediately, password is the two digit minute of the datetime displayed in the header above the chart, eg: "01" for datetime: 2013-12-30 04:01:18. It was done this way to prevent you run sudden-mode twice accidentally on a refresh page);  
         - Death mode (Freeze the bot temporarily. The Password is "meuovo123654", can be changed in the file: makesudden.php)    

Quote
The bot needs at least one bid and ask to generate the graphic chart correctly.
MtGox need at least 0.02BTC to process a transaction.

Installing: 1click-to-run (easy)
* Download here: hal10k_1click.zip w/ apache+php pre-configured, just run the: start_hal10k.bat

Installing: manual (advanced)
**GitHUB stable Source code**: https://github.com/intrd/bitcoin/tree/master/hal10k

Must be configured in *configs.php* and started on *hal10k.bat* (remember to edit *hal10k.bat* to correct default path: *C:\webserver\www\hal10k*)  

This project was developed in the environment described below, so please try to use a similar configuration:

* XAMPP version 1.7.7 (not included in the project)
** Apache 2.2.21 (running as service to avoid strange problems in pChart lib)  
** PHP 5.3.8 (VC9 X86 32bit thread safe) + PEAR  
* Libs utilizadas (included in the project)
** pChart 2.1.3 for graphics generation;  
** tmhOAuth for Twitter notifications;  

TodoList
* Add EUR
- Fake USD/EUR balance
- Implement Vircurex, BTC-e and Bitstamp API
- Create a version of .bat Windows looping file for Linux using Shell script+crontab
- Auto fetch BitcoinCharts API data

[/b]Changelog[/b]
* v2.4 beta 1 **(not at stable public release yet)**
   * php builtin webserver instead apache
   * added pivots(support & resistance) analysis
   * added MACD analysis
   * JS Graphic chart Client Side rendering
   * Now fetching past history data before starting bot (works on backtests, live & paper)
* v2.3 beta 1 **(not at stable public release yet)**
   * Fixed critical error at Market Direction decision (always returning MA, not EMA)
* v2.2 beta 1
   * Built-in apache+php pre-configured (1-click-to-run version for Windows)
   * Some EMA improvements
   * Better graphic chart
   * Massive bug fixes
* v2.1 beta 2
   * New trading technique implemented: EMA short/long crossover
   * Paper trading: Differs to Backtesting, its a simulation with Live Tickers but w/ fake money balance.
   * Improvements in Clear Log file
   * Improvements in en_US translation
   * Improvements in Twitter oauth conf
* v1.0 beta 2
   * First public version

> HAL10K Bitcoin trading bot (CC) copyleft http://dann.com.br - @intrd (Danilo Salles) <[email protected]> HAL10K is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License 2, as published by the Free Software Foundation.

Pages:
Jump to: