2. 股價分析程式

題目Excel資料有誤... 資測資料與題目不符

# bad sorting

all.Sort(new Comparison<object[]>((r, x) =>
{
    double a = (double)r[1];
    double b = (double)x[1];
    if (a == b) return 0;
    if (a > b) return -1;
    return 1;
}));

# good sorting

all.OrderByDescending(e => (double)e[1]).ToList();

using System.Reflection.Metadata.Ecma335;

Console.WriteLine("讀入 ./10809.txt 檔");

List<Object[]> data = new List<object[]>();
foreach (var item in File.OpenText(AppDomain.CurrentDomain.BaseDirectory + "/10809.txt").ReadToEnd().Split('\n'))
{
    var t = item.Split(' ');
    data.Add(new Object[] {
        t[0],
        t[1],
        double.Parse(t[2]),
        double.Parse(t[3]),
        double.Parse(t[4]),
        double.Parse(t[5]),
        double.Parse(t[6]),
        int.Parse(t[7]),
        double.Parse(t[6])-           double.Parse(t[2]),
        (double.Parse(t[6])-           double.Parse(t[2]))/  double.Parse(t[2])
 });
};

data.Sort(new Comparison<object[]>((r, x) =>
{
    double a = (double)r[8];
    double b = (double)x[8];
    if (a == b) return 0;
    if (a > b) return -1;
    return 1;
}));
Console.WriteLine($"漲跌價最高之3支股票(漲價元) : {string.Join(" ", data.Take(3).Select(e => $"{e[1]}({e[8]:0.00})"))}");
data.Sort(new Comparison<object[]>((r, x) =>
{
    double a = (double)r[8];
    double b = (double)x[8];
    if (a == b) return 0;
    if (a > b) return 1;
    return -1;
}));
Console.WriteLine($"漲跌價最高之3支股票(跌價元) : {string.Join(" ", data.Take(3).Reverse().Select(e => $"{e[1]}({e[8]:0.00})"))}");
data.Sort(new Comparison<object[]>((r, x) =>
{
    double a = (double)r[9];
    double b = (double)x[9];
    if (a == b) return 0;
    if (a > b) return -1;
    return 1;
}));
Console.WriteLine($"漲跌幅最高之3支股票(漲幅%) : {string.Join(" ", data.Take(3).Select(e => $"{e[1]}({((double)e[9] * 100):0.00}%)"))}");
data.Sort(new Comparison<object[]>((r, x) =>
{
    double a = (double)r[9];
    double b = (double)x[9];
    if (a == b) return 0;
    if (a > b) return 1;
    return -1;
}));
Console.WriteLine($"漲跌幅最低之3支股票(跌幅%) : {string.Join(" ", data.Take(3).Reverse().Select(e => $"{e[1]}({((double)e[9] * 100):0.00}%)"))}");
var all = new List<Object[]>();
data.ForEach(e =>
{
    var close = (double)e[2];
    double up = 0.01;
    if (close >= 1000) up = 5;
    else if (close >= 500) up = 1;
    else if (close >= 100) up = 0.5;
    else if (close >= 50) up = 0.1;
    else if (close >= 10) up = 0.05;

    var d = (int)(close * 0.1 / up);
    var stop = close + d * up;

    if ((double)e[6] >= stop)
    {
        all.Add(new[] { e[1], e[8] });
    }
});
all.Sort(new Comparison<object[]>((r, x) =>
{
    double a = (double)r[1];
    double b = (double)x[1];
    if (a == b) return 0;
    if (a > b) return -1;
    return 1;
}));
Console.WriteLine($"所有漲停股票(漲停價元) : {string.Join(" ", all.Select(e => $"{e[0]}({e[1]:0.##})"))}");
all.Clear();
data.ForEach(e =>
{
    var close = (double)e[2];
    double up = 0.01;
    if (close >= 1000) up = 5;
    else if (close >= 500) up = 1;
    else if (close >= 100) up = 0.5;
    else if (close >= 50) up = 0.1;
    else if (close >= 10) up = 0.05;

    var d = (int)(close * 0.1 / up);
    var stop = close - d * up;

    if ((double)e[6] <= stop)
    {
        all.Add(new[] { e[1], e[8] });
    }
});
all.Sort(new Comparison<object[]>((r, x) =>
{
    double a = (double)r[1];
    double b = (double)x[1];
    if (a == b) return 0;
    if (a > b) return -1;
    return 1;
}));
Console.WriteLine($"所有跌停股票(跌停價元) : {string.Join(" ", all.Select(e => $"{e[0]}({e[1]:0.##})"))}");

Last updated