2. 交易趨勢預測的程式設計

# 題目要看清楚...

Console.WriteLine("最高價:");
var highest = Console.ReadLine().Split(' ').Select(double.Parse).ToList();
Console.WriteLine("收盤價:");
var close = Console.ReadLine().Split(' ').Select(double.Parse).ToList();
Console.WriteLine("最低價:");
var lowest = Console.ReadLine().Split(' ').Select(double.Parse).ToList();

double adxFirst = 0;
List<double> adx = new List<double>();
for (int i = 19; i < highest.Count; i++)
{
    double dxAvg = 0;
    for (int k = i - 10 + 1; k <= i; k++)
    {
        Console.WriteLine(k);
        double pdmAvg = 0;
        double mdmAvg = 0;
        double trAvg = 0;
        for (int j = k - 10 + 1; j <= k; j++) // 10, 20
        {
            double pdm = Math.Max(highest[j] - highest[j - 1], 0);
            double mdm = Math.Max(lowest[j - 1] - lowest[j], 0);

            if (pdm == mdm)
            {
                pdm = 0;
                mdm = 0;
            }
            else if (pdm > mdm) mdm = 0;
            else pdm = 0;

            pdmAvg += pdm;
            mdmAvg += mdm;


            double tr = Math.Max(Math.Max(
                    Math.Abs(highest[j] - lowest[j]),
                    Math.Abs(highest[j] - close[j - 1])
                    ), Math.Abs(lowest[j] - close[j - 1]));
            trAvg += tr;
        }
        pdmAvg /= 10;
        mdmAvg /= 10;
        trAvg /= 10;

        double pdi = pdmAvg / trAvg;
        double mdi = mdmAvg / trAvg;

        dxAvg += 100 * Math.Abs(pdi - mdi) / (pdi + mdi);
    }
    dxAvg /= 10;
    if (i == 19) adxFirst = dxAvg;
    else
        adx.Add(dxAvg);
}

Console.Write("ADX : ");
foreach (var item in adx)
{
    Console.Write($"{item:0.00}\t");
}
Console.Write("\n預測: \t");
adx.Insert(0, adxFirst);
for (int i = 1; i < adx.Count; i++)
{
    Console.Write($"{(adx[i] >= adx[i - 1] ? "1" : "0")}\t");
}

Last updated