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