test

Автор: asuslx, 2 Лет назад, написана на языке PHP, просмотрена 219 раз(а).
URL https://pastie.ru/view/362a9d76 Встраивание на сайт
Скачать заметку или Посмостреть исходник Test1
  1. class Notifier_Trade {
  2.  
  3.  
  4.     const DIR_PL = "PL";
  5.     const DIR_LP = "LP";
  6.  
  7.     private static $_lastError = "";
  8.     private static $_lastResult = "";
  9.     private static $_lastBalanceId;
  10.     private static $_lastPercent;
  11.  
  12.     /**
  13.      * @param $pair
  14.      * @param $dir (poloniex-liquio, liquio-poloniex)
  15.      * @param $customAmount
  16.      */
  17.     public static function createTrade($pair, $dir, Notifier_CalcResult $result, $balances, $percent) {
  18.  
  19.         self::$_lastResult = "";
  20.  
  21.         list($from, $to) = explode("_", $dir);
  22.         $fromAPI = Notifier_Exchange::getByNick($from);
  23.         $toAPI = Notifier_Exchange::getByNick($to);
  24.  
  25.  
  26.         $buyOrders = $fromAPI->getOrders($pair);
  27.         $buyOrders = $buyOrders['asks'];
  28.         $sellOrders = $toAPI->getOrders($pair);
  29.         $sellOrders = $sellOrders['bids'];
  30.  
  31.         $calcResult = Notifier_Calculator::calc($buyOrders, $sellOrders, $result->amountSource, $result->commission, $result->commissionFixed);
  32.  
  33.         if(!empty($calcResult->error)) {
  34.             self::$_lastError = $calcResult->error;
  35.             return false;
  36.         }
  37.  
  38.         if($calcResult->percent < $percent) {
  39.             self::$_lastError = "Requested operation percent ({$calcResult->percent}) lower $percent!";
  40.             return false;
  41.         }
  42.  
  43.  
  44.         $orderBuy = $fromAPI->buy($pair, $calcResult->lastRateBuy, $calcResult->amountBuy);
  45.         if(!$orderBuy) {
  46.             self::$_lastError = "ERROR at buy: ".$fromAPI->getLastError();
  47.             return false;
  48.         }
  49.  
  50.         self::$_lastResult .= "BOUGHT {$from} Pair: {$pair} Rate: $calcResult->lastRateBuy Amount: $calcResult->amountBuy\n";
  51.  
  52.         $orderSell = $toAPI->sell($pair, $calcResult->lastRateSell, $calcResult->amountBuy);
  53.         if(!$orderSell) {
  54.             self::$_lastError = "ERROR at sell: ".$toAPI->getLastError();
  55.             return false;
  56.         }
  57.  
  58.         self::$_lastResult .= "SOLD {$to} Pair: {$pair} Rate: $calcResult->lastRateSell Amount: $calcResult->amountBuy\n";
  59.  
  60.         F_DB::exec("INSERT INTO balancies (dt) VALUES ('%s')", date("Y-m-d H:i:s"));
  61.         $balanceId = F_DB::lastInsertId();
  62.  
  63.         self::$_lastBalanceId = $balanceId;
  64.         self::$_lastPercent = $result->percent;
  65.  
  66.         foreach ($balances[$from] as $currency => $amount) {
  67.             F_DB::exec("INSERT INTO balancies_curr (balance_id, location, `currency`, `value`) VALUES (%d, '%s','%s','%s')", $balanceId, $from, $currency, $amount);
  68.         }
  69.         foreach ($balances[$to] as $currency => $amount) {
  70.             F_DB::exec("INSERT INTO balancies_curr (balance_id, location, `currency`, `value`) VALUES (%d, '%s','%s','%s')", $balanceId, $to, $currency, $amount);
  71.         }
  72.  
  73.         return true;
  74.  
  75.         /*$poloniex = Notifier_Poloniex::instance();
  76.         $liquio = Notifier_Liqui::instance();
  77.  
  78.         $poloniexBalances = $poloniex->getBalances();
  79.         if($poloniexBalances === false) {
  80.             self::$_lastError = "Unable to get poloniex balances! Error: ".$poloniex->getLastError();
  81.             return false;
  82.         }
  83.         $liquioBalances = $liquio->getBalances();
  84.         if($liquioBalances === false) {
  85.             self::$_lastError = "Unable to get liquio balances! Error: ".$liquio->getLastError();
  86.             return false;
  87.         }
  88.  
  89.         if($dir == self::DIR_PL) {
  90.  
  91.             $buyOrders = $poloniex->getOrders($pair, ORDERS_COUNT);
  92.             if($buyOrders === false) {
  93.                 self::$_lastError = "Unable to get Poloniex balances! Error: ".$poloniex->getLastError();
  94.                 return false;
  95.             }
  96.  
  97.             $sellOrders = $liquio->getOrders($pair, ORDERS_COUNT);
  98.             if($sellOrders === false) {
  99.                 self::$_lastError = "Unable to get Liquio balances! Error: ".$liquio->getLastError();
  100.                 return false;
  101.             }
  102.  
  103.             $pairSettings = null;
  104.  
  105.             foreach (PAIRS as $p) {
  106.                 if($p[0] == $pair) {
  107.                     $pairSettings = $p;
  108.                     break;
  109.                 }
  110.             }
  111.  
  112.             if(empty($pairSettings)) {
  113.                 self::$_lastError = "Unsupported pair (".$pair.")!";
  114.                 return false;
  115.             }
  116.  
  117.             if(!empty($customAmount)) {
  118.                 $amount = $customAmount;
  119.             } else {
  120.                 $amount = $pairSettings[1];
  121.             }
  122.  
  123.             $commission = $pairSettings[2];
  124.             $commissionFixed = $pairSettings[3];
  125.             $notifyPercent = $pairSettings[4];
  126.  
  127.             $calcResult = Notifier_Calculator::calc($buyOrders['asks'], $sellOrders['bids'], $amount, $commission, $commissionFixed);
  128.  
  129.             list($pair1, $pair2) = explode("_", $pair);
  130.  
  131.             //...
  132.  
  133.             if($poloniexBalances[$pair1] < ($calcResult->amountSource)) {
  134.                 self::$_lastError = "Insufficient funds!(poloniex) dir: P_L ({$poloniexBalances[$pair1]} < {$calcResult->amountSource})";
  135.                 return false;
  136.             }
  137.  
  138.             if($liquioBalances[$pair2] < $calcResult->amountBuy) {
  139.                 self::$_lastError = "Insufficient funds!(liquio) dir: P_L ({$liquioBalances[$pair2]} < {$calcResult->amountBuy})";
  140.                 return false;
  141.             }
  142.  
  143.  
  144.             if(!empty($calcResult->error)) {
  145.                 self::$_lastError = $calcResult->error;
  146.                 return false;
  147.             }
  148.  
  149.             if($calcResult->percent < $notifyPercent) {
  150.                 self::$_lastError = "Requested operation percent lower $notifyPercent ({$calcResult->percent})!";
  151.                 return false;
  152.             }
  153.  
  154.             $orderPoloniex = $poloniex->buy($pair, $calcResult->lastRateBuy, $calcResult->amountBuy);
  155.  
  156.             if($orderPoloniex === false) {
  157.                 self::$_lastError = "Error at buy Poloniex: ".$poloniex->getLastError();
  158.                 return false;
  159.             }
  160.  
  161.             self::$_lastResult .= "Buy $pair, Rate {$calcResult->lastRateBuy}, Amount: {$calcResult->amountSource}";
  162.  
  163.             $orderLiquio = $liquio->sell($pair, $calcResult->lastRateSell, $calcResult->amountBuy);
  164.  
  165.             if($orderLiquio === false) {
  166.                 self::$_lastError = "Error at sell Liquio: ".$liquio->getLastError();
  167.                 return false;
  168.             }
  169.  
  170.             self::$_lastResult .= "||| Sell $pair, Rate {$calcResult->lastRateSell}, Amount: {$calcResult->amountBuy}";
  171.  
  172.  
  173.  
  174.         } else if($dir == self::DIR_LP)  {
  175.  
  176.             $buyOrders = $liquio->getOrders($pair, ORDERS_COUNT);
  177.             if($buyOrders === false) {
  178.                 self::$_lastError = "Unable to get Liquio balances! Error: ".$liquio->getLastError();
  179.                 return false;
  180.             }
  181.  
  182.             $sellOrders = $poloniex->getOrders($pair, ORDERS_COUNT);
  183.             if($sellOrders === false) {
  184.                 self::$_lastError = "Unable to get Poloniex balances! Error: ".$poloniex->getLastError();
  185.                 return false;
  186.             }
  187.  
  188.             $pairSettings = null;
  189.  
  190.             foreach (PAIRS as $p) {
  191.                 if($p[0] == $pair) {
  192.                     $pairSettings = $p;
  193.                     break;
  194.                 }
  195.             }
  196.  
  197.             if(empty($pairSettings)) {
  198.                 self::$_lastError = "Unsupported pair (".$pair.")!";
  199.                 return false;
  200.             }
  201.  
  202.             if(!empty($customAmount)) {
  203.                 $amount = $customAmount;
  204.             } else {
  205.                 $amount = $pairSettings[1];
  206.             }
  207.  
  208.             $commission = $pairSettings[2];
  209.             $commissionFixed = $pairSettings[3];
  210.             $notifyPercent = $pairSettings[4];
  211.  
  212.             $calcResult = Notifier_Calculator::calc($buyOrders['asks'], $sellOrders['bids'], $amount, $commission, $commissionFixed);
  213.  
  214.  
  215.             list($pair1, $pair2) = explode("_", $pair);
  216.  
  217.             //...
  218.             if($liquioBalances[$pair1] < $calcResult->amountSource) {
  219.                 self::$_lastError = "Insufficient funds!(liquio) dir: L_P ({$liquioBalances[$pair1]} < {$calcResult->amountSource})";
  220.                 return false;
  221.             }
  222.  
  223.             if($poloniexBalances[$pair2] < $calcResult->amountBuy) {
  224.                 self::$_lastError = "Insufficient funds!(poloniex) dir: L_P ({$poloniexBalances[$pair2]} < {$calcResult->amountBuy})";
  225.                 return false;
  226.             }
  227.  
  228.             if(!empty($calcResult->error)) {
  229.                 self::$_lastError = $calcResult->error;
  230.                 return false;
  231.             }
  232.  
  233.             if($calcResult->percent < $notifyPercent) {
  234.                 self::$_lastError = "Requested operation percent lower $notifyPercent ({$calcResult->percent})!";
  235.                 return false;
  236.             }
  237.  
  238.             $orderLiquio = $liquio->buy($pair, $calcResult->lastRateBuy, $calcResult->amountBuy);
  239.             if($orderLiquio === false) {
  240.                 self::$_lastError = "Error at buy Liquio: ".$liquio->getLastError();
  241.                 return false;
  242.             }
  243.  
  244.             self::$_lastResult .= "Buy $pair, Rate {$calcResult->lastRateBuy}, Amount: {$calcResult->amountBuy}";
  245.  
  246.             $orderPoloniex = $poloniex->sell($pair, $calcResult->lastRateSell, $calcResult->amountBuy);
  247.  
  248.             if($orderPoloniex === false) {
  249.                 self::$_lastError = "Error at sell Poloniex: ".$poloniex->getLastError();
  250.                 return false;
  251.             }
  252.  
  253.             self::$_lastResult .= "||| Sell $pair, Rate {$calcResult->lastRateSell}, Amount: {$calcResult->amountBuy}";
  254.  
  255.  
  256.         } else {
  257.             self::$_lastError = "Unsupported direction (".$dir.")!";
  258.             return false;
  259.         }
  260.  
  261.         F_DB::exec("INSERT INTO balancies (dt) VALUES ('%s')", date("Y-m-d H:i:s"));
  262.         $balanceId = F_DB::lastInsertId();
  263.  
  264.         self::$_lastBalanceId = $balanceId;
  265.         self::$_lastPercent = $calcResult->percent;
  266.  
  267.         foreach ($poloniexBalances as $currency => $amount) {
  268.             F_DB::exec("INSERT INTO balancies_curr (balance_id, location, `currency`, `value`) VALUES (%d, '%s','%s','%s')", $balanceId, "poloniex", $currency, $amount);
  269.         }
  270.         foreach ($liquioBalances as $currency => $amount) {
  271.             F_DB::exec("INSERT INTO balancies_curr (balance_id, location, `currency`, `value`) VALUES (%d, '%s','%s','%s')", $balanceId, "liquio", $currency, $amount);
  272.         }
  273.  
  274.         return true;
  275.         */
  276.     }
  277.  
  278.     private static function create(Notifier_CalcResult $calc) {
  279.  
  280.     }
  281.  
  282.     public static function getLastError() {
  283.         return self::$_lastError;
  284.     }
  285.  
  286.     public static function getLastResult() {
  287.         return self::$_lastResult;
  288.     }
  289.  
  290.     public static function getLastBalanceId() {
  291.         return self::$_lastBalanceId;
  292.     }
  293.  
  294.     public static function getLastPercent() {
  295.         return self::$_lastPercent;
  296.     }
  297.  
  298.  
Ответить: "test"

Здесь Вы можете ответить на заметку выше