Esempio n. 1
0
   string AsianOption::toStringRates(boost::shared_ptr<RatesEnvironment> re)
    {
        stringstream ratesDescriptionStream;
        ratesDescriptionStream << SingleInstrumentContract::toStringRates(re);
        validate();
        if (SingleOptionContract::isOK())
        {
            vector<double> forwards, fixes;
            vector<double> sds, vols;
            getRates((re->getFRS())->getAnchorDate(), fixes, forwards, sds, vols, re);
            double aveFwd = 0;
            for (size_t i = 0; i < forwards.size(); ++i) 
            {
                aveFwd += forwards[i];
            }
            if (forwards.size() > 0)
                aveFwd /= forwards.size();

            double aveRateSet = 0;
            for (size_t i = 0; i < fixes.size(); ++i) 
            {
                aveRateSet += fixes[i];
            }
            if (fixes.size() > 0)
            {
                aveRateSet /= fixes.size();
            }

            ratesDescriptionStream <<",Fix(Ave)," << fixed << setprecision(4) << aveRateSet;
            ratesDescriptionStream << ",Fwd(Ave)," << fixed << setprecision(4) << aveFwd;

            double averageSD = 0, averageVol = 0;
            for (size_t i = 0; i < sds.size(); ++i) 
            {
                averageSD += sds[i] * sds[i];
                averageVol += vols[i];
            }
            if (sds.size() > 0) 
            {
                averageSD /= sds.size();
                averageVol /= sds.size();
            }
            averageSD = sqrt(averageSD);

            ratesDescriptionStream << ",Vol(Ave)," << fixed << setprecision(6) << averageVol
                                   << ",SD(Ave)," << fixed << setprecision(6) << averageSD;

        }
        return ratesDescriptionStream.str();
    }
Esempio n. 2
0
    double AsianOption::getOptionValue(boost::shared_ptr<RatesEnvironment> re)
    {
        Date onDate = re->getAnchorDate();
        if (onDate > getSettlementDate())
        {
            return 0;
        }
        vector<double> forwards, fixes, sds, vols;
        getRates(onDate, fixes, forwards, sds, vols, re);

        double premium = 0;

        if (sds.size() != forwards.size())
        {
            return numeric_limits<double>::quiet_NaN();
        }

        double df = (re->getDRS())->getDiscountFactor(getSettlementDate());
        
        if (onDate < maturityDate) 
        {
            option->setParameters(forwards, fixes, strike, sds, df);    
            premium = option->getPremium();
        }            
        else if ((onDate >= maturityDate) && (onDate <= settlementDate))
        {
            double averageFwd = 0;
            option->setParameters(forwards, fixes, strike, sds, df);    
            if (fixes.size() == 0)
            {
                return 0;
            }
            for (size_t i = 0; i < fixes.size(); ++i) 
            {
                averageFwd += fixes[i];
            }
            averageFwd /= fixes.size();
            premium = option->getPremiumAfterMaturity(averageFwd, df);
        }
        return premium * volume;
    }
Esempio n. 3
0
void QueueTuner::contextMenuEvent(QContextMenuEvent* e)
{
    QMenu p(this);
    p.addAction(i18n("Reset..."));
    QAction *action = p.exec(e->globalPos());
    if (action)
    {

        QString question(i18n("This cannot be undone, are you sure you wish to reset to default values?"));
        int x = KMessageBox::warningContinueCancel(
                    this, question, i18n("Reset Values"),
                    KStandardGuiItem::reset(), KStandardGuiItem::cancel(),
                    QString(), KMessageBox::Dangerous
                );
        if (x == KMessageBox::Continue)
        {
            Application::instance()->resetQueueRates();
            getRates();
        }
    }
    e->accept();
}
double RateMeyerHaeseler::optimizeParameters(double epsilon) {
	assert(phylo_tree);
	double tree_lh = phylo_tree->computeLikelihood();

	DoubleVector prev_rates;
	getRates(prev_rates);

	if (empty()) {
		if (rate_file) {
			readRateFile(rate_file);
			phylo_tree->clearAllPartialLH();
			return phylo_tree->optimizeAllBranches();
		}
		initializeRates();
	}

	optimizeRates();

	
	phylo_tree->clearAllPartialLH();

	stringstream best_tree_string;
	phylo_tree->printTree(best_tree_string, WT_BR_LEN + WT_TAXON_ID);
	double new_tree_lh = phylo_tree->optimizeAllBranches(1);
	//double new_tree_lh = phylo_tree->computeLikelihood();

	if (new_tree_lh < tree_lh - 1e-5) {
		cout << "Worse likelihood (" << new_tree_lh << "), roll back site rates..." << endl;
		setRates(prev_rates);
		phylo_tree->rollBack(best_tree_string);
		//phylo_tree->clearAllPartialLh();
		new_tree_lh = phylo_tree->computeLikelihood();
		//cout << "Backup log-likelihood: " << new_tree_lh << endl;
		new_tree_lh = tree_lh;
	}
	
	return new_tree_lh;
}
Esempio n. 5
0
void QueueTuner::setServer(Server* newServer)
{
    bool toShow = false;

    if (!m_server && newServer)
        toShow = true;
    else if (!newServer && m_server)
        hide();

    // since this is tied to the new signal, we assume we're only getting called with a change

    m_server = newServer;

    if (toShow)
        show();

    if (m_server)
    {
        connect(m_server, SIGNAL(destroyed(QObject*)), SLOT(serverDestroyed(QObject*)));

        getRates();
    }
}