initial commit
This commit is contained in:
		
						commit
						62fbec9b44
					
				
							
								
								
									
										40
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,40 @@ | ||||
| *.csv | ||||
| *.obj | ||||
| *.exe | ||||
| *.lst | ||||
| *.tmp | ||||
| 
 | ||||
| # tex | ||||
| *.aux | ||||
| *.lof | ||||
| *.log | ||||
| *.lot | ||||
| *.fls | ||||
| *.out | ||||
| *.toc | ||||
| *.fmt | ||||
| *.fot | ||||
| *.cb | ||||
| *.cb2 | ||||
| .*.lb | ||||
| *.pdf | ||||
| 
 | ||||
| ## Build tool auxiliary files: | ||||
| *.fdb_latexmk | ||||
| *.synctex | ||||
| *.synctex(busy) | ||||
| *.synctex.gz | ||||
| *.synctex.gz(busy) | ||||
| *.pdfsync | ||||
| 
 | ||||
| # hyperref | ||||
| *.brf | ||||
| 
 | ||||
| # listings | ||||
| *.lol | ||||
| 
 | ||||
| # makeidx | ||||
| *.idx | ||||
| *.ilg | ||||
| *.ind | ||||
| *.ist | ||||
							
								
								
									
										401
									
								
								argh.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										401
									
								
								argh.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,401 @@ | ||||
| #pragma once | ||||
| 
 | ||||
| #include <algorithm> | ||||
| #include <sstream> | ||||
| #include <string> | ||||
| #include <vector> | ||||
| #include <set> | ||||
| #include <map> | ||||
| #include <cassert> | ||||
| 
 | ||||
| namespace argh | ||||
| { | ||||
|    // Terminology:
 | ||||
|    // A command line is composed of 2 types of args:
 | ||||
|    // 1. Positional args, i.e. free standing values
 | ||||
|    // 2. Options: args beginning with '-'. We identify two kinds:
 | ||||
|    //    2.1: Flags: boolean options =>  (exist ? true : false)
 | ||||
|    //    2.2: Parameters: a name followed by a non-option value
 | ||||
| 
 | ||||
| #if !defined(__GNUC__) || (__GNUC__ >= 5) | ||||
|    using string_stream = std::istringstream; | ||||
| #else | ||||
|     // Until GCC 5, istringstream did not have a move constructor.
 | ||||
|     // stringstream_proxy is used instead, as a workaround.
 | ||||
|    class stringstream_proxy | ||||
|    { | ||||
|    public: | ||||
|       stringstream_proxy() = default; | ||||
| 
 | ||||
|       // Construct with a value.
 | ||||
|       stringstream_proxy(std::string const& value) : | ||||
|          stream_(value) | ||||
|       {} | ||||
| 
 | ||||
|       // Copy constructor.
 | ||||
|       stringstream_proxy(const stringstream_proxy& other) : | ||||
|          stream_(other.stream_.str()) | ||||
|       { | ||||
|          stream_.setstate(other.stream_.rdstate()); | ||||
|       } | ||||
| 
 | ||||
|       void setstate(std::ios_base::iostate state) { stream_.setstate(state); } | ||||
| 
 | ||||
|       // Stream out the value of the parameter.
 | ||||
|       // If the conversion was not possible, the stream will enter the fail state,
 | ||||
|       // and operator bool will return false.
 | ||||
|       template<typename T> | ||||
|       stringstream_proxy& operator >> (T& thing) | ||||
|       { | ||||
|          stream_ >> thing; | ||||
|          return *this; | ||||
|       } | ||||
| 
 | ||||
| 
 | ||||
|       // Get the string value.
 | ||||
|       std::string str() const { return stream_.str(); } | ||||
| 
 | ||||
|       std::stringbuf* rdbuf() const { return stream_.rdbuf(); } | ||||
| 
 | ||||
|       // Check the state of the stream. 
 | ||||
|       // False when the most recent stream operation failed
 | ||||
|       operator bool() const { return !!stream_; } | ||||
| 
 | ||||
|       ~stringstream_proxy() = default; | ||||
|    private: | ||||
|       std::istringstream stream_; | ||||
|    }; | ||||
|    using string_stream = stringstream_proxy; | ||||
| #endif | ||||
| 
 | ||||
|    class parser | ||||
|    { | ||||
|    public: | ||||
|       enum Mode { PREFER_FLAG_FOR_UNREG_OPTION = 1 << 0, | ||||
|                   PREFER_PARAM_FOR_UNREG_OPTION = 1 << 1, | ||||
|                   NO_SPLIT_ON_EQUALSIGN = 1 << 2, | ||||
|                   SINGLE_DASH_IS_MULTIFLAG = 1 << 3, | ||||
|                 }; | ||||
| 
 | ||||
|       parser() = default; | ||||
| 
 | ||||
|       parser(std::initializer_list<char const* const> pre_reg_names) | ||||
|       {  add_params(pre_reg_names); } | ||||
| 
 | ||||
|       parser(const char* const argv[], int mode = PREFER_FLAG_FOR_UNREG_OPTION) | ||||
|       {  parse(argv, mode); } | ||||
| 
 | ||||
|       parser(int argc, const char* const argv[], int mode = PREFER_FLAG_FOR_UNREG_OPTION) | ||||
|       {  parse(argc, argv, mode); } | ||||
| 
 | ||||
|       void add_param(std::string const& name); | ||||
|       void add_params(std::initializer_list<char const* const> init_list); | ||||
| 
 | ||||
|       void parse(const char* const argv[], int mode = PREFER_FLAG_FOR_UNREG_OPTION); | ||||
|       void parse(int argc, const char* const argv[], int mode = PREFER_FLAG_FOR_UNREG_OPTION); | ||||
| 
 | ||||
|       std::multiset<std::string>          const& flags()    const { return flags_;    } | ||||
|       std::map<std::string, std::string>  const& params()   const { return params_;   } | ||||
|       std::vector<std::string>            const& pos_args() const { return pos_args_; } | ||||
| 
 | ||||
|       // begin() and end() for using range-for over positional args.
 | ||||
|       std::vector<std::string>::const_iterator begin() const { return pos_args_.cbegin(); } | ||||
|       std::vector<std::string>::const_iterator end()   const { return pos_args_.cend();   } | ||||
| 
 | ||||
|       //////////////////////////////////////////////////////////////////////////
 | ||||
|       // Accessors
 | ||||
| 
 | ||||
|       // flag (boolean) accessors: return true if the flag appeared, otherwise false.
 | ||||
|       bool operator[](std::string const& name) const; | ||||
| 
 | ||||
|       // multiple flag (boolean) accessors: return true if at least one of the flag appeared, otherwise false.
 | ||||
|       bool operator[](std::initializer_list<char const* const> init_list) const; | ||||
| 
 | ||||
|       // returns positional arg string by order. Like argv[] but without the options
 | ||||
|       std::string const& operator[](size_t ind) const; | ||||
| 
 | ||||
|       // returns a std::istream that can be used to convert a positional arg to a typed value.
 | ||||
|       string_stream operator()(size_t ind) const; | ||||
| 
 | ||||
|       // same as above, but with a default value in case the arg is missing (index out of range).
 | ||||
|       template<typename T> | ||||
|       string_stream operator()(size_t ind, T&& def_val) const; | ||||
| 
 | ||||
|       // parameter accessors, give a name get an std::istream that can be used to convert to a typed value.
 | ||||
|       // call .str() on result to get as string
 | ||||
|       string_stream operator()(std::string const& name) const; | ||||
| 
 | ||||
|       // accessor for a parameter with multiple names, give a list of names, get an std::istream that can be used to convert to a typed value.
 | ||||
|       // call .str() on result to get as string
 | ||||
|       // returns the first value in the list to be found.
 | ||||
|       string_stream operator()(std::initializer_list<char const* const> init_list) const; | ||||
| 
 | ||||
|       // same as above, but with a default value in case the param was missing.
 | ||||
|       // Non-string def_val types must have an operator<<() (output stream operator)
 | ||||
|       // If T only has an input stream operator, pass the string version of the type as in "3" instead of 3.
 | ||||
|       template<typename T> | ||||
|       string_stream operator()(std::string const& name, T&& def_val) const; | ||||
| 
 | ||||
|       // same as above but for a list of names. returns the first value to be found.
 | ||||
|       template<typename T> | ||||
|       string_stream operator()(std::initializer_list<char const* const> init_list, T&& def_val) const; | ||||
| 
 | ||||
|    private: | ||||
|       string_stream bad_stream() const; | ||||
|       std::string trim_leading_dashes(std::string const& name) const; | ||||
|       bool is_number(std::string const& arg) const; | ||||
|       bool is_option(std::string const& arg) const; | ||||
|       bool got_flag(std::string const& name) const; | ||||
| 
 | ||||
|    private: | ||||
|       std::vector<std::string> args_; | ||||
|       std::map<std::string, std::string> params_; | ||||
|       std::vector<std::string> pos_args_; | ||||
|       std::multiset<std::string> flags_; | ||||
|       std::set<std::string> registeredParams_; | ||||
|       std::string empty_; | ||||
|    }; | ||||
| 
 | ||||
| 
 | ||||
|    //////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|    inline void parser::parse(const char * const argv[], int mode) | ||||
|    { | ||||
|       int argc = 0; | ||||
|       for (auto argvp = argv; *argvp; ++argc, ++argvp); | ||||
|       parse(argc, argv, mode); | ||||
|    } | ||||
| 
 | ||||
|    //////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|    inline void parser::parse(int argc, const char* const argv[], int mode /*= PREFER_FLAG_FOR_UNREG_OPTION*/) | ||||
|    { | ||||
|       // convert to strings
 | ||||
|       args_.resize(argc); | ||||
|       std::transform(argv, argv + argc, args_.begin(), [](const char* const arg) { return arg;  }); | ||||
| 
 | ||||
|       // parse line
 | ||||
|       for (auto i = 0u; i < args_.size(); ++i) | ||||
|       { | ||||
|          if (!is_option(args_[i])) | ||||
|          { | ||||
|             pos_args_.emplace_back(args_[i]); | ||||
|             continue; | ||||
|          } | ||||
| 
 | ||||
|          auto name = trim_leading_dashes(args_[i]); | ||||
| 
 | ||||
|          if (!(mode & NO_SPLIT_ON_EQUALSIGN)) | ||||
|          { | ||||
|             auto equalPos = name.find('='); | ||||
|             if (equalPos != std::string::npos) | ||||
|             { | ||||
|                params_.insert({ name.substr(0, equalPos), name.substr(equalPos + 1) }); | ||||
|                continue; | ||||
|             } | ||||
|          } | ||||
| 
 | ||||
|          // if the option is unregistered and should be a multi-flag
 | ||||
|          if (1 == (args_[i].size() - name.size()) &&                  // single dash
 | ||||
|             argh::parser::SINGLE_DASH_IS_MULTIFLAG & mode &&         // multi-flag mode
 | ||||
|             registeredParams_.find(name) == registeredParams_.end()) // unregistered
 | ||||
|          { | ||||
|             for (auto const& c : name) | ||||
|             { | ||||
|                flags_.emplace(std::string{ c }); | ||||
|             } | ||||
|          } | ||||
| 
 | ||||
|          // any potential option will get as its value the next arg, unless that arg is an option too
 | ||||
|          // in that case it will be determined a flag.
 | ||||
|          if (i == args_.size() - 1 || is_option(args_[i + 1])) | ||||
|          { | ||||
|             flags_.emplace(name); | ||||
|             continue; | ||||
|          } | ||||
| 
 | ||||
|          // if 'name' is a pre-registered option, then the next arg cannot be a free parameter to it is skipped
 | ||||
|          // otherwise we have 2 modes:
 | ||||
|          // PREFER_FLAG_FOR_UNREG_OPTION: a non-registered 'name' is determined a flag. 
 | ||||
|          //                               The following value (the next arg) will be a free parameter.
 | ||||
|          //
 | ||||
|          // PREFER_PARAM_FOR_UNREG_OPTION: a non-registered 'name' is determined a parameter, the next arg
 | ||||
|          //                                will be the value of that option.
 | ||||
| 
 | ||||
|          if (registeredParams_.find(name) != registeredParams_.end() || | ||||
|             argh::parser::PREFER_PARAM_FOR_UNREG_OPTION & mode) | ||||
|          { | ||||
|             params_.insert({ name, args_[i + 1] }); | ||||
|             ++i; // skip next value, it is not a free parameter
 | ||||
|             continue; | ||||
|          } | ||||
| 
 | ||||
|          if (argh::parser::PREFER_FLAG_FOR_UNREG_OPTION & mode) | ||||
|             flags_.emplace(name); | ||||
|       }; | ||||
|    } | ||||
| 
 | ||||
|    //////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|    inline string_stream parser::bad_stream() const | ||||
|    { | ||||
|       string_stream bad; | ||||
|       bad.setstate(std::ios_base::failbit); | ||||
|       return bad; | ||||
|    } | ||||
| 
 | ||||
|    //////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|    inline bool parser::is_number(std::string const& arg) const | ||||
|    { | ||||
|       // inefficient but simple way to determine if a string is a number (which can start with a '-')
 | ||||
|       std::istringstream istr(arg); | ||||
|       double number; | ||||
|       istr >> number; | ||||
|       return !(istr.fail() || istr.bad()); | ||||
|    } | ||||
| 
 | ||||
|    //////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|    inline bool parser::is_option(std::string const& arg) const | ||||
|    { | ||||
|       assert(0 != arg.size()); | ||||
|       if (is_number(arg)) | ||||
|          return false; | ||||
|       return '-' == arg[0]; | ||||
|    } | ||||
| 
 | ||||
|    //////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|    inline std::string parser::trim_leading_dashes(std::string const& name) const | ||||
|    { | ||||
|       auto pos = name.find_first_not_of('-'); | ||||
|       return std::string::npos != pos ? name.substr(pos) : name; | ||||
|    } | ||||
| 
 | ||||
|    //////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|    inline bool argh::parser::got_flag(std::string const& name) const | ||||
|    { | ||||
|       return flags_.end() != flags_.find(trim_leading_dashes(name)); | ||||
|    } | ||||
| 
 | ||||
|    //////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|    inline bool parser::operator[](std::string const& name) const | ||||
|    { | ||||
|       return got_flag(name); | ||||
|    } | ||||
| 
 | ||||
|    //////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|    inline bool parser::operator[](std::initializer_list<char const* const> init_list) const | ||||
|    { | ||||
|       return std::any_of(init_list.begin(), init_list.end(), [&](char const* const name) { return got_flag(name); }); | ||||
|    } | ||||
| 
 | ||||
|    //////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|    inline std::string const& parser::operator[](size_t ind) const | ||||
|    { | ||||
|       if (ind < pos_args_.size()) | ||||
|          return pos_args_[ind]; | ||||
|       return empty_; | ||||
|    } | ||||
| 
 | ||||
|    //////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|    inline string_stream parser::operator()(std::string const& name) const | ||||
|    { | ||||
|       auto optIt = params_.find(trim_leading_dashes(name)); | ||||
|       if (params_.end() != optIt) | ||||
|          return string_stream(optIt->second); | ||||
|       return bad_stream(); | ||||
|    } | ||||
| 
 | ||||
|    //////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|    inline string_stream parser::operator()(std::initializer_list<char const* const> init_list) const | ||||
|    { | ||||
|       for (auto& name : init_list) | ||||
|       { | ||||
|          auto optIt = params_.find(trim_leading_dashes(name)); | ||||
|          if (params_.end() != optIt) | ||||
|             return string_stream(optIt->second); | ||||
|       } | ||||
|       return bad_stream(); | ||||
|    } | ||||
| 
 | ||||
|    //////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|    template<typename T> | ||||
|    string_stream parser::operator()(std::string const& name, T&& def_val) const | ||||
|    { | ||||
|       auto optIt = params_.find(trim_leading_dashes(name)); | ||||
|       if (params_.end() != optIt) | ||||
|          return string_stream(optIt->second); | ||||
| 
 | ||||
|       std::ostringstream ostr; | ||||
|       ostr << def_val; | ||||
|       return string_stream(ostr.str()); // use default
 | ||||
|    } | ||||
| 
 | ||||
|    //////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|    // same as above but for a list of names. returns the first value to be found.
 | ||||
|    template<typename T> | ||||
|    string_stream parser::operator()(std::initializer_list<char const* const> init_list, T&& def_val) const | ||||
|    { | ||||
|       for (auto& name : init_list) | ||||
|       { | ||||
|          auto optIt = params_.find(trim_leading_dashes(name)); | ||||
|          if (params_.end() != optIt) | ||||
|             return string_stream(optIt->second); | ||||
|       }       | ||||
|       std::ostringstream ostr; | ||||
|       ostr << def_val; | ||||
|       return string_stream(ostr.str()); // use default
 | ||||
|    } | ||||
| 
 | ||||
|    //////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|    inline string_stream parser::operator()(size_t ind) const | ||||
|    { | ||||
|       if (pos_args_.size() <= ind) | ||||
|          return bad_stream(); | ||||
| 
 | ||||
|       return string_stream(pos_args_[ind]); | ||||
|    } | ||||
| 
 | ||||
|    //////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|    template<typename T> | ||||
|    string_stream parser::operator()(size_t ind, T&& def_val) const | ||||
|    { | ||||
|       if (pos_args_.size() <= ind) | ||||
|       { | ||||
|          std::ostringstream ostr; | ||||
|          ostr << def_val; | ||||
|          return string_stream(ostr.str()); | ||||
|       } | ||||
| 
 | ||||
|       return string_stream(pos_args_[ind]); | ||||
|    } | ||||
| 
 | ||||
|    //////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|    inline void parser::add_param(std::string const& name) | ||||
|    { | ||||
|       registeredParams_.insert(trim_leading_dashes(name)); | ||||
|    } | ||||
| 
 | ||||
|    //////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|    inline void parser::add_params(std::initializer_list<char const* const> init_list) | ||||
|    { | ||||
|       for (auto& name : init_list) | ||||
|          registeredParams_.insert(trim_leading_dashes(name)); | ||||
|    } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										684
									
								
								data/bitcoin.dat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										684
									
								
								data/bitcoin.dat
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,684 @@ | ||||
| 8752.05 | ||||
| 8604.21 | ||||
| 8552.87 | ||||
| 8287.12 | ||||
| 8429.06 | ||||
| 8460.75 | ||||
| 8658.94 | ||||
| 8670.89 | ||||
| 8936.08 | ||||
| 8875.21 | ||||
| 8761.93 | ||||
| 9053.81 | ||||
| 9046.36 | ||||
| 9253.07 | ||||
| 9363.98 | ||||
| 9205.57 | ||||
| 9280.09 | ||||
| 9185.08 | ||||
| 9378.03 | ||||
| 9294.35 | ||||
| 9259.5 | ||||
| 9156.88 | ||||
| 9112.25 | ||||
| 9215.67 | ||||
| 9091.97 | ||||
| 8958.45 | ||||
| 9056.42 | ||||
| 9188.81 | ||||
| 9073.29 | ||||
| 9206.41 | ||||
| 9242.42 | ||||
| 9192.92 | ||||
| 9083.52 | ||||
| 8820.61 | ||||
| 8766.82 | ||||
| 8740.11 | ||||
| 8703.82 | ||||
| 8707.45 | ||||
| 8646.29 | ||||
| 8383.08 | ||||
| 8408.7 | ||||
| 8452.31 | ||||
| 8311.77 | ||||
| 8200.97 | ||||
| 8089.24 | ||||
| 8094.67 | ||||
| 8391.64 | ||||
| 8168.78 | ||||
| 8253.91 | ||||
| 8091.14 | ||||
| 8040.8 | ||||
| 8132.57 | ||||
| 8271.91 | ||||
| 8185.84 | ||||
| 8083.47 | ||||
| 7984.02 | ||||
| 7809.15 | ||||
| 7876.02 | ||||
| 7681.9 | ||||
| 7542.14 | ||||
| 7743.17 | ||||
| 7650.2 | ||||
| 7351.05 | ||||
| 7353 | ||||
| 7251.96 | ||||
| 7063.49 | ||||
| 6914.37 | ||||
| 6583.56 | ||||
| 7243.79 | ||||
| 7151.55 | ||||
| 6845.35 | ||||
| 6914.92 | ||||
| 6996.93 | ||||
| 6462.69 | ||||
| 6380.43 | ||||
| 6350.54 | ||||
| 6083.38 | ||||
| 6512.61 | ||||
| 6254.18 | ||||
| 5947.4 | ||||
| 6100.89 | ||||
| 6677.37 | ||||
| 6417.44 | ||||
| 6433.73 | ||||
| 6720.37 | ||||
| 7137.72 | ||||
| 7158.31 | ||||
| 7288.55 | ||||
| 7101.07 | ||||
| 6954.57 | ||||
| 7163.84 | ||||
| 7482.86 | ||||
| 7495.56 | ||||
| 7755.07 | ||||
| 7645.33 | ||||
| 7692.8 | ||||
| 7634.2 | ||||
| 7623.8 | ||||
| 7364.76 | ||||
| 7275.74 | ||||
| 7492.05 | ||||
| 7448.41 | ||||
| 7466.59 | ||||
| 7714.34 | ||||
| 7665.49 | ||||
| 7971.36 | ||||
| 8215.22 | ||||
| 8265.65 | ||||
| 8402.1 | ||||
| 8327.76 | ||||
| 8238.81 | ||||
| 8190.94 | ||||
| 7999.72 | ||||
| 8323.91 | ||||
| 8255.46 | ||||
| 8135.75 | ||||
| 8152.92 | ||||
| 8096.21 | ||||
| 7866.53 | ||||
| 7548.1 | ||||
| 7738.78 | ||||
| 7878.67 | ||||
| 8034.39 | ||||
| 8001.35 | ||||
| 8156.37 | ||||
| 8017.2 | ||||
| 8040.44 | ||||
| 8316.21 | ||||
| 8235.25 | ||||
| 8341.85 | ||||
| 8549.46 | ||||
| 8483.74 | ||||
| 8588.01 | ||||
| 8469.15 | ||||
| 8434.02 | ||||
| 8244.13 | ||||
| 8302.5 | ||||
| 8186.21 | ||||
| 8229.89 | ||||
| 8440.2 | ||||
| 8297.66 | ||||
| 8208.28 | ||||
| 8225.47 | ||||
| 8248.8 | ||||
| 7931.53 | ||||
| 7974.82 | ||||
| 8094.5 | ||||
| 8078.89 | ||||
| 7847.66 | ||||
| 7877.85 | ||||
| 7963.99 | ||||
| 8011.26 | ||||
| 8091.78 | ||||
| 8254.5 | ||||
| 8240.15 | ||||
| 8257.6 | ||||
| 8214.96 | ||||
| 8267.04 | ||||
| 8407 | ||||
| 8314.32 | ||||
| 8370.81 | ||||
| 8630.7 | ||||
| 8629 | ||||
| 8639.75 | ||||
| 8555.95 | ||||
| 8555.58 | ||||
| 8581.48 | ||||
| 8694.52 | ||||
| 8887.54 | ||||
| 8820.21 | ||||
| 8934.55 | ||||
| 8918.78 | ||||
| 8829.27 | ||||
| 8874 | ||||
| 9058.8 | ||||
| 8962.08 | ||||
| 8678.04 | ||||
| 8633.4 | ||||
| 8567.92 | ||||
| 8658.55 | ||||
| 8638.51 | ||||
| 8758.23 | ||||
| 8649.54 | ||||
| 8352.93 | ||||
| 8310.39 | ||||
| 8449.7 | ||||
| 8335.38 | ||||
| 8445.88 | ||||
| 8173.74 | ||||
| 8269.13 | ||||
| 8585.02 | ||||
| 8550.97 | ||||
| 8410.99 | ||||
| 8270.12 | ||||
| 8254.73 | ||||
| 8054.9 | ||||
| 7995.72 | ||||
| 8131.24 | ||||
| 8075.99 | ||||
| 7922.86 | ||||
| 7920.85 | ||||
| 8105.58 | ||||
| 8024.6 | ||||
| 8194.66 | ||||
| 8276.27 | ||||
| 8280.88 | ||||
| 8441.18 | ||||
| 8421.3 | ||||
| 8292.31 | ||||
| 8185.63 | ||||
| 8341.25 | ||||
| 8290.72 | ||||
| 8244.16 | ||||
| 8312.85 | ||||
| 8303.26 | ||||
| 8073.08 | ||||
| 8221 | ||||
| 8332.46 | ||||
| 8511.7 | ||||
| 8479.71 | ||||
| 8488.8 | ||||
| 8379.01 | ||||
| 8421.21 | ||||
| 8471.11 | ||||
| 8766.42 | ||||
| 8804.78 | ||||
| 8827.85 | ||||
| 8658.38 | ||||
| 8758.65 | ||||
| 8678.45 | ||||
| 8549.87 | ||||
| 8646.98 | ||||
| 8699.86 | ||||
| 8763.38 | ||||
| 8662.27 | ||||
| 8780.44 | ||||
| 8853.86 | ||||
| 8830.13 | ||||
| 8877.24 | ||||
| 8887.78 | ||||
| 8915.26 | ||||
| 8753.82 | ||||
| 8709.14 | ||||
| 8765.63 | ||||
| 8578.13 | ||||
| 8613.21 | ||||
| 8716.28 | ||||
| 8666.26 | ||||
| 8530.21 | ||||
| 8450.37 | ||||
| 8505.32 | ||||
| 8520.16 | ||||
| 8581.28 | ||||
| 8597.54 | ||||
| 8621.56 | ||||
| 8507.98 | ||||
| 8552.93 | ||||
| 8638.78 | ||||
| 8617.23 | ||||
| 8614.19 | ||||
| 8714.73 | ||||
| 8564.5 | ||||
| 8539.51 | ||||
| 8515.59 | ||||
| 8587.5 | ||||
| 8648.52 | ||||
| 8705.14 | ||||
| 8689.98 | ||||
| 8804.28 | ||||
| 8835.9 | ||||
| 8794.46 | ||||
| 8888.73 | ||||
| 8870.09 | ||||
| 8798.3 | ||||
| 8767.3 | ||||
| 8944.43 | ||||
| 9177.53 | ||||
| 9241.31 | ||||
| 9175.41 | ||||
| 9331.88 | ||||
| 9278.07 | ||||
| 9301.83 | ||||
| 9290.59 | ||||
| 9230.77 | ||||
| 9292.33 | ||||
| 9282.69 | ||||
| 9437.19 | ||||
| 9476.28 | ||||
| 9370.49 | ||||
| 9397.7 | ||||
| 9627.51 | ||||
| 9666.09 | ||||
| 9736.44 | ||||
| 9703.04 | ||||
| 9690.34 | ||||
| 9828.38 | ||||
| 9873.79 | ||||
| 9644.96 | ||||
| 9674.48 | ||||
| 9605.89 | ||||
| 9733.25 | ||||
| 9677.06 | ||||
| 9871.39 | ||||
| 9841.61 | ||||
| 9909.23 | ||||
| 10045.73 | ||||
| 10051.35 | ||||
| 10109.76 | ||||
| 10097.32 | ||||
| 9883.3 | ||||
| 10074.31 | ||||
| 10066.99 | ||||
| 10226.63 | ||||
| 10274.76 | ||||
| 10185.64 | ||||
| 10110.56 | ||||
| 9997.74 | ||||
| 10094.74 | ||||
| 9891.11 | ||||
| 9792.43 | ||||
| 9963.97 | ||||
| 9880.83 | ||||
| 9812.9 | ||||
| 9816.47 | ||||
| 9867.26 | ||||
| 9844.57 | ||||
| 10041.89 | ||||
| 10050.03 | ||||
| 10092.26 | ||||
| 10088.73 | ||||
| 9962.58 | ||||
| 10038.14 | ||||
| 9991.9 | ||||
| 10083.78 | ||||
| 10211.94 | ||||
| 10179.32 | ||||
| 10182.47 | ||||
| 10328.81 | ||||
| 10374.78 | ||||
| 10468.59 | ||||
| 10575.49 | ||||
| 10552.41 | ||||
| 10780.68 | ||||
| 10740.69 | ||||
| 10813.46 | ||||
| 10675.14 | ||||
| 10664.69 | ||||
| 10733.66 | ||||
| 10833 | ||||
| 10713.73 | ||||
| 10634.19 | ||||
| 10745.17 | ||||
| 10817.43 | ||||
| 10804.34 | ||||
| 10798.32 | ||||
| 10728.17 | ||||
| 10780.01 | ||||
| 10845.14 | ||||
| 10953.88 | ||||
| 11083.25 | ||||
| 11121.37 | ||||
| 11221.73 | ||||
| 11166.86 | ||||
| 10812.12 | ||||
| 10929.64 | ||||
| 10494.42 | ||||
| 10454.69 | ||||
| 10612.05 | ||||
| 10325.4 | ||||
| 10161.7 | ||||
| 10518.07 | ||||
| 10613.59 | ||||
| 10585.11 | ||||
| 10744.08 | ||||
| 10781.91 | ||||
| 10661.38 | ||||
| 10574.05 | ||||
| 10715.49 | ||||
| 10759.62 | ||||
| 10846.77 | ||||
| 10788.71 | ||||
| 10763.23 | ||||
| 10586.93 | ||||
| 10395.91 | ||||
| 10441.32 | ||||
| 10632.99 | ||||
| 10588.03 | ||||
| 10536.67 | ||||
| 10535.45 | ||||
| 10462.5 | ||||
| 10482.68 | ||||
| 10821.99 | ||||
| 10813.32 | ||||
| 10934.34 | ||||
| 10906.89 | ||||
| 10941.53 | ||||
| 10894.32 | ||||
| 10940.84 | ||||
| 10943.11 | ||||
| 11177.16 | ||||
| 11083.52 | ||||
| 10952.6 | ||||
| 11116.87 | ||||
| 11148.11 | ||||
| 11208.14 | ||||
| 11078.64 | ||||
| 11081.1 | ||||
| 11161.41 | ||||
| 11426.74 | ||||
| 11483.32 | ||||
| 11363.04 | ||||
| 11409.91 | ||||
| 11464.18 | ||||
| 11451.31 | ||||
| 11566.08 | ||||
| 11563.86 | ||||
| 11362.45 | ||||
| 11350.49 | ||||
| 11405.37 | ||||
| 11424.57 | ||||
| 11447.76 | ||||
| 11549.22 | ||||
| 11523.06 | ||||
| 11523.39 | ||||
| 11590.57 | ||||
| 11686.56 | ||||
| 11670 | ||||
| 11666.96 | ||||
| 11714.64 | ||||
| 11711.63 | ||||
| 11423.48 | ||||
| 11199.65 | ||||
| 11074.69 | ||||
| 11133.94 | ||||
| 11024.15 | ||||
| 10896.45 | ||||
| 10765.74 | ||||
| 10853.54 | ||||
| 11090.87 | ||||
| 11120.95 | ||||
| 11034.03 | ||||
| 11180.56 | ||||
| 10976.51 | ||||
| 10956.55 | ||||
| 11048.38 | ||||
| 10744.16 | ||||
| 10680.16 | ||||
| 10588.86 | ||||
| 10479.72 | ||||
| 10535.39 | ||||
| 10548.2 | ||||
| 10406.04 | ||||
| 10367.51 | ||||
| 10291.12 | ||||
| 10450.65 | ||||
| 10454.51 | ||||
| 10491.84 | ||||
| 10637.42 | ||||
| 10743.94 | ||||
| 10722.48 | ||||
| 10739.95 | ||||
| 10798.28 | ||||
| 10859.7 | ||||
| 10647.46 | ||||
| 10470.63 | ||||
| 10339.43 | ||||
| 10148.67 | ||||
| 10237.34 | ||||
| 9878.72 | ||||
| 9866.23 | ||||
| 9901.33 | ||||
| 10026.6 | ||||
| 9949.93 | ||||
| 9832.9 | ||||
| 9915.92 | ||||
| 10048.96 | ||||
| 10090.35 | ||||
| 9912.17 | ||||
| 9956.74 | ||||
| 9833.12 | ||||
| 9688.68 | ||||
| 9731.87 | ||||
| 9737.82 | ||||
| 9811.28 | ||||
| 9840.16 | ||||
| 9864.36 | ||||
| 9827.55 | ||||
| 9885.47 | ||||
| 9917.99 | ||||
| 10120.54 | ||||
| 10015.45 | ||||
| 10217.36 | ||||
| 10205.48 | ||||
| 10201.47 | ||||
| 10317.24 | ||||
| 10329.65 | ||||
| 10084.15 | ||||
| 10117.78 | ||||
| 10207.27 | ||||
| 10044.21 | ||||
| 9993.87 | ||||
| 9925.09 | ||||
| 10139.96 | ||||
| 10161.28 | ||||
| 10325.76 | ||||
| 10343.58 | ||||
| 10438.23 | ||||
| 10413.34 | ||||
| 10404.42 | ||||
| 10457.13 | ||||
| 10189.18 | ||||
| 10131.6 | ||||
| 10033.41 | ||||
| 10057.04 | ||||
| 9743.23 | ||||
| 9809.57 | ||||
| 9823.97 | ||||
| 9670.52 | ||||
| 9797.07 | ||||
| 9757.2 | ||||
| 9786.37 | ||||
| 9642.93 | ||||
| 9586.52 | ||||
| 9580.38 | ||||
| 9401.32 | ||||
| 9499.17 | ||||
| 9619.66 | ||||
| 9678.38 | ||||
| 9633.55 | ||||
| 9758.75 | ||||
| 9626.79 | ||||
| 9597.24 | ||||
| 9717.92 | ||||
| 9723.05 | ||||
| 9777.93 | ||||
| 9720.4 | ||||
| 9618.85 | ||||
| 9592.86 | ||||
| 9652.99 | ||||
| 9656.93 | ||||
| 9523.2 | ||||
| 9477.75 | ||||
| 9405.39 | ||||
| 9415.63 | ||||
| 9404.22 | ||||
| 9367.41 | ||||
| 9442.93 | ||||
| 9483.93 | ||||
| 9588.2 | ||||
| 9588.37 | ||||
| 9670.98 | ||||
| 9570.14 | ||||
| 9579.05 | ||||
| 9730.25 | ||||
| 9733.22 | ||||
| 9628.67 | ||||
| 9677.86 | ||||
| 9637.93 | ||||
| 9432.63 | ||||
| 9488.19 | ||||
| 9446.81 | ||||
| 9475.47 | ||||
| 9683.39 | ||||
| 9740.81 | ||||
| 9837 | ||||
| 10118.21 | ||||
| 10213.28 | ||||
| 10242.22 | ||||
| 10201.18 | ||||
| 10196.02 | ||||
| 10222.71 | ||||
| 10242.84 | ||||
| 10259.75 | ||||
| 10366.35 | ||||
| 10352.96 | ||||
| 10308.15 | ||||
| 10363.58 | ||||
| 10193.72 | ||||
| 10182.28 | ||||
| 10270.72 | ||||
| 10311.09 | ||||
| 10315.32 | ||||
| 10321.23 | ||||
| 10627.83 | ||||
| 10696.2 | ||||
| 10725.32 | ||||
| 10645.69 | ||||
| 10683.84 | ||||
| 10670.66 | ||||
| 10840.36 | ||||
| 10678.5 | ||||
| 10575.87 | ||||
| 10623.79 | ||||
| 10574.43 | ||||
| 10611.58 | ||||
| 10678.99 | ||||
| 10678.91 | ||||
| 10744.57 | ||||
| 10738.61 | ||||
| 10628.72 | ||||
| 10647.22 | ||||
| 10692.18 | ||||
| 10681.68 | ||||
| 10900.49 | ||||
| 10899.26 | ||||
| 10940.25 | ||||
| 10798.44 | ||||
| 10743.53 | ||||
| 10517.09 | ||||
| 10594.36 | ||||
| 10575.89 | ||||
| 10558.32 | ||||
| 10389.15 | ||||
| 10480.8 | ||||
| 10510.08 | ||||
| 10500.77 | ||||
| 10407.88 | ||||
| 10446.83 | ||||
| 10489.03 | ||||
| 10531.77 | ||||
| 10649.08 | ||||
| 10557.65 | ||||
| 10425.92 | ||||
| 10309.81 | ||||
| 10392.13 | ||||
| 10370.45 | ||||
| 10320.69 | ||||
| 10350.66 | ||||
| 10428.83 | ||||
| 10416.56 | ||||
| 10384.52 | ||||
| 10522.26 | ||||
| 10632.81 | ||||
| 10600.36 | ||||
| 10715.48 | ||||
| 10662.01 | ||||
| 10626.55 | ||||
| 10766.27 | ||||
| 10779.06 | ||||
| 10712.27 | ||||
| 10737.63 | ||||
| 10852.77 | ||||
| 10942.8 | ||||
| 10904.24 | ||||
| 11035.56 | ||||
| 10924.01 | ||||
| 10964.68 | ||||
| 10911.55 | ||||
| 11029.42 | ||||
| 11141.86 | ||||
| 11038.72 | ||||
| 11100.17 | ||||
| 11000.17 | ||||
| 10982.89 | ||||
| 11096.05 | ||||
| 11081.52 | ||||
| 11100.3 | ||||
| 10890.96 | ||||
| 10916.43 | ||||
| 10903.09 | ||||
| 11008.12 | ||||
| 10966.65 | ||||
| 10796.32 | ||||
| 10836.1 | ||||
| 10852.02 | ||||
| 10875.33 | ||||
| 10920.94 | ||||
| 10901.85 | ||||
| 11055.84 | ||||
| 11015.57 | ||||
| 11099.19 | ||||
| 11017.6 | ||||
| 11077.99 | ||||
| 11209.47 | ||||
| 11301.59 | ||||
| 11305.12 | ||||
| 11359.01 | ||||
| 11318.66 | ||||
| 11330.5 | ||||
| 11297.21 | ||||
| 11335.16 | ||||
| 11313.99 | ||||
| 11306.96 | ||||
| 11267.59 | ||||
							
								
								
									
										1000
									
								
								data/cdr.dat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1000
									
								
								data/cdr.dat
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										365
									
								
								data/dogecoin.dat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										365
									
								
								data/dogecoin.dat
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,365 @@ | ||||
| 0.005301 | ||||
| 0.000205 | ||||
| 0.000206 | ||||
| 0.000210 | ||||
| 0.000209 | ||||
| 0.000208 | ||||
| 0.000211 | ||||
| 0.000204 | ||||
| 0.000211 | ||||
| 0.000229 | ||||
| 0.000247 | ||||
| 0.000238 | ||||
| 0.000243 | ||||
| 0.000235 | ||||
| 0.000223 | ||||
| 0.000219 | ||||
| 0.000235 | ||||
| 0.000236 | ||||
| 0.000246 | ||||
| 0.000243 | ||||
| 0.000242 | ||||
| 0.000264 | ||||
| 0.000298 | ||||
| 0.000272 | ||||
| 0.000254 | ||||
| 0.000273 | ||||
| 0.000272 | ||||
| 0.000304 | ||||
| 0.000328 | ||||
| 0.000335 | ||||
| 0.000489 | ||||
| 0.000427 | ||||
| 0.000432 | ||||
| 0.000442 | ||||
| 0.000450 | ||||
| 0.000398 | ||||
| 0.000432 | ||||
| 0.000381 | ||||
| 0.000400 | ||||
| 0.000390 | ||||
| 0.000414 | ||||
| 0.000425 | ||||
| 0.000426 | ||||
| 0.000418 | ||||
| 0.000454 | ||||
| 0.000459 | ||||
| 0.000459 | ||||
| 0.000448 | ||||
| 0.000443 | ||||
| 0.000451 | ||||
| 0.000464 | ||||
| 0.000522 | ||||
| 0.000515 | ||||
| 0.000527 | ||||
| 0.000544 | ||||
| 0.000632 | ||||
| 0.000678 | ||||
| 0.000734 | ||||
| 0.000746 | ||||
| 0.000686 | ||||
| 0.000610 | ||||
| 0.000678 | ||||
| 0.000744 | ||||
| 0.000840 | ||||
| 0.001169 | ||||
| 0.001305 | ||||
| 0.001521 | ||||
| 0.001239 | ||||
| 0.001239 | ||||
| 0.001212 | ||||
| 0.001183 | ||||
| 0.001184 | ||||
| 0.001274 | ||||
| 0.001128 | ||||
| 0.001059 | ||||
| 0.001318 | ||||
| 0.001508 | ||||
| 0.001518 | ||||
| 0.001900 | ||||
| 0.003062 | ||||
| 0.003405 | ||||
| 0.003562 | ||||
| 0.003659 | ||||
| 0.002994 | ||||
| 0.002424 | ||||
| 0.002541 | ||||
| 0.002579 | ||||
| 0.002732 | ||||
| 0.002623 | ||||
| 0.002657 | ||||
| 0.002867 | ||||
| 0.003026 | ||||
| 0.003251 | ||||
| 0.003179 | ||||
| 0.003873 | ||||
| 0.003741 | ||||
| 0.003302 | ||||
| 0.003575 | ||||
| 0.003453 | ||||
| 0.003313 | ||||
| 0.003601 | ||||
| 0.003253 | ||||
| 0.003313 | ||||
| 0.003092 | ||||
| 0.003043 | ||||
| 0.003163 | ||||
| 0.003322 | ||||
| 0.003230 | ||||
| 0.003141 | ||||
| 0.003218 | ||||
| 0.003125 | ||||
| 0.003104 | ||||
| 0.003143 | ||||
| 0.003135 | ||||
| 0.002961 | ||||
| 0.002750 | ||||
| 0.002623 | ||||
| 0.002793 | ||||
| 0.002656 | ||||
| 0.002602 | ||||
| 0.002645 | ||||
| 0.002481 | ||||
| 0.002533 | ||||
| 0.002518 | ||||
| 0.002714 | ||||
| 0.002636 | ||||
| 0.002397 | ||||
| 0.002440 | ||||
| 0.002330 | ||||
| 0.001952 | ||||
| 0.001779 | ||||
| 0.001938 | ||||
| 0.001823 | ||||
| 0.001681 | ||||
| 0.001484 | ||||
| 0.001307 | ||||
| 0.001520 | ||||
| 0.001864 | ||||
| 0.001689 | ||||
| 0.001935 | ||||
| 0.001936 | ||||
| 0.002095 | ||||
| 0.001972 | ||||
| 0.001980 | ||||
| 0.001773 | ||||
| 0.001810 | ||||
| 0.001856 | ||||
| 0.001782 | ||||
| 0.001768 | ||||
| 0.001719 | ||||
| 0.001718 | ||||
| 0.001792 | ||||
| 0.001788 | ||||
| 0.001795 | ||||
| 0.001820 | ||||
| 0.002087 | ||||
| 0.001909 | ||||
| 0.001949 | ||||
| 0.001961 | ||||
| 0.001937 | ||||
| 0.001896 | ||||
| 0.001880 | ||||
| 0.001856 | ||||
| 0.001807 | ||||
| 0.001762 | ||||
| 0.001738 | ||||
| 0.001774 | ||||
| 0.001710 | ||||
| 0.001678 | ||||
| 0.001678 | ||||
| 0.001707 | ||||
| 0.001712 | ||||
| 0.001716 | ||||
| 0.001732 | ||||
| 0.001816 | ||||
| 0.001790 | ||||
| 0.001778 | ||||
| 0.001760 | ||||
| 0.001825 | ||||
| 0.001867 | ||||
| 0.002105 | ||||
| 0.002064 | ||||
| 0.002543 | ||||
| 0.002226 | ||||
| 0.002153 | ||||
| 0.001786 | ||||
| 0.001908 | ||||
| 0.002019 | ||||
| 0.001928 | ||||
| 0.001596 | ||||
| 0.001568 | ||||
| 0.001395 | ||||
| 0.001463 | ||||
| 0.001440 | ||||
| 0.001398 | ||||
| 0.000854 | ||||
| 0.000865 | ||||
| 0.000867 | ||||
| 0.000853 | ||||
| 0.000947 | ||||
| 0.000890 | ||||
| 0.000862 | ||||
| 0.000755 | ||||
| 0.000772 | ||||
| 0.000954 | ||||
| 0.000892 | ||||
| 0.001141 | ||||
| 0.001151 | ||||
| 0.001173 | ||||
| 0.001080 | ||||
| 0.001082 | ||||
| 0.001145 | ||||
| 0.001084 | ||||
| 0.001085 | ||||
| 0.001108 | ||||
| 0.001024 | ||||
| 0.001001 | ||||
| 0.001056 | ||||
| 0.001066 | ||||
| 0.001056 | ||||
| 0.000991 | ||||
| 0.001036 | ||||
| 0.001046 | ||||
| 0.001062 | ||||
| 0.001066 | ||||
| 0.001110 | ||||
| 0.001106 | ||||
| 0.001164 | ||||
| 0.001067 | ||||
| 0.001047 | ||||
| 0.001064 | ||||
| 0.001050 | ||||
| 0.001007 | ||||
| 0.001023 | ||||
| 0.001016 | ||||
| 0.001092 | ||||
| 0.001056 | ||||
| 0.001051 | ||||
| 0.001052 | ||||
| 0.001037 | ||||
| 0.001173 | ||||
| 0.001151 | ||||
| 0.001124 | ||||
| 0.001138 | ||||
| 0.001151 | ||||
| 0.001121 | ||||
| 0.001189 | ||||
| 0.001182 | ||||
| 0.001154 | ||||
| 0.001177 | ||||
| 0.001222 | ||||
| 0.001415 | ||||
| 0.001163 | ||||
| 0.001201 | ||||
| 0.001038 | ||||
| 0.001211 | ||||
| 0.001184 | ||||
| 0.001339 | ||||
| 0.001390 | ||||
| 0.001313 | ||||
| 0.001373 | ||||
| 0.001376 | ||||
| 0.001394 | ||||
| 0.001389 | ||||
| 0.001823 | ||||
| 0.001891 | ||||
| 0.001908 | ||||
| 0.002072 | ||||
| 0.002026 | ||||
| 0.001988 | ||||
| 0.002363 | ||||
| 0.002080 | ||||
| 0.002079 | ||||
| 0.002148 | ||||
| 0.002149 | ||||
| 0.002223 | ||||
| 0.002463 | ||||
| 0.002479 | ||||
| 0.002663 | ||||
| 0.002720 | ||||
| 0.002779 | ||||
| 0.002617 | ||||
| 0.002547 | ||||
| 0.002798 | ||||
| 0.003304 | ||||
| 0.003461 | ||||
| 0.003709 | ||||
| 0.003762 | ||||
| 0.005933 | ||||
| 0.005984 | ||||
| 0.006433 | ||||
| 0.005666 | ||||
| 0.006661 | ||||
| 0.007425 | ||||
| 0.006054 | ||||
| 0.007259 | ||||
| 0.008582 | ||||
| 0.008931 | ||||
| 0.009411 | ||||
| 0.008872 | ||||
| 0.008486 | ||||
| 0.009391 | ||||
| 0.007860 | ||||
| 0.008972 | ||||
| 0.008909 | ||||
| 0.009145 | ||||
| 0.009320 | ||||
| 0.009644 | ||||
| 0.012167 | ||||
| 0.014863 | ||||
| 0.017088 | ||||
| 0.015045 | ||||
| 0.013420 | ||||
| 0.013102 | ||||
| 0.011469 | ||||
| 0.013056 | ||||
| 0.013023 | ||||
| 0.011685 | ||||
| 0.009857 | ||||
| 0.006822 | ||||
| 0.007648 | ||||
| 0.007969 | ||||
| 0.007871 | ||||
| 0.008448 | ||||
| 0.007131 | ||||
| 0.006734 | ||||
| 0.006673 | ||||
| 0.007083 | ||||
| 0.007667 | ||||
| 0.007237 | ||||
| 0.007373 | ||||
| 0.007465 | ||||
| 0.006967 | ||||
| 0.006024 | ||||
| 0.006010 | ||||
| 0.005029 | ||||
| 0.004475 | ||||
| 0.005164 | ||||
| 0.004399 | ||||
| 0.003533 | ||||
| 0.004361 | ||||
| 0.004297 | ||||
| 0.004566 | ||||
| 0.005000 | ||||
| 0.004989 | ||||
| 0.004956 | ||||
| 0.005472 | ||||
| 0.005638 | ||||
| 0.006730 | ||||
| 0.007347 | ||||
| 0.007034 | ||||
| 0.007049 | ||||
| 0.006424 | ||||
| 0.006697 | ||||
| 0.007094 | ||||
| 0.006581 | ||||
| 0.006259 | ||||
| 0.006648 | ||||
| 0.006324 | ||||
| 0.006142 | ||||
| 0.006339 | ||||
| 0.006291 | ||||
| 0.006018 | ||||
| 0.006215 | ||||
| 0.005482 | ||||
							
								
								
									
										962
									
								
								data/ltc.dat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										962
									
								
								data/ltc.dat
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,962 @@ | ||||
| 1.7906 | ||||
| 1.8019 | ||||
| 1.75 | ||||
| 1.7791 | ||||
| 1.8003 | ||||
| 1.8498 | ||||
| 2.002 | ||||
| 2.01 | ||||
| 2.8601 | ||||
| 2.8358 | ||||
| 3.1018 | ||||
| 2.74 | ||||
| 3.0333 | ||||
| 3 | ||||
| 2.9975 | ||||
| 2.959 | ||||
| 2.7733 | ||||
| 2.838 | ||||
| 2.876 | ||||
| 3.125 | ||||
| 3.1194 | ||||
| 3.7707 | ||||
| 4.092 | ||||
| 3.9431 | ||||
| 4.056 | ||||
| 4.151 | ||||
| 4.143 | ||||
| 4.938 | ||||
| 5.38 | ||||
| 5.201 | ||||
| 6.464 | ||||
| 7.567 | ||||
| 4.4454 | ||||
| 4.328 | ||||
| 5.3081 | ||||
| 4.7 | ||||
| 4.601 | ||||
| 4.122 | ||||
| 3.71 | ||||
| 3.7501 | ||||
| 4.01 | ||||
| 3.707 | ||||
| 3.9719 | ||||
| 3.777 | ||||
| 3.8696 | ||||
| 3.7869 | ||||
| 4.6063 | ||||
| 4.6779 | ||||
| 4.7 | ||||
| 4.69 | ||||
| 5.087 | ||||
| 4.807 | ||||
| 4.6071 | ||||
| 4.6402 | ||||
| 4.1488 | ||||
| 4.187 | ||||
| 4.195 | ||||
| 4.41 | ||||
| 4.37 | ||||
| 4.0524 | ||||
| 4.2484 | ||||
| 3.871 | ||||
| 3.94 | ||||
| 3.9732 | ||||
| 4.161 | ||||
| 4.0249 | ||||
| 3.9 | ||||
| 4.054 | ||||
| 3.9412 | ||||
| 3.98 | ||||
| 4.01 | ||||
| 3.363 | ||||
| 3.4982 | ||||
| 3.6036 | ||||
| 3.5697 | ||||
| 3.5383 | ||||
| 3.3824 | ||||
| 3.051 | ||||
| 2.96 | ||||
| 2.9488 | ||||
| 2.89 | ||||
| 2.9 | ||||
| 2.893 | ||||
| 2.8565 | ||||
| 2.848 | ||||
| 2.84 | ||||
| 2.8058 | ||||
| 2.6482 | ||||
| 2.7098 | ||||
| 2.951 | ||||
| 3.0789 | ||||
| 3.0597 | ||||
| 3.05 | ||||
| 2.9424 | ||||
| 2.955 | ||||
| 2.965 | ||||
| 2.8351 | ||||
| 2.816 | ||||
| 2.8498 | ||||
| 2.8198 | ||||
| 2.8148 | ||||
| 2.9337 | ||||
| 2.9653 | ||||
| 2.884 | ||||
| 2.851 | ||||
| 2.8096 | ||||
| 2.8536 | ||||
| 2.86 | ||||
| 2.9202 | ||||
| 2.902 | ||||
| 2.8988 | ||||
| 2.8748 | ||||
| 3.08 | ||||
| 2.9839 | ||||
| 2.99 | ||||
| 3.0135 | ||||
| 2.9929 | ||||
| 3.031 | ||||
| 3.0082 | ||||
| 3.0419 | ||||
| 3.169 | ||||
| 3.0688 | ||||
| 3.062 | ||||
| 3.115 | ||||
| 3.1141 | ||||
| 3.1583 | ||||
| 3.1675 | ||||
| 3.197 | ||||
| 3.1649 | ||||
| 3.0907 | ||||
| 3.101 | ||||
| 3.071 | ||||
| 3.0261 | ||||
| 3.0402 | ||||
| 3.0797 | ||||
| 3.0787 | ||||
| 3.145 | ||||
| 3.1318 | ||||
| 3.144 | ||||
| 3.1011 | ||||
| 3.1186 | ||||
| 3.1055 | ||||
| 3.0988 | ||||
| 3.7993 | ||||
| 3.95 | ||||
| 3.6891 | ||||
| 3.89 | ||||
| 4.1342 | ||||
| 4.55 | ||||
| 4 | ||||
| 3.85 | ||||
| 3.523 | ||||
| 3.532 | ||||
| 3.3792 | ||||
| 3.4223 | ||||
| 3.0999 | ||||
| 2.9854 | ||||
| 3.3 | ||||
| 3.2177 | ||||
| 3.2299 | ||||
| 3.074 | ||||
| 3.1974 | ||||
| 3.226 | ||||
| 3.182 | ||||
| 3.14 | ||||
| 3.131 | ||||
| 3.156 | ||||
| 3.1262 | ||||
| 3.154 | ||||
| 3.1018 | ||||
| 3.376 | ||||
| 3.6444 | ||||
| 3.605 | ||||
| 3.546 | ||||
| 3.7 | ||||
| 3.6255 | ||||
| 3.4312 | ||||
| 3.33 | ||||
| 3.3798 | ||||
| 3.335 | ||||
| 3.528 | ||||
| 3.4399 | ||||
| 3.634 | ||||
| 3.8273 | ||||
| 3.6906 | ||||
| 3.653 | ||||
| 3.89 | ||||
| 3.6 | ||||
| 3.58 | ||||
| 3.5879 | ||||
| 3.7875 | ||||
| 3.6807 | ||||
| 3.695 | ||||
| 3.7201 | ||||
| 3.6997 | ||||
| 3.5 | ||||
| 3.406 | ||||
| 3.4085 | ||||
| 3.5601 | ||||
| 3.6418 | ||||
| 3.6011 | ||||
| 3.445 | ||||
| 3.4678 | ||||
| 3.464 | ||||
| 3.489 | ||||
| 3.452 | ||||
| 3.4401 | ||||
| 3.5189 | ||||
| 3.499 | ||||
| 3.4869 | ||||
| 3.507 | ||||
| 3.489 | ||||
| 3.45 | ||||
| 3.62 | ||||
| 3.5919 | ||||
| 3.58 | ||||
| 3.535 | ||||
| 3.5517 | ||||
| 3.4599 | ||||
| 3.4719 | ||||
| 3.4334 | ||||
| 2.95 | ||||
| 3.1 | ||||
| 3.001 | ||||
| 3.055 | ||||
| 3.0099 | ||||
| 3.37 | ||||
| 3.2057 | ||||
| 3.0411 | ||||
| 3.1075 | ||||
| 3.1847 | ||||
| 3.0947 | ||||
| 3.4239 | ||||
| 3.4742 | ||||
| 3.4728 | ||||
| 3.384 | ||||
| 3.3567 | ||||
| 3.3635 | ||||
| 3.4334 | ||||
| 3.4112 | ||||
| 3.4197 | ||||
| 3.4489 | ||||
| 3.435 | ||||
| 3.346 | ||||
| 3.304 | ||||
| 3.2254 | ||||
| 3.1726 | ||||
| 3.1778 | ||||
| 3.241 | ||||
| 3.2179 | ||||
| 3.2541 | ||||
| 3.264 | ||||
| 3.365 | ||||
| 3.2569 | ||||
| 3.2803 | ||||
| 3.3039 | ||||
| 3.3114 | ||||
| 3.313 | ||||
| 3.2924 | ||||
| 3.1457 | ||||
| 3.1582 | ||||
| 3.1694 | ||||
| 3.192 | ||||
| 3.2132 | ||||
| 3.226 | ||||
| 3.2187 | ||||
| 3.2075 | ||||
| 3.2372 | ||||
| 3.296 | ||||
| 3.27 | ||||
| 3.228 | ||||
| 3.2096 | ||||
| 3.254 | ||||
| 3.2416 | ||||
| 3.2582 | ||||
| 3.2443 | ||||
| 3.245 | ||||
| 3.2687 | ||||
| 3.2467 | ||||
| 3.2305 | ||||
| 3.2324 | ||||
| 3.2302 | ||||
| 3.233 | ||||
| 3.234 | ||||
| 3.2625 | ||||
| 3.2693 | ||||
| 3.26 | ||||
| 3.2952 | ||||
| 3.3104 | ||||
| 3.2849 | ||||
| 3.2511 | ||||
| 3.3199 | ||||
| 3.3 | ||||
| 3.375 | ||||
| 3.356 | ||||
| 3.3698 | ||||
| 3.6711 | ||||
| 3.83 | ||||
| 4.0837 | ||||
| 3.8931 | ||||
| 3.8298 | ||||
| 3.8207 | ||||
| 3.67 | ||||
| 3.6969 | ||||
| 3.6743 | ||||
| 3.734 | ||||
| 3.7333 | ||||
| 3.7203 | ||||
| 3.8452 | ||||
| 3.98 | ||||
| 3.966 | ||||
| 4.08 | ||||
| 3.8398 | ||||
| 3.8807 | ||||
| 3.859 | ||||
| 3.9351 | ||||
| 4.0181 | ||||
| 4.0707 | ||||
| 4.007 | ||||
| 3.9669 | ||||
| 4.0212 | ||||
| 3.7989 | ||||
| 3.87 | ||||
| 3.9353 | ||||
| 3.8383 | ||||
| 3.958 | ||||
| 3.95 | ||||
| 4.0456 | ||||
| 4.1025 | ||||
| 4.4453 | ||||
| 4.487 | ||||
| 4.7503 | ||||
| 4.59 | ||||
| 4.76 | ||||
| 4.7162 | ||||
| 4.8967 | ||||
| 4.82 | ||||
| 4.8632 | ||||
| 4.979 | ||||
| 4.7738 | ||||
| 4.821 | ||||
| 4.767 | ||||
| 4.8969 | ||||
| 5.0993 | ||||
| 5.25 | ||||
| 5.2789 | ||||
| 5.136 | ||||
| 5.2588 | ||||
| 5.695 | ||||
| 5.6492 | ||||
| 5.578 | ||||
| 5.6031 | ||||
| 5.381 | ||||
| 4.8546 | ||||
| 4.0007 | ||||
| 3.888 | ||||
| 4.2775 | ||||
| 4.243 | ||||
| 4.0731 | ||||
| 4.175 | ||||
| 4.1299 | ||||
| 4.0599 | ||||
| 4.2091 | ||||
| 4.2663 | ||||
| 4.6532 | ||||
| 4.2809 | ||||
| 4.5046 | ||||
| 4.4219 | ||||
| 4.4799 | ||||
| 4.102 | ||||
| 4.25 | ||||
| 4.1036 | ||||
| 4.138 | ||||
| 4.1274 | ||||
| 4.1843 | ||||
| 4.1734 | ||||
| 4.1701 | ||||
| 4.19 | ||||
| 4.16 | ||||
| 4.1928 | ||||
| 4.1521 | ||||
| 4.19 | ||||
| 4.1574 | ||||
| 4.114 | ||||
| 4.036 | ||||
| 4.0596 | ||||
| 4.0933 | ||||
| 4.0102 | ||||
| 3.98 | ||||
| 3.9536 | ||||
| 3.993 | ||||
| 4.0767 | ||||
| 4.0551 | ||||
| 3.942 | ||||
| 3.8534 | ||||
| 3.7332 | ||||
| 3.56 | ||||
| 3.746 | ||||
| 3.66 | ||||
| 3.69 | ||||
| 3.63 | ||||
| 3.53 | ||||
| 3.6 | ||||
| 3.5702 | ||||
| 3.5907 | ||||
| 3.6226 | ||||
| 3.6239 | ||||
| 3.6257 | ||||
| 3.672 | ||||
| 3.95 | ||||
| 3.8414 | ||||
| 3.8159 | ||||
| 3.84 | ||||
| 3.7586 | ||||
| 3.7645 | ||||
| 3.776 | ||||
| 3.803 | ||||
| 3.8107 | ||||
| 3.8262 | ||||
| 3.8048 | ||||
| 3.9154 | ||||
| 4.0101 | ||||
| 3.9781 | ||||
| 3.97 | ||||
| 4.0051 | ||||
| 4.0289 | ||||
| 3.9789 | ||||
| 4.0199 | ||||
| 3.8977 | ||||
| 3.8569 | ||||
| 3.845 | ||||
| 3.9017 | ||||
| 3.86 | ||||
| 3.83 | ||||
| 3.811 | ||||
| 3.8334 | ||||
| 3.837 | ||||
| 3.7948 | ||||
| 3.8011 | ||||
| 3.7506 | ||||
| 3.808 | ||||
| 3.8234 | ||||
| 3.8 | ||||
| 3.8582 | ||||
| 3.836 | ||||
| 3.857 | ||||
| 3.8529 | ||||
| 3.8486 | ||||
| 3.85 | ||||
| 3.8491 | ||||
| 3.8165 | ||||
| 3.8142 | ||||
| 3.83 | ||||
| 3.8478 | ||||
| 3.8649 | ||||
| 3.8295 | ||||
| 3.7866 | ||||
| 3.784 | ||||
| 3.8304 | ||||
| 3.81 | ||||
| 3.9329 | ||||
| 3.9228 | ||||
| 3.892 | ||||
| 3.881 | ||||
| 3.8365 | ||||
| 3.8272 | ||||
| 3.8157 | ||||
| 3.789 | ||||
| 3.8569 | ||||
| 3.918 | ||||
| 3.8997 | ||||
| 3.881 | ||||
| 3.916 | ||||
| 3.9885 | ||||
| 3.992 | ||||
| 3.9947 | ||||
| 4.0898 | ||||
| 4.03 | ||||
| 4 | ||||
| 4.11 | ||||
| 4.1449 | ||||
| 3.8601 | ||||
| 3.8979 | ||||
| 3.9138 | ||||
| 3.9184 | ||||
| 3.887 | ||||
| 3.8635 | ||||
| 3.853 | ||||
| 3.8192 | ||||
| 3.8057 | ||||
| 3.7754 | ||||
| 3.883 | ||||
| 3.8997 | ||||
| 3.9031 | ||||
| 3.94 | ||||
| 3.8979 | ||||
| 3.909 | ||||
| 3.9569 | ||||
| 3.89 | ||||
| 3.9476 | ||||
| 3.8991 | ||||
| 3.8609 | ||||
| 3.8997 | ||||
| 3.8908 | ||||
| 3.8231 | ||||
| 3.873 | ||||
| 3.8252 | ||||
| 3.8809 | ||||
| 3.8777 | ||||
| 3.9 | ||||
| 3.91 | ||||
| 3.9056 | ||||
| 3.4783 | ||||
| 3.52 | ||||
| 3.6601 | ||||
| 3.68 | ||||
| 3.6987 | ||||
| 3.6823 | ||||
| 3.633 | ||||
| 3.6386 | ||||
| 3.653 | ||||
| 3.6021 | ||||
| 3.65 | ||||
| 3.6 | ||||
| 3.7195 | ||||
| 3.672 | ||||
| 3.6493 | ||||
| 3.656 | ||||
| 3.632 | ||||
| 3.6742 | ||||
| 4.6161 | ||||
| 4.431 | ||||
| 4.2991 | ||||
| 4.257 | ||||
| 4.3633 | ||||
| 4.5976 | ||||
| 4.59 | ||||
| 4.4135 | ||||
| 4.3635 | ||||
| 4.4997 | ||||
| 4.58 | ||||
| 4.593 | ||||
| 4.59 | ||||
| 4.2127 | ||||
| 3.84 | ||||
| 3.963 | ||||
| 4.02 | ||||
| 4.34 | ||||
| 4.574 | ||||
| 3.9443 | ||||
| 4.0001 | ||||
| 3.9262 | ||||
| 3.9466 | ||||
| 3.9135 | ||||
| 3.8927 | ||||
| 3.95 | ||||
| 3.8949 | ||||
| 3.907 | ||||
| 3.9098 | ||||
| 3.9208 | ||||
| 3.85 | ||||
| 3.8246 | ||||
| 3.733 | ||||
| 3.711 | ||||
| 3.7425 | ||||
| 4.0382 | ||||
| 4.0649 | ||||
| 4.0352 | ||||
| 4.0283 | ||||
| 3.9701 | ||||
| 3.9403 | ||||
| 3.958 | ||||
| 3.9208 | ||||
| 3.737 | ||||
| 3.8296 | ||||
| 3.8153 | ||||
| 3.7394 | ||||
| 3.7698 | ||||
| 3.83 | ||||
| 3.8933 | ||||
| 3.8831 | ||||
| 3.8961 | ||||
| 3.8139 | ||||
| 3.8 | ||||
| 3.8086 | ||||
| 3.8566 | ||||
| 3.9009 | ||||
| 3.9057 | ||||
| 3.9488 | ||||
| 3.8801 | ||||
| 3.8747 | ||||
| 3.8728 | ||||
| 3.8061 | ||||
| 3.851 | ||||
| 4.0601 | ||||
| 4.1105 | ||||
| 4 | ||||
| 4.0137 | ||||
| 4.1003 | ||||
| 4.0063 | ||||
| 3.8669 | ||||
| 3.8734 | ||||
| 3.8109 | ||||
| 3.806 | ||||
| 3.8701 | ||||
| 4.3739 | ||||
| 4.1707 | ||||
| 4.3061 | ||||
| 4.2982 | ||||
| 4.1 | ||||
| 4.0049 | ||||
| 3.9371 | ||||
| 4.0584 | ||||
| 4.0173 | ||||
| 3.9546 | ||||
| 4.0076 | ||||
| 4.1403 | ||||
| 4.0817 | ||||
| 4.0862 | ||||
| 4.1263 | ||||
| 4.1837 | ||||
| 4.306 | ||||
| 7.78 | ||||
| 7.13 | ||||
| 7.5874 | ||||
| 8.333 | ||||
| 8.6 | ||||
| 9.095 | ||||
| 12.4 | ||||
| 10.854 | ||||
| 10.014 | ||||
| 10.732 | ||||
| 9.35 | ||||
| 9.9251 | ||||
| 9.7771 | ||||
| 11.79 | ||||
| 11.234 | ||||
| 11.915 | ||||
| 11.848 | ||||
| 12.05 | ||||
| 11.66 | ||||
| 11.521 | ||||
| 10.608 | ||||
| 11.592 | ||||
| 12.851 | ||||
| 15.411 | ||||
| 16.689 | ||||
| 16.2 | ||||
| 16.642 | ||||
| 16.242 | ||||
| 16.022 | ||||
| 15.498 | ||||
| 16.988 | ||||
| 16.84 | ||||
| 17.298 | ||||
| 17.2 | ||||
| 23.001 | ||||
| 24.941 | ||||
| 26.213 | ||||
| 28.674 | ||||
| 30.696 | ||||
| 28.706 | ||||
| 34 | ||||
| 32.335 | ||||
| 31 | ||||
| 27.801 | ||||
| 29.399 | ||||
| 29.395 | ||||
| 25.791 | ||||
| 23.72 | ||||
| 26.011 | ||||
| 29.134 | ||||
| 27.373 | ||||
| 27.202 | ||||
| 25.61 | ||||
| 23.931 | ||||
| 30.692 | ||||
| 33.579 | ||||
| 27.211 | ||||
| 24.21 | ||||
| 22.095 | ||||
| 22.817 | ||||
| 24.789 | ||||
| 23.667 | ||||
| 24.777 | ||||
| 26.5 | ||||
| 26.967 | ||||
| 26.413 | ||||
| 27.415 | ||||
| 29.999 | ||||
| 29.762 | ||||
| 28.1 | ||||
| 29.847 | ||||
| 29.506 | ||||
| 28.72 | ||||
| 33.95 | ||||
| 28 | ||||
| 30.08 | ||||
| 28.266 | ||||
| 28.565 | ||||
| 33.248 | ||||
| 45.358 | ||||
| 43.112 | ||||
| 47.197 | ||||
| 45.77 | ||||
| 43.76 | ||||
| 45.85 | ||||
| 45.23 | ||||
| 41.311 | ||||
| 40.158 | ||||
| 37.78 | ||||
| 39.547 | ||||
| 41.192 | ||||
| 39.269 | ||||
| 38.83 | ||||
| 37.01 | ||||
| 40.4 | ||||
| 45.298 | ||||
| 54.59 | ||||
| 52.75 | ||||
| 50.831 | ||||
| 45.686 | ||||
| 50.924 | ||||
| 48.2 | ||||
| 44.315 | ||||
| 43.435 | ||||
| 46.84 | ||||
| 45.165 | ||||
| 42.35 | ||||
| 38.379 | ||||
| 40.935 | ||||
| 42.129 | ||||
| 43.469 | ||||
| 40 | ||||
| 44.85 | ||||
| 45.45 | ||||
| 47.01 | ||||
| 45.107 | ||||
| 45.1 | ||||
| 42.081 | ||||
| 42.101 | ||||
| 41.8 | ||||
| 40.439 | ||||
| 41.052 | ||||
| 40.001 | ||||
| 42.107 | ||||
| 43.12 | ||||
| 41.812 | ||||
| 42.579 | ||||
| 43.018 | ||||
| 46.255 | ||||
| 45.486 | ||||
| 46 | ||||
| 49 | ||||
| 47.56 | ||||
| 46.5 | ||||
| 46.964 | ||||
| 45.879 | ||||
| 45.276 | ||||
| 45.497 | ||||
| 42.967 | ||||
| 43.911 | ||||
| 43.618 | ||||
| 46.52 | ||||
| 44.976 | ||||
| 45.685 | ||||
| 47.971 | ||||
| 46.25 | ||||
| 53.004 | ||||
| 49.663 | ||||
| 50.916 | ||||
| 51.529 | ||||
| 60.5 | ||||
| 62.14 | ||||
| 63.534 | ||||
| 65.448 | ||||
| 72.691 | ||||
| 87.137 | ||||
| 78.494 | ||||
| 78.527 | ||||
| 66.8 | ||||
| 73.28 | ||||
| 81.111 | ||||
| 80.1 | ||||
| 72.91 | ||||
| 70.75 | ||||
| 67.205 | ||||
| 68.121 | ||||
| 65.945 | ||||
| 61.652 | ||||
| 45.001 | ||||
| 51.821 | ||||
| 51.824 | ||||
| 50.718 | ||||
| 56.289 | ||||
| 52.58 | ||||
| 51.502 | ||||
| 46.399 | ||||
| 47.5 | ||||
| 49.28 | ||||
| 47.3 | ||||
| 52.397 | ||||
| 52.203 | ||||
| 56.83 | ||||
| 54.919 | ||||
| 52.876 | ||||
| 55.56 | ||||
| 54.872 | ||||
| 53.261 | ||||
| 52.083 | ||||
| 51.235 | ||||
| 51.665 | ||||
| 52.056 | ||||
| 52.571 | ||||
| 53.31 | ||||
| 50.068 | ||||
| 50.698 | ||||
| 50.804 | ||||
| 60.503 | ||||
| 59.306 | ||||
| 63.939 | ||||
| 65.86 | ||||
| 64.782 | ||||
| 59.172 | ||||
| 60.499 | ||||
| 59.55 | ||||
| 59.996 | ||||
| 58.014 | ||||
| 56.422 | ||||
| 54.533 | ||||
| 55.635 | ||||
| 56.039 | ||||
| 55.5 | ||||
| 54.958 | ||||
| 54.01 | ||||
| 56.838 | ||||
| 56.18 | ||||
| 55.552 | ||||
| 52.849 | ||||
| 53.989 | ||||
| 55.83 | ||||
| 54.636 | ||||
| 54.441 | ||||
| 54.375 | ||||
| 60.34 | ||||
| 62.409 | ||||
| 64.31 | ||||
| 58.626 | ||||
| 61.686 | ||||
| 58.261 | ||||
| 61 | ||||
| 61.99 | ||||
| 63.03 | ||||
| 70.654 | ||||
| 67.132 | ||||
| 69.591 | ||||
| 71.72 | ||||
| 72.331 | ||||
| 69.99 | ||||
| 71.735 | ||||
| 72.37 | ||||
| 77.886 | ||||
| 88.443 | ||||
| 85.456 | ||||
| 90.761 | ||||
| 94.003 | ||||
| 83.675 | ||||
| 85.768 | ||||
| 97.841 | ||||
| 98.83 | ||||
| 99.865 | ||||
| 103.42 | ||||
| 99.487 | ||||
| 96.503 | ||||
| 93.56 | ||||
| 120.9 | ||||
| 149 | ||||
| 144.6 | ||||
| 210.11 | ||||
| 292.12 | ||||
| 295.35 | ||||
| 276.31 | ||||
| 295.55 | ||||
| 295.67 | ||||
| 313.5 | ||||
| 355.5 | ||||
| 340.8 | ||||
| 304.31 | ||||
| 306.99 | ||||
| 248.38 | ||||
| 269 | ||||
| 261.99 | ||||
| 261.14 | ||||
| 278.78 | ||||
| 263.53 | ||||
| 247.45 | ||||
| 239.51 | ||||
| 206.99 | ||||
| 225.4 | ||||
| 223.51 | ||||
| 250.11 | ||||
| 244.21 | ||||
| 237.76 | ||||
| 242.9 | ||||
| 278 | ||||
| 271.05 | ||||
| 252.77 | ||||
| 245 | ||||
| 249.24 | ||||
| 225.52 | ||||
| 234.96 | ||||
| 257.7 | ||||
| 235.24 | ||||
| 231.05 | ||||
| 181.8 | ||||
| 186.71 | ||||
| 187.66 | ||||
| 191.68 | ||||
| 209.85 | ||||
| 189.96 | ||||
| 179.54 | ||||
| 177.64 | ||||
| 180.36 | ||||
| 178.8 | ||||
| 175.37 | ||||
| 181.49 | ||||
| 196.08 | ||||
| 181.51 | ||||
| 167.35 | ||||
| 164.5 | ||||
| 143.2 | ||||
| 132 | ||||
| 161.35 | ||||
| 147.47 | ||||
| 125.32 | ||||
| 141.81 | ||||
| 137.93 | ||||
| 149.86 | ||||
| 163.61 | ||||
| 154.82 | ||||
| 148.92 | ||||
| 161.39 | ||||
| 159.19 | ||||
| 211.97 | ||||
| 220.47 | ||||
| 228.5 | ||||
| 228.9 | ||||
| 213.57 | ||||
| 221.63 | ||||
| 228.98 | ||||
| 210.05 | ||||
| 192.47 | ||||
| 206.21 | ||||
| 206.33 | ||||
| 218.13 | ||||
| 218.36 | ||||
| 214.96 | ||||
| 202.02 | ||||
| 209.26 | ||||
| 213.32 | ||||
| 209.92 | ||||
| 208.32 | ||||
							
								
								
									
										1260
									
								
								data/msft.dat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1260
									
								
								data/msft.dat
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										19
									
								
								decider.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								decider.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| #include <iterator> | ||||
| #include "decider.h" | ||||
| 
 | ||||
| macd_decider::macd_decider(std::size_t limit)  | ||||
|     : prices(limit, .0), macd(limit, .0), signal(limit, .0), limit(limit) {} | ||||
| 
 | ||||
| void macd_decider::process(double price) | ||||
| { | ||||
|     prices.add(price); | ||||
|     macd.add(ema<double>(prices.begin(), prices.begin() + 12) - ema<double>(prices.begin(), prices.begin() + 26)); | ||||
|     signal.add(ema<double>(macd.begin(), macd.begin() + 9)); | ||||
| } | ||||
| 
 | ||||
| void macd_decider::reset() | ||||
| { | ||||
|     prices = buffer<double>(limit, .0);  | ||||
|     signal = buffer<double>(limit, .0); | ||||
|     macd   = buffer<double>(limit, .0); | ||||
| } | ||||
							
								
								
									
										106
									
								
								decider.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								decider.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,106 @@ | ||||
| #ifndef DECIDER_H_ | ||||
| #define DECIDER_H_ | ||||
| 
 | ||||
| #include "helpers.h" | ||||
| #include "network.h" | ||||
| #include <iterator> | ||||
| #include <iostream> | ||||
| 
 | ||||
| class decider { | ||||
| public: | ||||
|     double   start_money; | ||||
|     unsigned start_stock; | ||||
| 
 | ||||
|     virtual int decide(double price, double money, unsigned stock) = 0; | ||||
|     virtual void reset() = 0; | ||||
| 
 | ||||
|     virtual ~decider() { } | ||||
| }; | ||||
| 
 | ||||
| class macd_decider { | ||||
| private: | ||||
|     std::size_t limit; | ||||
| 
 | ||||
| protected: | ||||
|     buffer<double> prices; | ||||
|     buffer<double> macd; | ||||
|     buffer<double> signal; | ||||
| 
 | ||||
| public: | ||||
|     macd_decider(std::size_t limit = 1000); | ||||
| 
 | ||||
|     virtual void process(double price); | ||||
|     virtual void reset(); | ||||
| }; | ||||
| 
 | ||||
| template <int p, int m, int s, int ...layers> | ||||
| class neural_decider : public decider, macd_decider { | ||||
| public: | ||||
|     using network_t = network<double, p+m+s+2, layers..., 2>; | ||||
|     network_t network; | ||||
| 
 | ||||
|     double   start_money; | ||||
|     unsigned start_stock; | ||||
| 
 | ||||
|     neural_decider() : network(), macd_decider() { } | ||||
|     neural_decider(typename network_t::normalizer_t normalizer)  | ||||
|         : network(normalizer), macd_decider()  { } | ||||
| 
 | ||||
|     virtual int decide(double price, double money, unsigned stock) | ||||
|     { | ||||
|         process(price); | ||||
| 
 | ||||
|         auto input = prepare(money, stock); | ||||
|         auto result = network.evaluate(input); | ||||
| 
 | ||||
|         double buy  = result.get(0, 0); | ||||
|         double sell = result.get(1, 0); | ||||
| 
 | ||||
|         double amount = (buy - sell - .5)/1.5; | ||||
| 
 | ||||
|         return abs(buy - sell) <= .5 ? 0 : amount * start_stock / 10; | ||||
|     } | ||||
| 
 | ||||
|     virtual void reset() | ||||
|     { | ||||
|         this->reset(); | ||||
|     } | ||||
| 
 | ||||
|     virtual ~neural_decider() { } | ||||
| 
 | ||||
| private: | ||||
|     typename network_t::input prepare(double money, unsigned stock) | ||||
|     { | ||||
|         vector<double, 2> state = {  | ||||
|             { (money - start_money) / start_money },  | ||||
|             { (double)stock / this->start_stock } | ||||
|         }; | ||||
| 
 | ||||
|         vector<double, p> prices; | ||||
|         vector<double, m+s> tech; | ||||
| 
 | ||||
|         for (int j = 0; j < p; j++) { | ||||
|             prices.set(j, 0, this->prices[j]); | ||||
|         } | ||||
|          | ||||
|         int i = 0; | ||||
|         for (int j = 0; j < m; j++, i++) { | ||||
|             tech.set(i, 0, macd[j]); | ||||
|         } | ||||
| 
 | ||||
|         for (int j = 0; j < s; j++, i++) { | ||||
|             tech.set(i, 0, signal[j]); | ||||
|         } | ||||
| 
 | ||||
|         // prices are normalized in their domain
 | ||||
|         prices = normalize(prices); | ||||
|         // analytic data is normalized in its own domain
 | ||||
|         tech   = normalize(tech); | ||||
| 
 | ||||
|         auto concated = concat(prices, tech); | ||||
| 
 | ||||
|         return concat(concated, state); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										48
									
								
								helpers.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								helpers.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | ||||
| #ifndef HELPERS_H_ | ||||
| #define HELPERS_H_ | ||||
| 
 | ||||
| #include <deque> | ||||
| #include <iterator> | ||||
| 
 | ||||
| using std::deque; | ||||
| 
 | ||||
| template <typename T, class iter> | ||||
| T ema(iter begin, iter end) | ||||
| { | ||||
|     const std::size_t N = std::distance(begin, end); | ||||
|     const T a = T(1) - T(2) / T(N + 1); | ||||
|     T b = T(1); | ||||
| 
 | ||||
|     T nominator = 0, denominator = 0; | ||||
|     for(iter it = begin; it < end; it++) { | ||||
|         nominator   += *it * b; | ||||
|         denominator += b; | ||||
| 
 | ||||
|         b *= a; | ||||
|     } | ||||
| 
 | ||||
|     return nominator / denominator; | ||||
| } | ||||
| 
 | ||||
| template <typename T> | ||||
| class buffer : public deque<T>  | ||||
| { | ||||
|     using deque<T>::deque; | ||||
| 
 | ||||
|     std::size_t limit; | ||||
| 
 | ||||
|     public: | ||||
|         buffer(std::size_t limit) : limit(limit), deque<T>(limit) {}; | ||||
|         buffer(std::size_t limit, const T& value) : limit(limit), deque<T>(limit, value) {}; | ||||
| 
 | ||||
|         void add(const T& value) | ||||
|         { | ||||
|             if (this->size() >= limit) { | ||||
|                 this->pop_back(); | ||||
|             } | ||||
| 
 | ||||
|             push_front(value); | ||||
|         } | ||||
| }; | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										57
									
								
								main.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								main.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,57 @@ | ||||
| #include <vector> | ||||
| #include <string> | ||||
| #include <iostream> | ||||
| #include <fstream> | ||||
| #include <cmath> | ||||
| #include <algorithm> | ||||
| 
 | ||||
| double expavg(const std::vector<double> &values, int start, int n)  | ||||
| { | ||||
|     double a = 1 - 2./(n + 1); | ||||
| 
 | ||||
|     double nominator = 0., denominator = 0.; | ||||
|     double b = 1.; | ||||
| 
 | ||||
|     for (int i = 0; i < n; i++) { | ||||
|         nominator += b*values[start - i]; | ||||
|         denominator += b; | ||||
| 
 | ||||
|         b *= a; | ||||
|     } | ||||
| 
 | ||||
|     return nominator / denominator; | ||||
| } | ||||
| 
 | ||||
| int main(int argc, char **argv) | ||||
| { | ||||
|     int low = 12, high = 26, s = 9; | ||||
| 
 | ||||
|     if (argc >= 2)  | ||||
|         low = std::atoi(argv[2]); | ||||
| 
 | ||||
|     if (argc >= 3)  | ||||
|         high = std::atoi(argv[4]); | ||||
| 
 | ||||
|     if (argc >= 4)  | ||||
|         s = std::atoi(argv[3]); | ||||
| 
 | ||||
|     std::vector<double> prices; | ||||
|     double price; | ||||
| 
 | ||||
|     while (std::cin >> price) { | ||||
|         prices.push_back(price); | ||||
|     } | ||||
| 
 | ||||
|     std::vector<double> macd(prices.size()); | ||||
|     std::vector<double> signal(prices.size()); | ||||
| 
 | ||||
|     for (int i = 0; i < prices.size(); ++i) { | ||||
|         macd[i]   = expavg(prices, i, std::min(i, low)) - expavg(prices, i, std::min(i, high)); | ||||
|         signal[i] = expavg(macd, i, std::min(i, s)); | ||||
|     } | ||||
| 
 | ||||
|     std::cout << "price,macd,signal,delta" << std::endl; | ||||
|     for (int i = 1; i < prices.size(); ++i) { | ||||
|         std::cout << prices[i] << "," << macd[i] << "," << signal[i] << "," << prices[i] - prices[i-1] << std::endl; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										235
									
								
								matrix.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										235
									
								
								matrix.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,235 @@ | ||||
| #ifndef MATRIX_H_ | ||||
| #define MATRIX_H_ | ||||
| 
 | ||||
| #include <iostream> | ||||
| #include <vector> | ||||
| #include <functional> | ||||
| 
 | ||||
| template <typename T, int m, int n> | ||||
| class matrix | ||||
| { | ||||
|     T values[m*n]; | ||||
| 
 | ||||
|     public: | ||||
|         typedef matrix<T, 1, n> row_t; | ||||
|         typedef matrix<T, m, 1> column_t; | ||||
| 
 | ||||
|         matrix() | ||||
|         { | ||||
|             for (int i = 0; i < m; ++i) | ||||
|                 for (int j = 0; j < n; j++) | ||||
|                     values[i*n + j] = T(); | ||||
|         } | ||||
| 
 | ||||
|         matrix(std::initializer_list<std::initializer_list<T>> list) | ||||
|         { | ||||
|             int i = 0, j = 0; | ||||
|             for (const auto& row : list) { | ||||
|                 j = 0; | ||||
|                 for (const auto& cell : row) { | ||||
|                     set(i, j++, cell); | ||||
|                 } | ||||
|                 i++; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         T get(int i, int j) const | ||||
|         { | ||||
|             return values[i*n + j]; | ||||
|         } | ||||
| 
 | ||||
|         void set(int i, int j, T value) | ||||
|         { | ||||
|             values[i*n + j] = value; | ||||
|         } | ||||
| 
 | ||||
|         template <int p> matrix<T, m, p> operator* (const matrix<T, n, p>& rhs) const | ||||
|         { | ||||
|             matrix<T, m, p> result; | ||||
| 
 | ||||
|             for (int i = 0; i < m; ++i) { | ||||
|                 for(int j = 0; j < p; j++) { | ||||
|                     T accumulator = 0; | ||||
|                     for(int k = 0; k < n; k++)  | ||||
|                         accumulator += this->get(i, k) * rhs.get(k, j); | ||||
| 
 | ||||
|                     result.set(i, j, accumulator); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             return result; | ||||
|         } | ||||
| 
 | ||||
|         matrix<T, m, n> operator* (const T& rhs) const | ||||
|         { | ||||
|             matrix <T, m, n> result; | ||||
| 
 | ||||
|             for (int i = 0; i < m; ++i) | ||||
|                 for (int j = 0; j < m; ++j)  | ||||
|                     result.set(i, j, rhs * get(i, j)); | ||||
| 
 | ||||
|             return result; | ||||
|         } | ||||
| 
 | ||||
|         matrix<T, n, m> transpose() const | ||||
|         { | ||||
|             matrix<T, n, m> result; | ||||
| 
 | ||||
|             for (int i = 0; i < m; ++i) | ||||
|                 for (int j = 0; j < m; ++j)  | ||||
|                     result.set(j, i, get(i, j)); | ||||
| 
 | ||||
| 
 | ||||
|             return result; | ||||
|         } | ||||
| 
 | ||||
|         matrix<T, m, n> operator- () const | ||||
|         { | ||||
|             matrix<T, m, n> result; | ||||
| 
 | ||||
|             for (int i = 0; i < m; ++i) | ||||
|                 for (int j = 0; j < n; ++j) | ||||
|                     result.set(i, j, -get(i, j)); | ||||
| 
 | ||||
|             return result; | ||||
|         } | ||||
| 
 | ||||
|         matrix<T, m, n> operator- (const matrix<T, m, n>& rhs) const | ||||
|         { | ||||
|             return *this + (-rhs); | ||||
|         } | ||||
| 
 | ||||
|         matrix<T, m, n> operator- (const T& value) const | ||||
|         { | ||||
|             return *this + (-value); | ||||
|         } | ||||
| 
 | ||||
|         matrix<T, m, n> operator+ (const matrix<T, m, n>& rhs) const | ||||
|         { | ||||
|             matrix<T, m, n> result; | ||||
| 
 | ||||
|             for (int i = 0; i < m; ++i) | ||||
|                 for (int j = 0; j < n; ++j) | ||||
|                     result.set(i, j, this->get(i, j) + rhs.get(i, j)); | ||||
| 
 | ||||
|             return result; | ||||
|         } | ||||
| 
 | ||||
|         matrix<T, m, n> operator+ (const T& value) const | ||||
|         { | ||||
|             matrix <T, m, n> result; | ||||
| 
 | ||||
|             for (int i = 0; i < m; ++i) | ||||
|                 for (int j = 0; j < n; ++j) | ||||
|                     result.set(this->get(i, j) + value); | ||||
| 
 | ||||
|             return result; | ||||
|         } | ||||
| 
 | ||||
|         column_t column(std::size_t j) | ||||
|         { | ||||
|             column_t result; | ||||
| 
 | ||||
|             for (int i = 0; i < m; ++i) { | ||||
|                 result.set(i, 0, get(i, j)); | ||||
|             } | ||||
|              | ||||
|             return result; | ||||
|         } | ||||
| 
 | ||||
|         row_t row(std::size_t i) | ||||
|         { | ||||
|             row_t result; | ||||
| 
 | ||||
|             for (int j = 0; j < n; ++j) { | ||||
|                 result.set(0, j, get(i, j)); | ||||
|             } | ||||
|              | ||||
|             return result; | ||||
|         } | ||||
| 
 | ||||
|         friend std::ostream& operator<< (std::ostream& stream, const matrix<T, m, n>& matrix) | ||||
|         { | ||||
|             for (int i = 0; i < m; ++i) { | ||||
|                 for (int j = 0; j < n; j++) { | ||||
|                     stream << matrix.get(i, j) << " "; | ||||
|                 } | ||||
|                 stream << std::endl; | ||||
|             } | ||||
| 
 | ||||
|             return stream; | ||||
|         } | ||||
| }; | ||||
| 
 | ||||
| template <typename T, int m, int n> matrix<T, m, n> operator*(const T& lhs, const matrix<T, m, n>& rhs) { | ||||
|     return rhs * lhs; | ||||
| } | ||||
| 
 | ||||
| template <typename T, int n> using vector = matrix<T, n, 1>; | ||||
| 
 | ||||
| template <typename T, int m, int n> void fill(matrix<T, m, n> &mat, std::function<T(const int&, const int&)> filler) | ||||
| { | ||||
|     for (int i = 0; i < m; i++) | ||||
|         for (int j = 0; j < n; j++) | ||||
|             mat.set(i, j, filler(i, j)); | ||||
| } | ||||
| 
 | ||||
| template <typename T, int n, int m>  | ||||
| vector<T, m+n> concat(const vector<T, n> &a, const vector<T, m> &b)   | ||||
| { | ||||
|     vector<T, m+n> result; | ||||
| 
 | ||||
|     for (int i = 0; i < n; i++) | ||||
|         result.set(i, 0, a.get(i, 0)); | ||||
|     for (int i = 0; i < m; i++) | ||||
|         result.set(i+n, 0, a.get(i, 0)); | ||||
| 
 | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| template <typename T, int n> | ||||
| vector<T, n> normalize(const vector<T, n> &vec) | ||||
| { | ||||
|     T accumulator = T(); | ||||
| 
 | ||||
|     for (int i = 0; i < n; i++) { | ||||
|         T temp = vec.get(i, 0); | ||||
|         accumulator += temp * temp; | ||||
|     } | ||||
| 
 | ||||
|     accumulator = sqrt(accumulator); | ||||
|     std::function<T(const T&)> normalizer = [accumulator](const T& item) { return item / accumulator; }; | ||||
|     return map(vec, normalizer); | ||||
| } | ||||
| 
 | ||||
| template <typename T, int m, int n>  | ||||
| matrix<T, m, n> map(const matrix<T, m, n>& matrix, std::function<T(const T&)> func) | ||||
| { | ||||
|     ::matrix<T, m, n> result; | ||||
| 
 | ||||
|     for (int i = 0; i < m; i++) | ||||
|         for (int j = 0; j < n; j++) | ||||
|             result.set(i, j, func(matrix.get(i, j))); | ||||
| 
 | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| template <typename T, int m, int n>  | ||||
| matrix<T, m, n> combine(const matrix<T, m, n>& a, const matrix<T, m, n>& b, std::function<T(const T&, const T&)> func) | ||||
| { | ||||
|     ::matrix<T, m, n> result; | ||||
| 
 | ||||
|     for (int i = 0; i < m; i++) | ||||
|         for (int j = 0; j < n; j++) | ||||
|             result.set(i, j, func(a.get(i, j), b.get(i, j))); | ||||
| 
 | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| template <typename T, int m, int n>  | ||||
| matrix<T, m, n> combine(const matrix<T, m, n>& a, const matrix<T, m, n>& b, T c, T d) | ||||
| { | ||||
|     return a*c + d*b; | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										171
									
								
								network.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										171
									
								
								network.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,171 @@ | ||||
| #ifndef NETWORK_H_ | ||||
| #define NETWORK_H_ | ||||
| 
 | ||||
| #include "matrix.h" | ||||
| #include <functional> | ||||
| 
 | ||||
| template <typename T, int in, int out> | ||||
| struct layer { | ||||
|     using filler_t   = std::function<T(const int&, const int&)>; | ||||
|     using combiner_t = std::function<T(const T&, const T&)>; | ||||
| 
 | ||||
|     matrix<T, out, in> weights; | ||||
|     vector<T, out> bias; | ||||
| 
 | ||||
|     vector<T, out> evaluate(vector<T, in> input)  | ||||
|     { | ||||
|         return weights * input - bias; | ||||
|     } | ||||
|      | ||||
|     void fill(filler_t weight_filler, filler_t bias_filler) | ||||
|     { | ||||
|         ::fill(weights, weight_filler); | ||||
|         ::fill(bias,    bias_filler); | ||||
|     } | ||||
| 
 | ||||
|     void fill(filler_t filler) | ||||
|     { | ||||
|         // use same filler for both
 | ||||
|         fill(filler, filler); | ||||
|     } | ||||
| 
 | ||||
|     layer<T, in, out> combine(const layer<T, in, out> &rhs, combiner_t weight_combiner, combiner_t bias_combiner) | ||||
|     { | ||||
|         layer<T, in, out> result; | ||||
| 
 | ||||
|         result.weights = ::combine(weights, rhs.weights, weight_combiner); | ||||
|         result.bias = ::combine(bias, rhs.bias, bias_combiner); | ||||
| 
 | ||||
|         return result; | ||||
|     } | ||||
| 
 | ||||
|     layer<T, in, out> combine(const layer<T, in, out> &rhs, combiner_t combiner) | ||||
|     { | ||||
|         return combine(rhs, combiner, combiner); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| template <std::size_t N, typename T, int ...inputs> struct layer_types; | ||||
| template <std::size_t N, typename T, int in, int out, int ...rest>  | ||||
| struct layer_types<N, T, in, out, rest...> : layer_types<N-1, T, out, rest...> { }; | ||||
| 
 | ||||
| template<typename T, int in, int out, int ...rest> | ||||
| struct layer_types<0, T, in, out, rest...> { | ||||
|     using type = layer<T, in, out>; | ||||
| }; | ||||
| 
 | ||||
| template <typename T, int ...layers> class network; | ||||
| 
 | ||||
| template <typename T, int in, int out>  | ||||
| class network<T, in, out> { | ||||
| protected: | ||||
|     layer<T, in, out> current; | ||||
| 
 | ||||
| public: | ||||
|     static const std::size_t layer_count = 1; | ||||
|      | ||||
|     using self = network<T, in, out>; | ||||
| 
 | ||||
|     using output = vector<T, out>; | ||||
|     using input  = vector<T, in>; | ||||
| 
 | ||||
|     using filler_t     = typename layer<T, in, out>::filler_t; | ||||
|     using combiner_t   = typename layer<T, in, out>::combiner_t; | ||||
|     using normalizer_t = std::function<T(const T&)>; | ||||
| 
 | ||||
|     template <std::size_t N> using layer_type = typename layer_types<N, T, in, out>::type; | ||||
| 
 | ||||
|     normalizer_t normalizer; | ||||
| 
 | ||||
|     network(normalizer_t normalizer) : normalizer(normalizer) { } | ||||
|     network() : network([](const T& value) { return value; }) { }; | ||||
| 
 | ||||
|     output evaluate(input inp) | ||||
|     { | ||||
|         return map(current.evaluate(inp), normalizer); | ||||
|     } | ||||
| 
 | ||||
|     template <std::size_t N> layer_type<N>& get() | ||||
|     { | ||||
|         return current; | ||||
|     } | ||||
| 
 | ||||
|     void fill(filler_t weights, filler_t bias) | ||||
|     { | ||||
|         current.fill(weights, bias); | ||||
|     } | ||||
| 
 | ||||
|     void fill(filler_t filler) | ||||
|     { | ||||
|         current.fill(filler); | ||||
|     } | ||||
| 
 | ||||
|     self combine(self& rhs, combiner_t weight_combiner, combiner_t bias_combiner) { | ||||
|         self result; | ||||
|         result.template get<0>() = get<0>().combine(rhs.template get<0>(), weight_combiner, bias_combiner); | ||||
| 
 | ||||
|         return result; | ||||
|     } | ||||
| 
 | ||||
|     self combine(self& rhs, combiner_t combiner) | ||||
|     { | ||||
|         return combine(rhs, combiner, combiner); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| template <typename T, int in, int out, int ...layers>  | ||||
| class network<T, in, out, layers...> : public network<T, in, out> { | ||||
|     using base = network<T, in, out>; | ||||
|     using self = network<T, in, out, layers...>; | ||||
| 
 | ||||
|     network<T, out, layers...> subnetwork; | ||||
| 
 | ||||
| public: | ||||
|     network(typename base::normalizer_t normalizer) : base(normalizer), subnetwork(normalizer) {} | ||||
|     network() : network([](const T& value) { return value; }) { }; | ||||
| 
 | ||||
| 
 | ||||
|     using output = typename network<T, out, layers...>::output; | ||||
|     static const std::size_t layer_count = sizeof...(layers) + 1; | ||||
| 
 | ||||
|     template <std::size_t N> using layer_type = typename layer_types<N, T, in, out, layers...>::type; | ||||
| 
 | ||||
|     template <std::size_t N> layer_type<N>& get() | ||||
|     { | ||||
|         return subnetwork.template get<N-1>(); | ||||
|     } | ||||
| 
 | ||||
|     template<> layer_type<0>& get<0>() | ||||
|     { | ||||
|         return base::template get<0>(); | ||||
|     } | ||||
| 
 | ||||
|     output evaluate(typename base::input inp) | ||||
|     { | ||||
|         auto result = base::evaluate(inp); | ||||
|         return subnetwork.evaluate(result); | ||||
|     } | ||||
| 
 | ||||
|     void fill(typename base::filler_t filler) | ||||
|     { | ||||
|         base::fill(filler); | ||||
|         subnetwork.fill(filler); | ||||
|     } | ||||
| 
 | ||||
|     void fill(typename base::filler_t weights, typename base::filler_t bias) | ||||
|     { | ||||
|         base::fill(weights, bias); | ||||
|         subnetwork.fill(weights, bias); | ||||
|     } | ||||
|      | ||||
|     self combine(self& rhs, typename base::combiner_t weight_combiner, typename base::combiner_t bias_combiner) { | ||||
|         self result; | ||||
| 
 | ||||
|         result.template get<0>() = get<0>().combine(rhs.template get<0>(), weight_combiner, bias_combiner); | ||||
|         result.subnetwork = subnetwork.combine(rhs.subnetwork); | ||||
| 
 | ||||
|         return result; | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										16
									
								
								sprawozdanie/macd.tex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								sprawozdanie/macd.tex
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| \begin{axis}[ | ||||
|     axis lines=center, no marks,  | ||||
|     width=\linewidth, height=.66\linewidth, | ||||
| ] | ||||
|     \addplot table [x expr=\coordindex, y=price, col sep=comma] {\file}; | ||||
| \end{axis} | ||||
| 
 | ||||
| \begin{axis}[ | ||||
|     axis lines=center, no marks,  | ||||
|     width=\linewidth, height=3cm, | ||||
|     hide y axis, | ||||
| ] | ||||
|     \addplot table [x expr=\coordindex, y=macd, col sep=comma] {\file}; | ||||
|     \addplot table [x expr=\coordindex, y=signal, col sep=comma] {\file}; | ||||
|     \addplot table [x expr=\coordindex, y=delta, col sep=comma] {\file}; | ||||
| \end{axis} | ||||
							
								
								
									
										61
									
								
								sprawozdanie/sprawozdanie.tex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								sprawozdanie/sprawozdanie.tex
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,61 @@ | ||||
| \documentclass[]{article} | ||||
| \usepackage[T1]{fontenc} | ||||
| \usepackage{polski} | ||||
| \usepackage[utf8]{inputenc} | ||||
| \usepackage[margin=1.25in]{geometry} | ||||
| \usepackage{alltt} | ||||
| \usepackage{titling} | ||||
| \usepackage{pdfpages} | ||||
| \usepackage{float} | ||||
| \usepackage{amsmath} | ||||
| \usepackage{booktabs} | ||||
| \usepackage{tabularx} | ||||
| \usepackage{amstext} | ||||
| \usepackage{pgfplots} | ||||
| \usepackage{tikz} | ||||
| \usepackage{xspace} | ||||
| \usepackage{enumerate} | ||||
| \usepackage{lmodern} | ||||
| \usepackage{amsfonts} | ||||
| \usepackage{mathtools} | ||||
| \usepackage{alphalph} | ||||
| \usepackage{algorithm} | ||||
| \usepackage{algpseudocode} | ||||
| \usepackage{wrapfig} | ||||
| \usepackage[polish]{babel} | ||||
| \usepackage{braket} | ||||
| \usepackage{subcaption} | ||||
| 
 | ||||
| \pgfplotsset{compat=1.15} | ||||
| 
 | ||||
| \DeclarePairedDelimiter\ceil{\lceil}{\rceil} | ||||
| \DeclarePairedDelimiter\floor{\lfloor}{\rfloor} | ||||
| 
 | ||||
| \usetikzlibrary{decorations.pathmorphing, arrows.meta, positioning} | ||||
| \usetikzlibrary{shapes.geometric, arrows} | ||||
| 
 | ||||
| \pgfdeclarelayer{background} | ||||
| \pgfdeclarelayer{foreground} | ||||
| \pgfsetlayers{background,main,foreground} | ||||
| 
 | ||||
| % opening | ||||
| \title{Analiza Techniczna - MACD \\ \normalsize Projekt \#1 z \texttt{MN}} | ||||
| \author{Kacper Donat} | ||||
| \newenvironment{column}[1]{\noindent\begin{minipage}{#1\linewidth}}{\end{minipage}\vspace{.5\baselineskip}} | ||||
| 
 | ||||
| \floatname{algorithm}{Program} | ||||
| 
 | ||||
| \begin{document} | ||||
| 
 | ||||
| \newcommand{\macd}[1]{\def\file{#1}\input{macd.tex}} | ||||
| 
 | ||||
| \maketitle | ||||
| 
 | ||||
| \begin{figure}[H] | ||||
|     \begin{tikzpicture} | ||||
|         \macd{msft.csv} | ||||
|     \end{tikzpicture} | ||||
|     \caption{XD} | ||||
| \end{figure} | ||||
| 
 | ||||
| \end{document} | ||||
							
								
								
									
										99
									
								
								trainer.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								trainer.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,99 @@ | ||||
| #include <vector> | ||||
| #include <functional> | ||||
| #include <iostream> | ||||
| #include <algorithm> | ||||
| 
 | ||||
| template<class T> | ||||
| struct trained { | ||||
|     unsigned int id; | ||||
|     T decider; | ||||
|      | ||||
|     double   monies; | ||||
|     unsigned stock; | ||||
| 
 | ||||
|     double   result; | ||||
| }; | ||||
| 
 | ||||
| template <class T> | ||||
| class trainer { | ||||
|     std::vector< trained<T>* > trainees; | ||||
|     std::function<T()> factory; | ||||
| 
 | ||||
|     unsigned int id; | ||||
| 
 | ||||
| public: | ||||
|     double money; | ||||
|     unsigned stock; | ||||
| 
 | ||||
|     trainer(double money, unsigned stock, std::size_t n, std::function<T()> factory)  | ||||
|         : factory(factory), id(0), money(money), stock(stock) | ||||
|     { | ||||
|         add(n); | ||||
|     } | ||||
| 
 | ||||
|     void add(std::size_t n, std::function<T()> factory) | ||||
|     { | ||||
|         for(std::size_t i = 0; i < n; i++) { | ||||
|             trained<T> *trainee = new trained<T>(); | ||||
|             trainee->id = ++id; | ||||
|             trainee->result = 0.0; | ||||
|             trainee->decider = factory(); | ||||
| 
 | ||||
|             trainees.push_back(trainee); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     void add(std::size_t n)  | ||||
|     { | ||||
|         add(n, factory); | ||||
|     } | ||||
| 
 | ||||
|     void test(std::istream& input) | ||||
|     { | ||||
|         for (auto trainee : trainees) { | ||||
|             trainee->monies = money; | ||||
|             trainee->stock  = stock; | ||||
| 
 | ||||
|             trainee->decider.start_money = money; | ||||
|             trainee->decider.start_stock = stock; | ||||
|         } | ||||
| 
 | ||||
|         double price, start; | ||||
|         input >> price; | ||||
|         start = price*stock + money; | ||||
| 
 | ||||
|         do { | ||||
|             for (auto trainee : trainees) { | ||||
|                 auto decision   = trainee->decider.decide(price, trainee->monies, trainee->stock); | ||||
|                 auto current    = price*trainee->stock + trainee->monies; | ||||
|                 auto max_credit = std::max(current * 0.05, -1e4); | ||||
| 
 | ||||
|                 /* std::cout << "D: " << decision << " C: " << current << " P: " << price << " MC: " << max_credit << std::endl; */  | ||||
|                 if (decision > 0 && trainee->monies - decision*price < -max_credit) { | ||||
|                     decision = floor((trainee->monies + max_credit) / price); | ||||
|                 } | ||||
| 
 | ||||
|                 if (decision < 0 && -decision > trainee->stock) { | ||||
|                     decision = -trainee->stock; | ||||
|                 } | ||||
| 
 | ||||
|                 trainee->stock  += decision; | ||||
|                 trainee->monies -= price*decision; | ||||
|             } | ||||
|         } while (input >> price); | ||||
| 
 | ||||
|         auto hodl = price * stock + money; | ||||
|         std::cout << "Zakonczono testy " << trainees.size() << " przypadkow." << std::endl; | ||||
|         std::cout << "HODL: " << hodl << " START: " << start << std::endl; | ||||
|         std::cout << "-----------------------" << std::endl; | ||||
| 
 | ||||
|         std::sort(trainees.begin(), trainees.end(), [=](trained<T> *a, trained<T> *b){ | ||||
|             return (a->monies + a->stock * price) > (b->monies + b->stock * price); | ||||
|         }); | ||||
| 
 | ||||
|         for (auto trainee : trainees) { | ||||
|             auto earned = trainee->monies + trainee->stock * price; | ||||
|             std::cout << "#" << trainee->id << ": " << earned << " [" << earned - hodl << "] " << trainee->stock << " akcji, " << trainee->monies << " gelda w banku. " << std::endl;  | ||||
|         } | ||||
|     } | ||||
| }; | ||||
							
								
								
									
										52
									
								
								wtf.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								wtf.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | ||||
| #include <iostream> | ||||
| #include <functional> | ||||
| #include <math.h> | ||||
| #include <typeinfo> | ||||
| #include <random> | ||||
| #include <ctime>  | ||||
| #include <algorithm> | ||||
| #include <vector> | ||||
| 
 | ||||
| #include "argh.h" | ||||
| #include "matrix.h" | ||||
| #include "network.h" | ||||
| #include "decider.h" | ||||
| #include "trainer.h" | ||||
| 
 | ||||
| int main(int argc, char* argv[]) | ||||
| { | ||||
|     argh::parser args; | ||||
|     args.add_params({"-m", "--money"}); | ||||
|     args.add_params({"-s", "--stock"}); | ||||
|     args.add_params({"-p", "--population"}); | ||||
|     args.parse(argc, argv); | ||||
| 
 | ||||
|     double   money; | ||||
|     unsigned stock, population; | ||||
| 
 | ||||
|     args({ "m", "money" }, 1000.)   >> money; | ||||
|     args({ "s", "stock" }, 1000)    >> stock; | ||||
|     args({ "p", "population" }, 25) >> population; | ||||
| 
 | ||||
|     std::uniform_real_distribution<double> distribution(-1.0, 1.0); | ||||
|     std::default_random_engine random_engine; | ||||
|     random_engine.seed(std::time(0)); | ||||
| 
 | ||||
|     std::function<double(const int&, const int&)> randomizer = [&](const int& i, const int& j) -> double { | ||||
|         return distribution(random_engine); | ||||
|     }; | ||||
| 
 | ||||
|     std::function<double(const double&)> normalizer = [](const double& result) -> double { return erf(result); }; | ||||
| 
 | ||||
|     using current_decider = neural_decider<24, 12, 12, 32, 16>; | ||||
| 
 | ||||
|     std::function<current_decider()> factory = [&]() -> current_decider { | ||||
|         current_decider decider(normalizer); | ||||
|         decider.network.fill(randomizer); | ||||
| 
 | ||||
|         return decider; | ||||
|     }; | ||||
| 
 | ||||
|     trainer<current_decider> train(money, stock, population, factory); | ||||
|     train.test(std::cin); | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user