PriceList Indicator::getResultAsPriceList(size_t num) const { if (!m_imp) { HKU_WARN("indicator imptr is null! [Indicator::getResultAsPriceList]"); return PriceList(); } return m_imp->getResultAsPriceList(num); }
void GameStateShop::Start() { menu = NULL; bListCards = false; mTouched = false; mStage = STAGE_FADE_IN; mElapsed = 0; needLoad = true; booster = NULL; srcCards = NEW WSrcUnlockedCards(0); srcCards->setElapsed(15); srcCards->addFilter(NEW WCFilterNOT(NEW WCFilterRarity("T"))); srcCards->addFilter(NEW WCFilterNOT(NEW WCFilterSet(MTGSets::INTERNAL_SET))); bigSync = 0; shopMenu = NEW WGuiMenu(JGE_BTN_DOWN, JGE_BTN_UP, true, &bigSync); MTGAllCards * ac = MTGCollection(); playerdata = NEW PlayerData(ac); myCollection = NEW DeckDataWrapper(playerdata->collection); pricelist = NEW PriceList("settings/prices.dat", ac); for (int i = 0; i < SHOP_SLOTS; i++) { WGuiCardDistort * dist; if (i < BOOSTER_SLOTS) dist = NEW WGuiCardDistort(NULL, true); else { dist = NEW WGuiCardDistort(srcCards, true); dist->mOffset.setOffset(i - BOOSTER_SLOTS); } dist->xy = WDistort(_x1[i], _y1[i], _x2[i], _y2[i], _x3[i], _y3[i], _x4[i], _y4[i]); shopMenu->Add(NEW WGuiButton(dist, -102, i, this)); } shopMenu->Entering(JGE_BTN_NONE); if (!bigDisplay) { bigDisplay = NEW WGuiCardImage(srcCards); bigDisplay->mOffset.Hook(&bigSync); bigDisplay->mOffset.setOffset(-BOOSTER_SLOTS); bigDisplay->setX(385); bigDisplay->setY(135); } for (int i = 0; i < 8; ++i) { std::ostringstream stream; stream << "iconspsp" << i; pspIcons[i] = WResourceManager::Instance()->RetrieveQuad("iconspsp.png", (float) i * 32, 0, 32, 32, stream.str(), RETRIEVE_MANAGE); pspIcons[i]->SetHotSpot(16, 16); } JRenderer::GetInstance()->EnableVSync(true); taskList = NULL; packlist = NEW MTGPacks(); packlist->loadAll(); load(); }
int WSrcDeck::totalPrice() { int total = 0; PriceList * pricelist = NEW PriceList("settings/prices.dat", MTGCollection()); map<int, int>::iterator it; for (it = copies.begin(); it != copies.end(); it++) { int nb = it->second; if (nb) total += pricelist->getPrice(it->first); } SAFE_DELETE(pricelist); return total; }
Indicator HKU_API AmaSpecial(const Block& block, KQuery query, Indicator ama) { Indicator result; StockManager& sm = StockManager::instance(); //计算每日股票总数 DatetimeList dateList = sm.getTradingCalendar(query, "SH"); size_t dayTotal = dateList.size(); if (dayTotal == 0) { result = PRICELIST(PriceList()); result.name("POS"); return result; } vector<size_t> numberPerDay(dayTotal); for (size_t i = 0; i < dayTotal; ++i) { numberPerDay[i] = 0; for (auto stk_iter = block.begin(); stk_iter != block.end(); ++stk_iter) { if (stk_iter->startDatetime() <= dateList[i] && dateList[i] <= stk_iter->lastDatetime()) { numberPerDay[i]++; } } } vector<size_t> position(dayTotal); size_t discard = ama.discard(); for (auto stk_iter = block.begin(); stk_iter != block.end(); ++stk_iter) { KData kdata = stk_iter->getKData(query); if (kdata.empty()) continue; SignalPtr sg(SG_Single(ama)); sg->setTO(kdata); bool isHold = false; size_t n_dis = 0; for (size_t i = 0; i < dayTotal; ++i) { if (isHold) { if (sg->shouldSell(dateList[i])) { isHold = false; } else { position[i]++; } } else { if (sg->shouldBuy(dateList[i])) { position[i]++; isHold = true; } } if (dateList[i] >= kdata[0].datetime) { if (n_dis < discard) { n_dis++; numberPerDay[i]--; } } } } PriceList tmp_result(dayTotal, Null<price_t>()); for (auto i = discard; i < dayTotal; ++i) { tmp_result[i] = numberPerDay[i] ? (double)position[i]/(double)numberPerDay[i] : 1.0; } result = PRICELIST(tmp_result); result.name("POS"); return PRICELIST(result); }
Indicator HKU_API PRICELIST(price_t *data, size_t total) { return data ? PRICELIST(PriceList(data, data+total), 0) : Indicator(make_shared<IPriceList>()); }
IPriceList::IPriceList() : IndicatorImp("PRICELIST", 1) { setParam<int>("result_index", 0); setParam<PriceList>("data", PriceList()); setParam<int>("discard", 0); }