ほったからし投資

良い子も悪い子も真似しないこと。米国株式投資なんてやめておきなさい。

FXのシミュレーション用のプログラム

このエントリーをはてなブックマークに追加

自動化ルールで取引した場合の実績を計算するために書いた。

FXの為替情報を自動で取得している(公開停止中。ホストを見つけたら公開予定)が取得したデータを特定のルールに基づいて売買した場合どのような結果になるかを確かめるためのコードを書いた。

以下、ご自由にご利用ください。 使い方がわからない方はあきらめたほうが良いです。

#include<vector>
#include<string>
#include<map>
#include<iostream>
#include<boost/filesystem.hpp>
#include<boost/range/iterator_range.hpp>
#include<boost/tokenizer.hpp>
#include<boost/date_time.hpp>
#include<boost/foreach.hpp>

void load(std::vector<std::vector<std::string>> & contents, boost::filesystem::path & p)
{
    using namespace boost::filesystem;

    ifstream input(p);

    std::string buf;

    // tokenize
    typedef boost::char_separator<char>     BOOST_CHAR_SEP;
    typedef boost::tokenizer< BOOST_CHAR_SEP > BOOST_TOKENIZER;

    while (getline(input, buf))
    {
        std::vector<std::string> content;

        BOOST_CHAR_SEP sep(",");
        BOOST_TOKENIZER tokens(buf, sep);

        long count = 0;

        BOOST_FOREACH(std::string s, tokens)
        {
            if (count % 3 == 0)
            {
                content.push_back(s.substr(0, 8));
                count++;
            }
            else
            {
                content.push_back(s);
                count++;
            }
        }

        contents.push_back(content);
    }
}

int main(int argc, char * argv[])
{
    boost::filesystem::path p(argc > 1 ? argv[1] : ".");

    using boost::gregorian::date;

    std::string start = "2017-05-07";

    date day = boost::gregorian::from_string(start);

    boost::gregorian::date_duration next_day(1);

    boost::filesystem::path i_path(boost::gregorian::to_iso_extended_string(day) + ".csv");

    while (boost::filesystem::exists(i_path))
    {
        std::cout << "processing " << day << std::endl;

        // load data
        std::vector<std::vector<std::string>> data;

        load(data, i_path);

        /******************************************************************************************/
        /*                                  ここに処理等を記述                                    */
        /******************************************************************************************/



        /******************************************************************************************/
        /*                                        ここまで                                        */
        /******************************************************************************************/

        day += next_day;

        // update new file.
        i_path = boost::filesystem::path(boost::gregorian::to_iso_extended_string(day) + ".csv");
    }

    return 0;
}