/** * Получение последней котировки используемого в стратегии символа * @param Strategy $strategy * @return Price */ public function getLastPrice(Strategy $strategy) { return $this->em->getRepository($this->entityNamespace . Strategy::getSymbolName()[$strategy->getSymbol()])->findOneBy([], ['id' => 'DESC']); }
/** * Бэктестинг стратегии * @Route("/test/{id}", requirements={"id"="\d+"}, name="strategy.test") * @Template() * @ParamConverter("id", class="RottenwoodBarchartBundle:Strategy") * @param Strategy $strategy * @return \Symfony\Component\HttpFoundation\Response */ public function testStrategyAction(Strategy $strategy) { if ($strategy->isPrivate() && $strategy->getAuthor() !== $this->getUser()) { return ['strategyIsPrivate' => $strategy->getId()]; } $analizer = $this->get('barchart.analizer'); $trades = $analizer->testStrategy($strategy); $lastPrice = $analizer->getLastPrice($strategy); $profit = $analizer->calculatePercentProfit($trades); return ['strategy' => $strategy, 'trades' => $trades, 'currentPrice' => $lastPrice ? $lastPrice->getPrice() : 0, 'percentProfit' => $profit['simple'], 'percentProfitComplex' => $profit['complex'], 'firstPriceDate' => $analizer->getFirstTradeDate($strategy), 'lastPriceDate' => $analizer->getLastTradeDate($strategy)]; }
/** * Название торгового инструмента * @param int $symbol * @return string */ public function getSymbolName($symbol) { $symbolNames = Strategy::getRussianSymbolName(); return array_key_exists($symbol, $symbolNames) ? $symbolNames[$symbol] : ''; }