C++:实现量化MarketModels市场模型测试实例

#include <ql/qldefines.hpp>
#if !defined(BOOST_ALL_NO_LIB) && defined(BOOST_MSVC)
#  include <ql/auto_link.hpp>
#endif
#include <ql/models/marketmodels/marketmodel.hpp>
#include <ql/models/marketmodels/accountingengine.hpp>
#include <ql/models/marketmodels/pathwiseaccountingengine.hpp>
#include <ql/models/marketmodels/products/multiproductcomposite.hpp>
#include <ql/models/marketmodels/products/multistep/multistepswap.hpp>
#include <ql/models/marketmodels/products/multistep/callspecifiedmultiproduct.hpp>
#include <ql/models/marketmodels/products/multistep/exerciseadapter.hpp>
#include <ql/models/marketmodels/products/multistep/multistepnothing.hpp>
#include <ql/models/marketmodels/products/multistep/multistepinversefloater.hpp>
#include <ql/models/marketmodels/products/pathwise/pathwiseproductswap.hpp>
#include <ql/models/marketmodels/products/pathwise/pathwiseproductinversefloater.hpp>
#include <ql/models/marketmodels/products/pathwise/pathwiseproductcallspecified.hpp>
#include <ql/models/marketmodels/models/flatvol.hpp>
#include <ql/models/marketmodels/callability/swapratetrigger.hpp>
#include <ql/models/marketmodels/callability/swapbasissystem.hpp>
#include <ql/models/marketmodels/callability/swapforwardbasissystem.hpp>
#include <ql/models/marketmodels/callability/nothingexercisevalue.hpp>
#include <ql/models/marketmodels/callability/collectnodedata.hpp>
#include <ql/models/marketmodels/callability/lsstrategy.hpp>
#include <ql/models/marketmodels/callability/upperboundengine.hpp>
#include <ql/models/marketmodels/correlations/expcorrelations.hpp>
#include <ql/models/marketmodels/browniangenerators/mtbrowniangenerator.hpp>
#include <ql/models/marketmodels/browniangenerators/sobolbrowniangenerator.hpp>
#include <ql/models/marketmodels/evolvers/lognormalfwdratepc.hpp>
#include <ql/models/marketmodels/evolvers/lognormalfwdrateeuler.hpp>
#include <ql/models/marketmodels/pathwisegreeks/bumpinstrumentjacobian.hpp>
#include <ql/models/marketmodels/utilities.hpp>
#include <ql/methods/montecarlo/genericlsregression.hpp>
#include <ql/legacy/libormarketmodels/lmlinexpcorrmodel.hpp>
#include <ql/legacy/libormarketmodels/lmextlinexpvolmodel.hpp>
#include <ql/time/schedule.hpp>
#include <ql/time/calendars/nullcalendar.hpp>
#include <ql/time/daycounters/simpledaycounter.hpp>
#include <ql/pricingengines/blackformula.hpp>
#include <ql/pricingengines/blackcalculator.hpp>
#include <ql/utilities/dataformatters.hpp>
#include <ql/math/integrals/segmentintegral.hpp>
#include <ql/math/statistics/convergencestatistics.hpp>
#include <ql/termstructures/volatility/abcd.hpp>
#include <ql/termstructures/volatility/abcdcalibration.hpp>
#include <ql/math/optimization/simplex.hpp>
#include <ql/quotes/simplequote.hpp>
#include <sstream>
#include <iostream>
#include <ctime>using namespace QuantLib;std::vector<std::vector<Matrix> >
theVegaBumps(bool factorwiseBumping, const ext::shared_ptr<MarketModel>& marketModel, bool doCaps) {Real multiplierCutOff = 50.0;Real projectionTolerance = 1E-4;Size numberRates= marketModel->numberOfRates();std::vector<VolatilityBumpInstrumentJacobian::Cap> caps;if (doCaps){Rate capStrike = marketModel->initialRates()[0];for (Size i=0; i< numberRates-1; i=i+1){VolatilityBumpInstrumentJacobian::Cap nextCap;nextCap.startIndex_ = i;nextCap.endIndex_ = i+1;nextCap.strike_ = capStrike;caps.push_back(nextCap);}}std::vector<VolatilityBumpInstrumentJacobian::Swaption> swaptions(numberRates);for (Size i=0; i < numberRates; ++i){swaptions[i].startIndex_ = i;swaptions[i].endIndex_ = numberRates;}VegaBumpCollection possibleBumps(marketModel,factorwiseBumping);OrthogonalizedBumpFinder  bumpFinder(possibleBumps,swaptions,caps,multiplierCutOff, // if vector length grows by more than this discardprojectionTolerance);      // if vector projection before scaling less than this discardstd::vector<std::vector<Matrix> > theBumps;bumpFinder.GetVegaBumps(theBumps);return theBumps;}int Bermudan()
{Size numberRates =20;Real accrual = 0.5;Real firstTime = 0.5;std::vector<Real> rateTimes(numberRates+1);for (Size i=0; i < rateTimes.size(); ++i)rateTimes[i] = firstTime + i*accrual;std::vector<Real> paymentTimes(numberRates);std::vector<Real> accruals(numberRates,accrual);for (Size i=0; i < paymentTimes.size(); ++i)paymentTimes[i] = firstTime + (i+1)*accrual;Real fixedRate = 0.05;std::vector<Real> strikes(numberRates,fixedRate);Real receive = -1.0;// 0. a payer swapMultiStepSwap payerSwap(rateTimes, accruals, accruals, paymentTimes,fixedRate, true);// 1. the equivalent receiver swapMultiStepSwap receiverSwap(rateTimes, accruals, accruals, paymentTimes,fixedRate, false);//exercise schedule, we can exercise on any rate time except the last onestd::vector<Rate> exerciseTimes(rateTimes);exerciseTimes.pop_back();// naive exercise strategy, exercise above a trigger levelstd::vector<Rate> swapTriggers(exerciseTimes.size(), fixedRate);SwapRateTrigger naifStrategy(rateTimes, swapTriggers, exerciseTimes);// Longstaff-Schwartz exercise strategystd::vector<std::vector<NodeData> > collectedData;std::vector<std::vector<Real> > basisCoefficients;// control that does nothing, need it because some control is expectedNothingExerciseValue control(rateTimes);//    SwapForwardBasisSystem basisSystem(rateTimes,exerciseTimes);SwapBasisSystem basisSystem(rateTimes,exerciseTimes);// rebate that does nothing, need it because some rebate is expected// when you break a swap nothing happens.NothingExerciseValue nullRebate(rateTimes);CallSpecifiedMultiProduct dummyProduct =CallSpecifiedMultiProduct(receiverSwap, naifStrategy,ExerciseAdapter(nullRebate));const EvolutionDescription& evolution = dummyProduct.evolution();// parameters for modelsSize seed = 12332; // for Sobol generatorSize trainingPaths = 65536;Size paths = 16384;Size vegaPaths = 16384*64;std::cout << "training paths, " << trainingPaths << "\n";std::cout << "paths, " << paths << "\n";std::cout << "vega Paths, " << vegaPaths << "\n";
#ifdef _DEBUGtrainingPaths = 512;paths = 1024;vegaPaths = 1024;
#endif// set up a calibration, this would typically be done by using a calibratorReal rateLevel =0.05;Real initialNumeraireValue = 0.95;Real volLevel = 0.11;Real beta = 0.2;Real gamma = 1.0;Size numberOfFactors = std::min<Size>(5,numberRates);Spread displacementLevel =0.02;// set up vectorsstd::vector<Rate> initialRates(numberRates,rateLevel);std::vector<Volatility> volatilities(numberRates, volLevel);std::vector<Spread> displacements(numberRates, displacementLevel);ExponentialForwardCorrelation correlations(rateTimes,volLevel, beta,gamma);FlatVol  calibration(volatilities,ext::shared_ptr<PiecewiseConstantCorrelation>(new  ExponentialForwardCorrelation(correlations)),evolution,numberOfFactors,initialRates,displacements);ext::shared_ptr<MarketModel> marketModel(new FlatVol(calibration));// we use a factory since there is data that will only be known laterSobolBrownianGeneratorFactory generatorFactory(SobolBrownianGenerator::Diagonal, seed);std::vector<Size> numeraires( moneyMarketMeasure(evolution));// the evolver will actually evolve the ratesLogNormalFwdRatePc  evolver(marketModel,generatorFactory,numeraires   // numeraires for each step);ext::shared_ptr<MarketModelEvolver> evolverPtr(new LogNormalFwdRatePc(evolver));int t1= clock();// gather data before computing exercise strategycollectNodeData(evolver,receiverSwap,basisSystem,nullRebate,control,trainingPaths,collectedData);int t2 = clock();// calculate the exercise strategy's coefficientsgenericLongstaffSchwartzRegression(collectedData,basisCoefficients);// turn the coefficients into an exercise strategyLongstaffSchwartzExerciseStrategy exerciseStrategy(basisSystem, basisCoefficients,evolution, numeraires,nullRebate, control);//  bermudan swaption to enter into the payer swapCallSpecifiedMultiProduct bermudanProduct =CallSpecifiedMultiProduct(MultiStepNothing(evolution),exerciseStrategy, payerSwap);//  callable receiver swapCallSpecifiedMultiProduct callableProduct =CallSpecifiedMultiProduct(receiverSwap, exerciseStrategy,ExerciseAdapter(nullRebate));// lower bound: evolve all 4 products togheterMultiProductComposite allProducts;allProducts.add(payerSwap);allProducts.add(receiverSwap);allProducts.add(bermudanProduct);allProducts.add(callableProduct);allProducts.finalize();AccountingEngine accounter(evolverPtr,Clone<MarketModelMultiProduct>(allProducts),initialNumeraireValue);SequenceStatisticsInc stats;accounter.multiplePathValues (stats,paths);int t3 = clock();std::vector<Real> means(stats.mean());for (Real mean : means)std::cout << mean << "\n";std::cout << " time to build strategy, " << (t2-t1)/static_cast<Real>(CLOCKS_PER_SEC)<< ", seconds.\n";std::cout << " time to price, " << (t3-t2)/static_cast<Real>(CLOCKS_PER_SEC)<< ", seconds.\n";// vegas// do it twice once with factorwise bumping, once withoutSize pathsToDoVegas = vegaPaths;for (Size i=0; i < 4; ++i){bool allowFactorwiseBumping = i % 2 > 0 ;bool doCaps = i / 2 > 0 ;LogNormalFwdRateEuler evolverEuler(marketModel,generatorFactory,numeraires) ;MarketModelPathwiseSwap receiverPathwiseSwap(  rateTimes,accruals,strikes,receive);Clone<MarketModelPathwiseMultiProduct> receiverPathwiseSwapPtr(receiverPathwiseSwap.clone());//  callable receiver swapCallSpecifiedPathwiseMultiProduct callableProductPathwise(receiverPathwiseSwapPtr,exerciseStrategy);Clone<MarketModelPathwiseMultiProduct> callableProductPathwisePtr(callableProductPathwise.clone());std::vector<std::vector<Matrix> > theBumps(theVegaBumps(allowFactorwiseBumping,marketModel,doCaps));PathwiseVegasOuterAccountingEngineaccountingEngineVegas(ext::make_shared<LogNormalFwdRateEuler>(evolverEuler),callableProductPathwisePtr,marketModel,theBumps,initialNumeraireValue);std::vector<Real> values,errors;accountingEngineVegas.multiplePathValues(values,errors,pathsToDoVegas);std::cout << "vega output \n";std::cout << " factorwise bumping " << allowFactorwiseBumping << "\n";std::cout << " doCaps " << doCaps << "\n";Size r=0;std::cout << " price estimate, " << values[r++] << "\n";for (Size i=0; i < numberRates; ++i, ++r)std::cout << " Delta, " << i << ", " << values[r] << ", " << errors[r] << "\n";Real totalVega = 0.0;for (; r < values.size(); ++r){std::cout << " vega, " << r - 1 -  numberRates<< ", " << values[r] << " ," << errors[r] << "\n";totalVega +=  values[r];}std::cout << " total Vega, " << totalVega << "\n";}// upper boundMTBrownianGeneratorFactory uFactory(seed+142);ext::shared_ptr<MarketModelEvolver> upperEvolver(new LogNormalFwdRatePc( ext::shared_ptr<MarketModel>(new FlatVol(calibration)),uFactory,numeraires   // numeraires for each step));std::vector<ext::shared_ptr<MarketModelEvolver> > innerEvolvers;std::valarray<bool> isExerciseTime =   isInSubset(evolution.evolutionTimes(),    exerciseStrategy.exerciseTimes());for (Size s=0; s < isExerciseTime.size(); ++s){if (isExerciseTime[s]){MTBrownianGeneratorFactory iFactory(seed+s);ext::shared_ptr<MarketModelEvolver> e =ext::shared_ptr<MarketModelEvolver> (static_cast<MarketModelEvolver*>(new   LogNormalFwdRatePc(ext::shared_ptr<MarketModel>(new FlatVol(calibration)),uFactory,numeraires ,  // numeraires for each steps)));innerEvolvers.push_back(e);}}UpperBoundEngine uEngine(upperEvolver,  // does outer pathsinnerEvolvers, // for sub-simulations that do continuation valuesreceiverSwap,nullRebate,receiverSwap,nullRebate,exerciseStrategy,initialNumeraireValue);Statistics uStats;Size innerPaths = 255;Size outerPaths =256;int t4 = clock();uEngine.multiplePathValues(uStats,outerPaths,innerPaths);Real upperBound = uStats.mean();Real upperSE = uStats.errorEstimate();int t5=clock();std::cout << " Upper - lower is, " << upperBound << ", with standard error " << upperSE << "\n";std::cout << " time to compute upper bound is,  " << (t5-t4)/static_cast<Real>(CLOCKS_PER_SEC) << ", seconds.\n";return 0;
}int InverseFloater(Real rateLevel)
{Size numberRates =20;Real accrual = 0.5;Real firstTime = 0.5;Real strike =0.15;Real fixedMultiplier = 2.0;Real floatingSpread =0.0;bool payer = true;std::vector<Real> rateTimes(numberRates+1);for (Size i=0; i < rateTimes.size(); ++i)rateTimes[i] = firstTime + i*accrual;std::vector<Real> paymentTimes(numberRates);std::vector<Real> accruals(numberRates,accrual);std::vector<Real> fixedStrikes(numberRates,strike);std::vector<Real> floatingSpreads(numberRates,floatingSpread);std::vector<Real> fixedMultipliers(numberRates,fixedMultiplier);for (Size i=0; i < paymentTimes.size(); ++i)paymentTimes[i] = firstTime + (i+1)*accrual;MultiStepInverseFloater inverseFloater(rateTimes,accruals,accruals,fixedStrikes,fixedMultipliers,floatingSpreads,paymentTimes,payer);//exercise schedule, we can exercise on any rate time except the last onestd::vector<Rate> exerciseTimes(rateTimes);exerciseTimes.pop_back();// naive exercise strategy, exercise above a trigger levelReal trigger =0.05;std::vector<Rate> swapTriggers(exerciseTimes.size(), trigger);SwapRateTrigger naifStrategy(rateTimes, swapTriggers, exerciseTimes);// Longstaff-Schwartz exercise strategystd::vector<std::vector<NodeData> > collectedData;std::vector<std::vector<Real> > basisCoefficients;// control that does nothing, need it because some control is expectedNothingExerciseValue control(rateTimes);SwapForwardBasisSystem basisSystem(rateTimes,exerciseTimes);
//    SwapBasisSystem basisSystem(rateTimes,exerciseTimes);// rebate that does nothing, need it because some rebate is expected// when you break a swap nothing happens.NothingExerciseValue nullRebate(rateTimes);CallSpecifiedMultiProduct dummyProduct =CallSpecifiedMultiProduct(inverseFloater, naifStrategy,ExerciseAdapter(nullRebate));const EvolutionDescription& evolution = dummyProduct.evolution();// parameters for modelsSize seed = 12332; // for Sobol generatorSize trainingPaths = 65536;Size paths = 65536;Size vegaPaths =16384;#ifdef _DEBUGtrainingPaths = 8192;paths = 8192;vegaPaths = 1024;
#endifstd::cout <<  " inverse floater \n";std::cout << " fixed strikes :  "  << strike << "\n";std::cout << " number rates :  " << numberRates << "\n";std::cout << "training paths, " << trainingPaths << "\n";std::cout << "paths, " << paths << "\n";std::cout << "vega Paths, " << vegaPaths << "\n";// set up a calibration, this would typically be done by using a calibrator//Real rateLevel =0.08;std::cout << " rate level " <<  rateLevel << "\n";Real initialNumeraireValue = 0.95;Real volLevel = 0.11;Real beta = 0.2;Real gamma = 1.0;Size numberOfFactors = std::min<Size>(5,numberRates);Spread displacementLevel =0.02;// set up vectorsstd::vector<Rate> initialRates(numberRates,rateLevel);std::vector<Volatility> volatilities(numberRates, volLevel);std::vector<Spread> displacements(numberRates, displacementLevel);ExponentialForwardCorrelation correlations(rateTimes,volLevel, beta,gamma);FlatVol  calibration(volatilities,ext::shared_ptr<PiecewiseConstantCorrelation>(new  ExponentialForwardCorrelation(correlations)),evolution,numberOfFactors,initialRates,displacements);ext::shared_ptr<MarketModel> marketModel(new FlatVol(calibration));// we use a factory since there is data that will only be known laterSobolBrownianGeneratorFactory generatorFactory(SobolBrownianGenerator::Diagonal, seed);std::vector<Size> numeraires( moneyMarketMeasure(evolution));// the evolver will actually evolve the ratesLogNormalFwdRatePc  evolver(marketModel,generatorFactory,numeraires   // numeraires for each step);ext::shared_ptr<MarketModelEvolver> evolverPtr(new LogNormalFwdRatePc(evolver));int t1= clock();// gather data before computing exercise strategycollectNodeData(evolver,inverseFloater,basisSystem,nullRebate,control,trainingPaths,collectedData);int t2 = clock();// calculate the exercise strategy's coefficientsgenericLongstaffSchwartzRegression(collectedData,basisCoefficients);// turn the coefficients into an exercise strategyLongstaffSchwartzExerciseStrategy exerciseStrategy(basisSystem, basisCoefficients,evolution, numeraires,nullRebate, control);//  callable receiver swapCallSpecifiedMultiProduct callableProduct =CallSpecifiedMultiProduct(inverseFloater, exerciseStrategy,ExerciseAdapter(nullRebate));MultiProductComposite allProducts;allProducts.add(inverseFloater);allProducts.add(callableProduct);allProducts.finalize();AccountingEngine accounter(evolverPtr,Clone<MarketModelMultiProduct>(allProducts),initialNumeraireValue);SequenceStatisticsInc stats;accounter.multiplePathValues (stats,paths);int t3 = clock();std::vector<Real> means(stats.mean());for (Real mean : means)std::cout << mean << "\n";std::cout << " time to build strategy, " << (t2-t1)/static_cast<Real>(CLOCKS_PER_SEC)<< ", seconds.\n";std::cout << " time to price, " << (t3-t2)/static_cast<Real>(CLOCKS_PER_SEC)<< ", seconds.\n";// vegas// do it twice once with factorwise bumping, once withoutSize pathsToDoVegas = vegaPaths;for (Size i=0; i < 4; ++i){bool allowFactorwiseBumping = i % 2 > 0 ;bool doCaps = i / 2 > 0 ;LogNormalFwdRateEuler evolverEuler(marketModel,generatorFactory,numeraires) ;MarketModelPathwiseInverseFloater pathwiseInverseFloater(rateTimes,accruals,accruals,fixedStrikes,fixedMultipliers,floatingSpreads,paymentTimes,payer);Clone<MarketModelPathwiseMultiProduct> pathwiseInverseFloaterPtr(pathwiseInverseFloater.clone());//  callable inverse floaterCallSpecifiedPathwiseMultiProduct callableProductPathwise(pathwiseInverseFloaterPtr,exerciseStrategy);Clone<MarketModelPathwiseMultiProduct> callableProductPathwisePtr(callableProductPathwise.clone());std::vector<std::vector<Matrix> > theBumps(theVegaBumps(allowFactorwiseBumping,marketModel,doCaps));PathwiseVegasOuterAccountingEngineaccountingEngineVegas(ext::make_shared<LogNormalFwdRateEuler>(evolverEuler),//         pathwiseInverseFloaterPtr,callableProductPathwisePtr,marketModel,theBumps,initialNumeraireValue);std::vector<Real> values,errors;accountingEngineVegas.multiplePathValues(values,errors,pathsToDoVegas);std::cout << "vega output \n";std::cout << " factorwise bumping " << allowFactorwiseBumping << "\n";std::cout << " doCaps " << doCaps << "\n";Size r=0;std::cout << " price estimate, " << values[r++] << "\n";for (Size i=0; i < numberRates; ++i, ++r)std::cout << " Delta, " << i << ", " << values[r] << ", " << errors[r] << "\n";Real totalVega = 0.0;for (; r < values.size(); ++r){std::cout << " vega, " << r - 1 -  numberRates<< ", " << values[r] << " ," << errors[r] << "\n";totalVega +=  values[r];}std::cout << " total Vega, " << totalVega << "\n";}// upper boundMTBrownianGeneratorFactory uFactory(seed+142);ext::shared_ptr<MarketModelEvolver> upperEvolver(new LogNormalFwdRatePc( ext::shared_ptr<MarketModel>(new FlatVol(calibration)),uFactory,numeraires   // numeraires for each step));std::vector<ext::shared_ptr<MarketModelEvolver> > innerEvolvers;std::valarray<bool> isExerciseTime =   isInSubset(evolution.evolutionTimes(),    exerciseStrategy.exerciseTimes());for (Size s=0; s < isExerciseTime.size(); ++s){if (isExerciseTime[s]){MTBrownianGeneratorFactory iFactory(seed+s);ext::shared_ptr<MarketModelEvolver> e =ext::shared_ptr<MarketModelEvolver> (static_cast<MarketModelEvolver*>(new   LogNormalFwdRatePc(ext::shared_ptr<MarketModel>(new FlatVol(calibration)),uFactory,numeraires ,  // numeraires for each steps)));innerEvolvers.push_back(e);}}UpperBoundEngine uEngine(upperEvolver,  // does outer pathsinnerEvolvers, // for sub-simulations that do continuation valuesinverseFloater,nullRebate,inverseFloater,nullRebate,exerciseStrategy,initialNumeraireValue);Statistics uStats;Size innerPaths = 255;Size outerPaths =256;int t4 = clock();uEngine.multiplePathValues(uStats,outerPaths,innerPaths);Real upperBound = uStats.mean();Real upperSE = uStats.errorEstimate();int t5=clock();std::cout << " Upper - lower is, " << upperBound << ", with standard error " << upperSE << "\n";std::cout << " time to compute upper bound is,  " << (t5-t4)/static_cast<Real>(CLOCKS_PER_SEC) << ", seconds.\n";return 0;}int main()
{try {for (Size i=5; i < 10; ++i)InverseFloater(i/100.0);return 0;} catch (std::exception& e) {std::cerr << e.what() << std::endl;return 1;} catch (...) {std::cerr << "unknown error" << std::endl;return 1;}
}

该博文为原创文章,未经博主同意不得转。
本文章博客地址:https://cplusplus.blog.csdn.net/article/details/128309499

C++:实现量化MarketModels市场模型测试实例相关推荐

  1. C++:实现量化Libor市场模型测试实例

    C++:实现量化Libor市场模型测试实例 #include "libormarketmodel.hpp" #include "utilities.hpp"#i ...

  2. C++:实现量化ODE模型测试实例

    C++:实现量化ODE模型测试实例 #include "ode.hpp" #include "utilities.hpp" #include <ql/ex ...

  3. C++:实现量化Integration积分测试实例

    C++:实现量化Integration积分测试实例 #include "integrals.hpp" #include "utilities.hpp" #inc ...

  4. C++:实现量化默认概率曲线测试实例

    C++:实现量化默认概率曲线测试实例 #include "defaultprobabilitycurves.hpp" #include "utilities.hpp&qu ...

  5. C++:实现量化GSR模型测试实例

    C++:实现量化GSR模型测试实例 #include "gsr.hpp" #include "utilities.hpp" #include <ql/pr ...

  6. C++:实现量化covariance协方差矩阵测试实例

    C++:实现量化covariance协方差矩阵测试实例 #include "covariance.hpp" #include "utilities.hpp" # ...

  7. C++:实现量化Libor市场模型流程测试实例

    C++:实现量化Libor市场模型流程测试实例 #include "libormarketmodelprocess.hpp" #include "utilities.hp ...

  8. C++:实现量化SMM Caplet校准测试实例

    C++:实现量化SMM Caplet校准测试实例 #include "marketmodel_smmcapletcalibration.hpp" #include "ut ...

  9. C++:实现量化SMM Caplet α 校准测试实例

    C++:实现量化SMM Caplet α 校准测试实例 #include "marketmodel_smmcapletalphacalibration.hpp" #include ...

最新文章

  1. Win10的UWP之标题栏的返回键(一)
  2. c 结构体 不允许使用不完整的类型_.NET Core 基础类型介绍
  3. python123百钱买百鸡_求解百钱买百鸡问题。假设大鸡 5 元一只,中鸡 3 元一只,小鸡 1 元三只,现有 100 元钱想买 100 只鸡,有多少种买法?截图代码和运行结果_学小易找答案...
  4. eigen3.3.8帮助文档下载 chm_惠普7500A驱动下载-惠普hp 7500A打印机驱动下载 v28.8官方版...
  5. 双链表插入、删除操作单步解析(十四)
  6. 2018年双十一:计算机品类纸质书籍销量冠军
  7. java创建按钮_java中制作一个按钮需要那些步骤
  8. 五类、超五、六类、超六类网线
  9. 360 linux 杀毒,360主机卫士Linux后门专杀版
  10. 坦克世界没有服务器信号,坦克世界闪击战无法连接服务器怎么办 网络问题
  11. python3爬虫有道翻译_【Python3爬虫】有道翻译
  12. XBOX GAMEPASS取消自动续费
  13. 小程序嵌套h5页面_快速小程序开发之微信小程序内嵌 H5
  14. 软件测试需求评审目的,需求评审的重要性
  15. 工业POE交换机出现不供电怎么办?
  16. 接吻时最不想遇见的10种情况
  17. 串口助手测试NB-IoT模块与华为OceanConnect平台通信(BC35-G模块、非常详细)
  18. Django实现收藏功能
  19. 乐视网被冻结价值9000万财产 要贾跃亭以FF股权抵偿债务
  20. 关于图片预加载loading及加载失败的相关问题

热门文章

  1. pdf转换成jpg python_Python将PDF转成图片
  2. MES与ERP的系统整合解决方案,ERP和MES开发定制对企业带来的效益
  3. 设置Tomcat编码
  4. C# TextBox换行 自动显示至最后行
  5. php似水流年同学录,似水年华同学录源码附教程
  6. 找歌软件测试自学,为用户而改变 酷我音乐2012For Android版本重构软件测试
  7. _undo_autotune(关闭undo retention优化建议)
  8. 计算机视觉方向实习面试总结 (商汤 / 搜狗 / 纽劢 / 普华永道)
  9. Python摄氏度与华氏度的计算
  10. 关于Anaconda网络问题 An HTTP error occurred when trying to retrieve this URL.