success) { $db_order = getdbosql('db_orders', "market=:market AND uuid=:uuid", array( ':market'=>'bleutrade', ':uuid'=>$OrderID )); if($db_order) $db_order->delete(); } } function doBleutradeTrading($quick=false) { $balances = bleutrade_api_query('account/getbalances'); if(!$balances || !isset($balances->result) || !$balances->success) return; $savebalance = getdbosql('db_balances', "name='bleutrade'"); $savebalance->balance = 0; foreach($balances->result as $balance) { if ($balance->Currency == 'BTC') { $savebalance->balance = $balance->Available; $savebalance->save(); continue; } if (!YAAMP_ALLOW_EXCHANGE) { // store available balance in market table $coins = getdbolist('db_coins', "symbol=:symbol OR symbol2=:symbol", array(':symbol'=>$balance->Currency) ); if (empty($coins)) continue; foreach ($coins as $coin) { $market = getdbosql('db_markets', "coinid=:coinid AND name='bleutrade'", array(':coinid'=>$coin->id)); if (!$market) continue; if ($market->balance != $balance->Available) { $market->balance = $balance->Available; if (!empty($balance->CryptoAddress) && $market->deposit_address != $balance->CryptoAddress) { debuglog("bleutrade: {$coin->symbol} deposit address updated"); $market->deposit_address = $balance->CryptoAddress; } if (property_exists($balance,'IsActive')) $market->message = ($balance->IsActive == "true") ? "" : "Disabled"; $market->save(); } } } } if (!YAAMP_ALLOW_EXCHANGE) return; $flushall = rand(0, 8) == 0; if($quick) $flushall = false; $min_btc_trade = 0.00050000; // minimum allowed by the exchange $sell_ask_pct = 1.05; // sell on ask price + 5% $cancel_ask_pct = 1.20; // cancel order if our price is more than ask price + 20% sleep(1); $orders = bleutrade_api_query('market/getopenorders'); if(!$orders) return; foreach($orders->result as $order) { $e = explode('_', $order->Exchange); $symbol = $e[0]; /// "Exchange" : "LTC_BTC", $pair = $order->Exchange; $coin = getdbosql('db_coins', "symbol=:symbol", array(':symbol'=>$symbol)); if(!$coin) continue; if($coin->dontsell) continue; sleep(1); $ticker = bleutrade_api_query('public/getticker', "&market=$pair"); if(!$ticker || !$ticker->success || !isset($ticker->result[0])) continue; $ask = bitcoinvaluetoa($ticker->result[0]->Ask); $sellprice = bitcoinvaluetoa($order->Price); // flush orders not on the ask if($sellprice > $ask*$cancel_ask_pct || $flushall) { // debuglog("bleutrade: cancel order $order->Exchange $sellprice -> $ask"); sleep(1); doBleutradeCancelOrder($order->OrderId); //bleutrade_api_query('market/cancel', "&orderid={$order->OrderId}"); //$db_order = getdbosql('db_orders', "market=:market AND uuid=:uuid", array( // ':market'=>'bleutrade', ':uuid'=>$order->OrderId //)); //if($db_order) $db_order->delete(); } // save existing orders else { $db_order = getdbosql('db_orders', "market=:market AND uuid=:uuid", array( ':market'=>'bleutrade', ':uuid'=>$order->OrderId )); if($db_order) continue; // debuglog("bleutrade: adding order $coin->symbol"); $db_order = new db_orders; $db_order->market = 'bleutrade'; $db_order->coinid = $coin->id; $db_order->amount = $order->Quantity; $db_order->price = $sellprice; $db_order->ask = $ticker->result[0]->Ask; $db_order->bid = $ticker->result[0]->Bid; $db_order->uuid = $order->OrderId; $db_order->created = time(); $db_order->save(); } } // flush obsolete orders $list = getdbolist('db_orders', "market='bleutrade'"); foreach($list as $db_order) { $coin = getdbo('db_coins', $db_order->coinid); if(!$coin) continue; $found = false; foreach($orders->result as $order) if($order->OrderId == $db_order->uuid) { $found = true; break; } if(!$found) { debuglog("bleutrade deleting order $coin->name $db_order->amount"); $db_order->delete(); } } // if($flushall) // { // debuglog("bleutrade flushall got here"); // return; // } // add orders foreach($balances->result as $balance) { if($balance->Currency == 'BTC') continue; $amount = floatval($balance->Available); if(!$amount) continue; $coin = getdbosql('db_coins', "symbol=:symbol", array(':symbol'=>$balance->Currency)); if(!$coin || $coin->dontsell) continue; $market2 = getdbosql('db_markets', "coinid={$coin->id} AND (name='bittrex' OR name='poloniex')"); if($market2) continue; $market = getdbosql('db_markets', "coinid=$coin->id and name='bleutrade'"); if($market) { $market->lasttraded = time(); $market->save(); } if($amount*$coin->price < $min_btc_trade) continue; $pair = "{$balance->Currency}_BTC"; sleep(1); $data = bleutrade_api_query('public/getorderbook', "&market=$pair&type=BUY&depth=10"); if(!$data) continue; // if(!isset($data->result[0])) continue; if($coin->sellonbid) for($i = 0; $i < 5 && $amount >= 0; $i++) { if(!isset($data->result->buy[$i])) break; $nextbuy = $data->result->buy[$i]; if($amount*1.1 < $nextbuy->Quantity) break; $sellprice = bitcoinvaluetoa($nextbuy->Rate); $sellamount = min($amount, $nextbuy->Quantity); if($sellamount*$sellprice < $min_btc_trade) continue; $sellprice = bitcoinvaluetoa($nextbuy->Rate); // debuglog("bleutrade selling market $pair, $nextbuy->Quantity, $sellprice"); sleep(1); $res = bleutrade_api_query('market/selllimit', "&market=$pair&quantity=$nextbuy->Quantity&rate=$sellprice"); if(!$res->success) { debuglog("bleutrade err: ".json_encode($res)); break; } $amount -= $sellamount; } if($amount <= 0) continue; sleep(1); $ticker = bleutrade_api_query('public/getticker', "&market=$pair"); if(!$ticker || !$ticker->success || !isset($ticker->result[0])) continue; if($coin->sellonbid) $sellprice = bitcoinvaluetoa($ticker->result[0]->Bid); else $sellprice = bitcoinvaluetoa($ticker->result[0]->Ask * $sell_ask_pct); if($amount*$sellprice < $min_btc_trade) continue; debuglog("bleutrade: selling $pair, $amount at $sellprice"); sleep(1); $res = bleutrade_api_query('market/selllimit', "&market=$pair&quantity=$amount&rate=$sellprice"); if(!$res || !$res->success || !isset($res->result)) { debuglog("bleutrade err: ".json_encode($res)); continue; } $db_order = new db_orders; $db_order->market = 'bleutrade'; $db_order->coinid = $coin->id; $db_order->amount = $amount; $db_order->price = $sellprice; $db_order->ask = $ticker->result[0]->Ask; $db_order->bid = $ticker->result[0]->Bid; $db_order->uuid = $res->result->orderid; $db_order->created = time(); $db_order->save(); } if(floatval(EXCH_AUTO_WITHDRAW) > 0 && $savebalance->balance >= (EXCH_AUTO_WITHDRAW + 0.0002)) { $btcaddr = YAAMP_BTCADDRESS; $amount = $savebalance->balance - 0.0002; debuglog("bleutrade: withdraw $amount BTC to $btcaddr"); sleep(1); $res = bleutrade_api_query('account/withdraw', "¤cy=BTC&quantity=$amount&address=$btcaddr"); debuglog("bleutrade: withdraw ".json_encode($res)); if($res && $res->success) { $withdraw = new db_withdraws; $withdraw->market = 'bleutrade'; $withdraw->address = $btcaddr; $withdraw->amount = $amount; $withdraw->time = time(); $withdraw->save(); $savebalance->balance = 0; $savebalance->save(); } } // debuglog('-------------- dobleutradeTrading() done'); }