Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/lib-base/src/CLI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ EnjoLib::Result<CLIResult> CLI::GetConfigs(int argc, char ** argv) const
const char * OPT_SYMBOL = "sym";
const char * OPT_PERIOD = "per";
const char * OPT_LAGS = "lags";
const char * OPT_PER_SEASONAL = "per-easonal";
const char * OPT_PER_SEASONAL = "per-seasonal";


EnjoLib::ProgramOptionsState popState;
Expand Down
29 changes: 19 additions & 10 deletions src/lib-base/src/ConfigOpti.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,15 @@ float ConfigOpti::GetOPTI_CROSS_VALID_BARS_XVAL(const IPeriod & per) const
return OPTI_CROSS_VALID_BARS_XVAL / 100.0;
}

OptiType ConfigOpti::GetOptimizer() const
OptiType ConfigOpti::GetOperationType() const
{
return static_cast<OptiType>(OPTIMIZER);
}
OptiMethod ConfigOpti::GetOptimizerMethod() const
OptiMethod ConfigOpti::GetMethod() const
{
return static_cast<OptiMethod>(OPTIMIZER_METHOD);
}
OptiGoalType ConfigOpti::GetOptimizerGoalType() const
OptiGoalType ConfigOpti::GetGoalType() const
{
return static_cast<OptiGoalType>(OPTIMIZER_GOAL);
}
Expand All @@ -57,22 +57,32 @@ void ConfigOpti::SetOptimizerGoal(const OptiGoalType & optiGoal)
OPTIMIZER_GOAL = static_cast<long int>(optiGoal);
}


bool ConfigOpti::IsSearchFloatingPoint() const
{
return not IsSearchGrid();
}
bool ConfigOpti::IsSearchGrid() const
{
return GetOptimizerMethod() == OptiMethod::OPTI_METHOD_GRID || IsSearchRandom();
return GetMethod() == OptiMethod::OPTI_METHOD_GRID || IsSearchRandom();
}
bool ConfigOpti::IsSearchRandom() const
{
return GetOptimizerMethod() == OptiMethod::OPTI_METHOD_MONTECARLO;
return GetMethod() == OptiMethod::OPTI_METHOD_MONTECARLO;
}
bool ConfigOpti::IsXValid() const
{
return GetOptimizer() == OptiType::OPTI_TYPE_XVALID;
return GetOperationType() == OptiType::OPTI_TYPE_XVALID;
}
bool ConfigOpti::IsOperationType(const OptiType & operType) const
{
const OptiType oper = GetOperationType();
return oper == operType;
}
bool ConfigOpti::IsOptimizing() const
{
const OptiType oper = GetOperationType();
return oper == OptiType::OPTI_TYPE_FIND || oper == OptiType::OPTI_TYPE_XVALID;
}

ConfigOpti::~ConfigOpti(){}
Expand All @@ -82,7 +92,6 @@ void ConfigOpti::RegisterAndReadBools(EnjoLib::Istream & f)
RegisterAndReadBool(f, OPTI_VERBOSE, true, "VERBOSE", "Show plots and stats");
RegisterAndReadBool(f, OPTI_USE_RELEASE, false, "USE_RELEASE", "Use parameters stored as 'release'");
RegisterAndReadBool(f, OPTI_GLOBAL, false, "GLOBAL", "Find parameters, which optimize all series at the same time");
//RegisterAndReadBool(f, OPTI_CROSS_VALID, false, "W.F. Validation", "Walk forward optimization / validation");
RegisterAndReadBool(f, OPTI_LAST, false, "LAST", "Use only the last window (iteration) of the W.F. Validation");
RegisterAndReadBool(f, OPTI_RANDOM_EARLY_STOP, false, "Early stop", "Stop Monte Carlo if the change of variance of the optimized var is below threshold");
RegisterAndReadBool(f, OPTI_SERVER_DENSE, false, "SERVER_DENSE", "Use dense sampling of the variables in production (on server).");
Expand All @@ -93,11 +102,11 @@ void ConfigOpti::RegisterAndReadInts(EnjoLib::Istream & f)
RegisterAndReadInt (f, OPTIMIZER, (long int)OptiType::OPTI_TYPE_NONE);
RegisterAndReadInt (f, OPTIMIZER_METHOD, (long int)OptiMethod::OPTI_METHOD_GRID);
RegisterAndReadInt (f, OPTIMIZER_GOAL, (long int)OptiGoalType::SUM);

RegisterAndReadInt (f, OPTI_CROSS_VALID_BARS_OPTI_H1, 2000);
RegisterAndReadInt (f, OPTI_CROSS_VALID_BARS_XVAL, 20);
RegisterAndReadInt (f, OPTI_RANDOM_SAMPLES_NUM, 100);
RegisterAndReadInt (f, OPTI_RANDOM_MIN_DIFF_PROMILE, 500);
RegisterAndReadInt (f, OPTI_RANDOM_MIN_DIFF_PROMILE, 500);
}
void ConfigOpti::RegisterAndReadFloats(EnjoLib::Istream & f)
{
Expand Down
11 changes: 6 additions & 5 deletions src/lib-base/src/ConfigOpti.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,12 @@ class ConfigOpti : public ConfigBase
bool IsSearchGrid() const;
bool IsSearchRandom() const;
bool IsXValid() const;
OptiType GetOptimizer() const;
OptiMethod GetOptimizerMethod() const;
OptiGoalType GetOptimizerGoalType() const;

bool IsOptimizing() const;
bool IsOperationType(const OptiType & operType) const;
OptiType GetOperationType() const;
OptiMethod GetMethod() const;
OptiGoalType GetGoalType() const;

void SetOptimizer(const OptiType & optiType);
void SetOptimizerMethod(const OptiMethod & optiMethod);
void SetOptimizerGoal(const OptiGoalType & optiGoal);
Expand All @@ -46,7 +48,6 @@ class ConfigOpti : public ConfigBase
bool OPTI_RANDOM_EARLY_STOP = false;
bool OPTI_USE_RELEASE = true;
bool OPTI_GLOBAL = false;
//bool OPTI_CROSS_VALID = false; /// TODO: Remove - already done via OptiType
bool OPTI_LAST = false;
bool OPTI_SERVER_DENSE = false;
bool OPTI_XVAL_EXTENDABLE = false;
Expand Down
2 changes: 1 addition & 1 deletion src/lib-base/src/OptiType.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
enum class OptiType
{
OPTI_TYPE_NONE,
OPTI_TYPE_FIND,
OPTI_TYPE_USE,
OPTI_TYPE_FIND,
OPTI_TYPE_XVALID
};

Expand Down
4 changes: 2 additions & 2 deletions src/lib-base/src/OptiVar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ OptiVarF::OptiVarF(const IDataProvider & period, const EnjoLib::Str & varId, boo

float OptiVarF::GetVal() const
{
if (gcfgMan.cfgOpti->GetOptimizer() == OptiType::OPTI_TYPE_NONE)
if (gcfgMan.cfgOpti->IsOperationType(OptiType::OPTI_TYPE_NONE))
{
return valDefault;
}
Expand All @@ -64,7 +64,7 @@ void OptiVarF::SetVal(float val)

const float & OptiVarF::GetValRef() const
{
if (gcfgMan.cfgOpti->GetOptimizer() == OptiType::OPTI_TYPE_NONE)
if (gcfgMan.cfgOpti->IsOperationType(OptiType::OPTI_TYPE_NONE))
{
return valDefault;
}
Expand Down
2 changes: 1 addition & 1 deletion src/lib-base/src/PredictorBase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
PredictorBase::PredictorBase(const IDataProvider & dat, const EnjoLib::Str & lagName)
: m_dat(dat)
, m_optiFloats(new OptiVarVec())
, m_lagMain(dat, "LAG_" + lagName, true, 10, 1, 70, 1)
, m_lagMain(dat, "LAG_" + lagName, true, 10, 1, 150, 1)
{
AddOptiVar(m_lagMain);
}
Expand Down
9 changes: 2 additions & 7 deletions src/qt-lib/src/Monster.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include <ConfigOpti.h>
#include <ConfigGlob.h>
#include "ISymbol.h"
#include "OptiType.h"
#include <SymbolFactoryAbstract.h>
#include <StrategyFactoryAbstract.h>

Expand Down Expand Up @@ -85,13 +86,7 @@ void Monster::Reload(const EnjoLib::Str & symName, const EnjoLib::Str & periodNa

ConfigTF2 & confTF2 = *gcfgMan.cfgTF2;
const ConfigOpti & confOpti = *gcfgMan.cfgOpti;

if (confOpti.OPTIMIZER == 1)
gcfg.OPTI_USE = false;
else if (confOpti.OPTIMIZER == 2)
gcfg.OPTI_USE = true;
else if (confOpti.OPTIMIZER == 0)
gcfg.OPTI_USE = false;
gcfg.OPTI_USE = confOpti.IsOperationType(OptiType::OPTI_TYPE_USE);

if (mode == 0)
{
Expand Down
7 changes: 1 addition & 6 deletions src/qt-lib/src/MyMainWindow3.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -226,12 +226,7 @@ void MyMainWindow::Reload(const Monster & monst, int mode, int relPeriod, int re
ConfigTF2 & confTF2 = *gcfgMan.cfgTF2;
const ConfigOpti & confOpti = *gcfgMan.cfgOpti;

if (confOpti.OPTIMIZER == 1)
gcfg.OPTI_USE = false;
else if (confOpti.OPTIMIZER == 2)
gcfg.OPTI_USE = true;
else if (confOpti.OPTIMIZER == 0)
gcfg.OPTI_USE = false;
gcfg.OPTI_USE = confOpti.GetOperationType() == OptiType::OPTI_TYPE_USE;

if (mode == 3 || m_training)
{
Expand Down
16 changes: 8 additions & 8 deletions src/tsqsim-lib/src/OptimizerPred.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ OptimizerPred::OptimizerPred(const PredictorType & type, const ISymbol & sym, co
const TSInput tsin(m_period, *gcfgMan.cfgTS.get());
CorPtr<IPredictor> fun = m_fact.Create(period, m_type);
InitFromOptimizable(*fun, period);

m_len = fun->Len();
}
OptimizerPred::~OptimizerPred(){}
Expand All @@ -63,20 +63,20 @@ void OptimizerPred::Consume(const EnjoLib::VecD & data)
const EnjoLib::Str & idd = m_period.GetSymbolPeriodId();

//const OptiGoalType type = OptiGoalType::SHARPE;
//const OptiGoalType type = gcfgMan.cfgOpti->GetOptimizerGoalType();
//const OptiGoalType type = gcfgMan.cfgOpti->GetGoalType();
//const CorPtr<IOptiGoal> pgoal = OptiGoalFactory::Create(type);
//const IOptiGoal & igoal = *pgoal;

//LOGL << "Iter Data = " << data.Print() << Nl;
float goal = 0;

//CorPtr<IPosition> pos = IPosition::Create(m_period.GetSymbolName());
switch (gcfgMan.cfgOpti->GetOptimizerMethod())
switch (gcfgMan.cfgOpti->GetMethod())
{
case OptiMethod::OPTI_METHOD_BISECTION:
{
OptiSubjectPred osub(m_sym, m_period, m_fact, m_type, GetOptiFloat(), m_startEndFrame, data);

//Result<VecD> res = OptiMultiNelderMead().Run(*osub, 0.1, 10, 10);
Result<VecD> res = OptiMultiBinSearch().Run(osub, 3, 100); /// TODO: Make multithreaded
if (not res.isSuccess)
Expand All @@ -97,17 +97,17 @@ void OptimizerPred::Consume(const EnjoLib::VecD & data)
case OptiMethod::OPTI_METHOD_MONTECARLO:
case OptiMethod::OPTI_METHOD_GRID:
{

CorPtr<ISimulatorTS> psim = TSUtil().GetSimPred(m_period, data, m_startEndFrame);

goal = psim->GetScorePred();


if (IsGoalReached(goal))
{
CorPtr<IPredictor> fun = m_fact.Create(m_period, m_type);
fun->UpdateOptiVars(data); // Just needs a carrier TODO: Remove in future as is not abstract enough

//LOG << "Goal reached = " << goal << Nl;
OnGoalReached(fun.get());
if (gcfgMan.cfgOpti->OPTI_VERBOSE)
Expand Down Expand Up @@ -161,7 +161,7 @@ void OptimizerPred::PrintStats() const

void OptimizerPred::PrintStatsSummary() const
{
if (gcfgMan.cfgOpti->GetOptimizerMethod() == OptiMethod::OPTI_METHOD_MONTECARLO)
if (gcfgMan.cfgOpti->GetMethod() == OptiMethod::OPTI_METHOD_MONTECARLO)
{
PlotVariance();
}
Expand Down
4 changes: 2 additions & 2 deletions src/tsqsim-lib/src/OptimizerTS.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,15 +53,15 @@ void OptimizerTS::Consume(const EnjoLib::VecD & data)
const EnjoLib::Str & idd = m_period.GetSymbolPeriodId();

//const OptiGoalType type = OptiGoalType::SHARPE;
//const OptiGoalType type = gcfgMan.cfgOpti->GetOptimizerGoalType();
//const OptiGoalType type = gcfgMan.cfgOpti->GetGoalType();
//const CorPtr<IOptiGoal> pgoal = OptiGoalFactory::Create(type);
//const IOptiGoal & igoal = *pgoal;

//LOGL << "Data = " << data.Print() << Nl;
float goal = 0;

//CorPtr<IPosition> pos = IPosition::Create(m_period.GetSymbolName());
switch (gcfgMan.cfgOpti->GetOptimizerMethod())
switch (gcfgMan.cfgOpti->GetMethod())
{
case OptiMethod::OPTI_METHOD_BISECTION:
{
Expand Down
2 changes: 1 addition & 1 deletion src/tsqsim/src/App.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ void App::Run(const CLIResult & cliResultCmdLine) const
CorPtr<ISymbol> symbol = IMainTester::Create(symFact, &confTF2, &confSym)->GetSymbol(confSym.symbol, periods);
const IPeriod & per = symbol->GetPeriod(periods.at(0));

switch (confOpti.GetOptimizer())
switch (confOpti.GetOperationType())
{
case OptiType::OPTI_TYPE_FIND:
{
Expand Down