用.NET语言写出计算股票技术指标BRAR,2个参数,第一个参数为datatable类型,其他为int型,返回值为datatable类型,double类型全部四舍五入保留3位小数,请写好函数和参数的详细注释。
时间: 2023-05-20 17:00:52 浏览: 144
SqlServer参数化查询之where in和like实现之xml和DataTable传参介绍
以下是用.NET语言编写计算股票技术指标BRAR的函数:
```
/// <summary>
/// 计算股票技术指标BRAR
/// </summary>
/// <param name="data">股票数据表格</param>
/// <param name="n">计算周期</param>
/// <param name="m">计算参数</param>
/// <returns>BRAR指标表格</returns>
public static DataTable CalculateBRAR(DataTable data, int n, int m)
{
DataTable result = new DataTable();
result.Columns.Add("日期", typeof(DateTime));
result.Columns.Add("BR", typeof(double));
result.Columns.Add("AR", typeof(double));
if (data.Rows.Count < n)
{
throw new ArgumentException("数据行数不足以计算BRAR指标");
}
double[] br = new double[data.Rows.Count];
double[] ar = new double[data.Rows.Count];
for (int i = 0; i < data.Rows.Count; i++)
{
double high = Convert.ToDouble(data.Rows[i]["最高价"]);
double low = Convert.ToDouble(data.Rows[i]["最低价"]);
double open = Convert.ToDouble(data.Rows[i]["开盘价"]);
double close = Convert.ToDouble(data.Rows[i]["收盘价"]);
double volume = Convert.ToDouble(data.Rows[i]["成交量"]);
double br1 = 0;
double br2 = 0;
double ar1 = 0;
double ar2 = 0;
if (i >= n)
{
double sum1 = 0;
double sum2 = 0;
for (int j = i - n + 1; j <= i; j++)
{
double h = Convert.ToDouble(data.Rows[j]["最高价"]);
double l = Convert.ToDouble(data.Rows[j]["最低价"]);
double o = Convert.ToDouble(data.Rows[j]["开盘价"]);
double c = Convert.ToDouble(data.Rows[j]["收盘价"]);
sum1 += Math.Max(0, h - close);
sum2 += Math.Max(0, close - l);
}
br1 = sum1 / sum2 * 100;
br2 = br[i - 1] * (n - 1) / n + br1 / n;
ar1 = sum2 / sum1 * 100;
ar2 = ar[i - 1] * (n - 1) / n + ar1 / n;
}
br[i] = Math.Round(br2, 3);
ar[i] = Math.Round(ar2, 3);
if (i >= n + m - 1)
{
double sum3 = 0;
double sum4 = 0;
for (int j = i - m + 1; j <= i; j++)
{
sum3 += br[j];
sum4 += ar[j];
}
double brar = sum3 / sum4 * 100;
result.Rows.Add(data.Rows[i]["日期"], brar, ar[i]);
}
}
return result;
}
```
其中,参数`data`为股票数据表格,包含以下列:日期、开盘价、最高价、最低价、收盘价、成交量。参数`n`为计算周期,参数`m`为计算参数。返回值为BRAR指标表格,包含以下列:日期、BR、AR。
函数的实现过程如下:
1. 创建BRAR指标表格,并添加列名。
2. 检查数据行数是否足够计算BRAR指标。
3. 创建两个数组`br`和`ar`,用于存储BR和AR的计算结果。
4. 遍历数据表格,计算每一行的BR和AR。
5. 将计算结果存入数组`br`和`ar`中。
6. 如果已经计算了足够的数据行数,计算BRAR指标并添加到结果表格中。
7. 返回BRAR指标表格。
注意,本函数中使用了`Math.Max`函数,用于取两个数中的较大值。此外,由于涉及到浮点数的计算,需要注意精度问题,本函数中使用了`Math.Round`函数将结果四舍五入保留3位小数。
阅读全文