mt4hstcvt

Форк
0
/
main.cpp 
127 строк · 2.5 Кб
1
#include <hstfmt.h>
2

3
#include <chrono>
4
#include <cstdlib>
5
#include <fstream>
6
#include <iostream>
7
#include <deque>
8

9

10
static std::ostream& operator<<(std::ostream& os, const hst::bar& bar)
11
{
12
    const char del[] = ",";
13

14
    time_t ctm = static_cast<time_t>(bar.ctm);
15
    tm bartm{};
16
    gmtime_s(&bartm, &ctm);
17

18
    char buff[32];
19
    sprintf_s(buff, sizeof(buff), "%04d.%02d.%02d,%02d:%02d",
20
        1900 + bartm.tm_year, 1 + bartm.tm_mon, bartm.tm_mday,
21
        bartm.tm_hour, bartm.tm_min);
22

23
    os << buff << del << bar.open << del << bar.high << del
24
        << bar.low << del << bar.close << del << bar.volume;
25
    return os;
26
}
27

28
static int csv(std::ostream& os, hst::dataset& data)
29
{
30
    os << "DATE,TIME,OPEN,HIGH,LOW,CLOSE,VOLUME" << std::endl;
31

32
    if (!os)
33
    {
34
        std::cerr << "failed to write out file" << std::endl;
35
        return 2;
36
    }
37

38
    auto old_prec = os.precision();
39
    os.precision(5);
40
    os << std::fixed;
41

42
    data.each([&os](const auto& bar)
43
        {
44
            os << bar << std::endl;
45
        });
46

47
    os.precision(old_prec);
48
    os << std::defaultfloat;
49

50
    if (!os)
51
    {
52
        std::cerr << "failed to write out file" << std::endl;
53
        return 2;
54
    }
55

56
    return 0;
57
}
58

59
static void help()
60
{
61
    std::cerr << "mt4hstcvt, version 0.1, copyright (c) deep-fx 2024, MIT License" << std::endl
62
        << "Usage:" << std::endl
63
        << "  mt4hstcvt [-o csv-file] hst-file" << std::endl
64
        ;
65
}
66

67
int main(int argc, char* argv[])
68
{
69
    if (argc < 2)
70
    {
71
        help();
72
        return 1;
73
    }
74

75
    std::deque<std::string> args{ argv + 1, argv + argc };
76

77
    std::string out_path{};
78
    auto& tmp = args.front();
79

80
    if (tmp == "-o")
81
    {
82
        args.pop_front();
83
        if (args.empty())
84
        {
85
            help();
86
            return 1;
87
        }
88
        out_path = args.front();
89
        args.pop_front();
90
    }
91

92
    if (args.empty())
93
    {
94
        help();
95
        return 1;
96
    }
97

98
    std::string in_path = args.front();
99

100
    try
101
    {
102
        hst::dataset d{ in_path };
103

104
        if (out_path.empty())
105
        {
106
            return csv(std::cout, d);
107
        }
108
        else
109
        {
110
            std::ofstream os{ out_path };
111
            if (!os)
112
            {
113
                std::cerr << "cannot open file: " << out_path << std::endl;
114
                return 2;
115
            }
116

117
            return csv(os, d);
118
        }
119
    }
120
    catch (const hst::dataset_error& ex)
121
    {
122
        std::cerr << ex.what() << std::endl;
123
        return 3;
124
    }
125

126
    return 0;
127
}
128

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.