#include #include #include "../shared/MiscSupport.h" #include "../shared/GlobalConfigFile.h" #include "GridFiller.h" #include "TclObjHolder.h" class FakeDataProvider : public GridDataProvider { public: bool getValid(GridDataProviderContext *context) const { return true; } double getValue(std::string const &dataType, GridDataProviderContext *context, int offset, std::string &errorMsg) const { errorMsg.clear(); if (dataType == "error") // A data error. Like no trades during this period. // These are unavaidable. return GridInstance::invalid(); else if (dataType == "error_msg") { // A syntax error. Like current("hihg"). // We should print an error message. errorMsg = "This is an error."; return GridInstance::invalid(); } else if (dataType == "packed row") return context->getCalculationRowPacked() - offset; else if (dataType == "possible row") return context->getCalculationRowPossible(offset); else if (dataType == "min") return -std::numeric_limits< double >::max(); else if (dataType == "max") return std::numeric_limits< double >::max(); else if (dataType == "start") { time_t start; time_t end; context->getPrototype()->getCandleTimer() ->getTimes(context->getCalculationRowPossible(offset), start, end); return start; } else if (dataType == "end") { time_t start; time_t end; context->getPrototype()->getCandleTimer() ->getTimes(context->getCalculationRowPossible(offset), start, end); return end; } else return dataType.size(); } time_t restartAt(EpochCounter::Epoch epoch) const { return 0; } std::string debugDump() const { return "fake data"; } }; static GridPrototypeRef getTestPrototype() { GridPrototype *result = new GridPrototype(2, 11, SimpleCandleTimer::Round(), true); result->setColumnName("Counter", 0); result->setColumnName("Sum False", 1); result->setColumnName("Sum True", 2); result->setColumnName("Count", 3); result->setColumnName("Average False", 4); result->setColumnName("Average True", 5); result->setColumnName("Max False", 6); result->setColumnName("Max True", 7); result->setColumnName("Min False", 8); result->setColumnName("Min True", 9); result->setColumnName("Fib", 10); result->setFormula(0, "Counter", "0"); result->setFormula(1, "Counter", "ref(-1, \"Counter\") + 1"); result->setFormulaDown(0, "Sum False", "sum(-2, 0, \"Counter\", 0)"); result->setFormulaDown(0, "Sum True", "sum(-2, 0, \"Counter\", 1)"); result->setFormulaDown(0, "Count", "count(-2, 0, \"Counter\")"); result->setFormulaDown(0, "Average False", "average(-2, 0, \"Counter\", 0)"); result->setFormulaDown(0, "Average True", "average(-2, 0, \"Counter\", 1)"); result->setFormulaDown(0, "Max False", "max(-2, 0, \"Counter\", 0)"); result->setFormulaDown(0, "Max True", "max(-2, 0, \"Counter\", 1)"); result->setFormulaDown(0, "Min False", "min(-2, 0, \"Counter\", 0)"); result->setFormulaDown(0, "Min True", "min(-2, 0, \"Counter\", 1)"); result->setFormula(0, "Fib", "1"); result->setFormula(1, "Fib", "sum(-2, -1, \"Fib\", 1)"); return result; } void testNan(Tcl_Interp *interp, std::string toCompute) { std::cout<<"testNan(“"<getPrototype()->debugDump()<debugDump()<