void tradeStocks(Record record, Dataset dataset, Portfolio* portfolio) { float priceRelative; priceRelative = (float)record.x / record.y; if(priceRelative > dataset.mean + dataset.stdDev) { sellStock(X_STR, record.x, portfolio); buyStock(Y_STR, record.y, portfolio); } if(priceRelative < dataset.mean - dataset.stdDev) { sellStock(Y_STR, record.y, portfolio); buyStock(X_STR, record.x, portfolio); } }
void sellAllStock(Record record, Portfolio* portfolio) { int entry; #ifdef PATCHED // Checks to make sure portfolio has been initiated. for(entry = 0; portfolio->numEntries > 0 && portfolio->stocks[entry].purchasedPrice != 0 && entry<portfolio->numEntries; entry++) { #else // If a Balance record has not been set, then portfolio isn't initailized and the for loop condition will cause a Segementation fault. for(entry = 0; portfolio->stocks[entry].purchasedPrice != 0; entry++) { #endif sellStock(portfolio->stocks[entry].symbol, portfolio->stocks[entry].currentPrice, portfolio); } } void updateStockValues(Record record, Portfolio* portfolio) { int entry; #ifdef PATCHED // Checks to make sure portfolio has been initiated. for(entry = 0; portfolio->numEntries > 0 && portfolio->stocks[entry].purchasedPrice != 0 && entry<portfolio->numEntries; entry++) { #else // If a Balance record has not been set, then portfolio isn't initailized and the for loop condition will cause a Segementation fault. for(entry = 0; portfolio->stocks[entry].purchasedPrice != 0; entry++) { #endif Stock* stock; stock = &portfolio->stocks[entry]; portfolio->assetBalance -= stock->currentPrice; if(stock->symbol == X_STR) stock->currentPrice = record.x; if(stock->symbol == Y_STR) stock->currentPrice = record.y; portfolio->assetBalance += stock->currentPrice; } } void initPortfolio(Portfolio* portfolio, unsigned int startingBalance) { int ret; portfolio->cashBalance = startingBalance; portfolio->assetBalance = portfolio->cashBalance; portfolio->goal = portfolio->assetBalance*2; portfolio->numEntries = INIT_ENTRY_LIST; ret = allocate(sizeof(Stock)*portfolio->numEntries, 0, (void **) &portfolio->stocks); if(ret != 0) _terminate(ALLOCATE_ERROR); }
void sellMenu() { int i, j; i = 1; while (i != 0) { system("cls"); titleLine("주식 팔기"); printf("\n [ 팔 주식을 고르세요 ]\n\n"); j = 1; for (now = head->next; now; now = now->next) { printf("\n %d. 회사 : %-20s, 가격 : %d원", j, CompanyName[now->company], now->price); j++; } printf("\n 돌아가려면 0을 선택하세요.\n"); scanf("%d", &i); if (i != 0) sellStock(i); } system("cls"); }
void RandomAgent::play() { qDebug() << "[Agent] Agent is playing."; if(!m_store.isUpToDate() || !m_myOrders.isUpToDate() || m_stocksInfo.size() != STOKS_NUMBER - 1) { qDebug() << "[Agent] Agent infos aren't up to date."; return; } m_idleTimer->start(); qint32 money = m_store.getMoney(); for(int i = 2; i <= STOKS_NUMBER; ++i) { if(m_store.contains(i)) { if(static_cast<double>(qrand())/RAND_MAX < m_sellStockChange) { qint32 price = m_stocksInfo[i].getBestBuyPrice() + 3 - qrand() % 10; if(!m_stocksInfo[i].getBestBuyPrice()) { price = m_stocksInfo[i].lastPrice() *(0.99 + (0.02 * qrand())/RAND_MAX); } if(price) { qint32 maxAmount = m_store.getStockAmount(i); if(maxAmount) { qint32 amount = pow(1 + static_cast<double>(0.15*qrand())/RAND_MAX, 10 + static_cast<double>(14*qrand())/RAND_MAX) * (1 + static_cast<double>(2*qrand())/RAND_MAX) * (static_cast<double>(money)/1000000) + 2 + qrand() % 5; amount %= maxAmount; if(amount) sellStock(i, amount, price); } } } } if(static_cast<double>(qrand())/RAND_MAX < m_buyStockChange) { qint32 price = m_stocksInfo[i].getBestSellPrice() - 3 + qrand() % 10; if(!m_stocksInfo[i].getBestSellPrice()) { price = m_stocksInfo[i].lastPrice() *(0.99 + (0.02 * qrand())/RAND_MAX); } if(price) { qint32 maxAmount = money/price; if(maxAmount) { qint32 amount = pow(1 + static_cast<double>(0.15*qrand())/RAND_MAX, 10 + static_cast<double>(14*qrand())/RAND_MAX) * (1 + static_cast<double>(2*qrand())/RAND_MAX) * (static_cast<double>(money)/1000000) + 2 + qrand() % 5; amount %= maxAmount; if(amount) buyStock(i, amount, price); } } } } QMapIterator<int, Order> it(m_myOrders); while (it.hasNext()) { it.next(); if(static_cast<double>(qrand())/RAND_MAX < m_cancelChange) cancelReq(it.key()); } }