用.NET语言写出计算股票技术指标BRAR,第一个参数为datatable类型,返回值为datatable类型,double类型全部四舍五入保留3位小数,请写好函数和参数的详细注释。
时间: 2023-05-20 15:01:14 浏览: 97
关于值类型与列类型不匹配,所需类型是 DataRow的解决方案
4星 · 用户满意度95%
以下是用.NET语言编写计算股票技术指标BRAR的函数和参数详细注释:
```
/// <summary>
/// 计算股票技术指标BRAR
/// </summary>
/// <param name="dt">股票数据表,包含以下列:日期、开盘价、最高价、最低价、收盘价、成交量</param>
/// <returns>计算结果表,包含以下列:日期、BR、AR</returns>
public static DataTable CalculateBRAR(DataTable dt)
{
DataTable result = new DataTable();
result.Columns.Add("日期", typeof(DateTime));
result.Columns.Add("BR", typeof(double));
result.Columns.Add("AR", typeof(double));
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow row = dt.Rows[i];
DateTime date = Convert.ToDateTime(row["日期"]);
double open = Convert.ToDouble(row["开盘价"]);
double high = Convert.ToDouble(row["最高价"]);
double low = Convert.ToDouble(row["最低价"]);
double close = Convert.ToDouble(row["收盘价"]);
double volume = Convert.ToDouble(row["成交量"]);
double BR = 0;
double AR = 0;
if (i == 0)
{
BR = 100;
AR = 100;
}
else
{
double lastClose = Convert.ToDouble(dt.Rows[i - 1]["收盘价"]);
double lastHigh = Convert.ToDouble(dt.Rows[i - 1]["最高价"]);
double lastLow = Convert.ToDouble(dt.Rows[i - 1]["最低价"]);
double BR1 = (high - lastClose) / (lastHigh - lastLow) * 100;
double BR2 = (lastClose - low) / (lastHigh - lastLow) * 100;
BR = (BR1 + BR2) / 2;
double AR1 = (high - open) / volume * 100;
double AR2 = (open - low) / volume * 100;
AR = (AR1 + AR2) / 2;
}
result.Rows.Add(date, Math.Round(BR, 3), Math.Round(AR, 3));
}
return result;
}
```
该函数接受一个DataTable类型的股票数据表作为参数,返回一个DataTable类型的计算结果表。计算结果表包含三列:日期、BR、AR。BR和AR均为double类型,保留3位小数。
计算BR和AR的具体算法如下:
BR = ((最高价 - 前一日收盘价) / (前一日最高价 - 前一日最低价) + (前一日收盘价 - 最低价) / (前一日最高价 - 前一日最低价)) / 2
AR = ((最高价 - 开盘价) / 成交量 + (开盘价 - 最低价) / 成交量) / 2
其中,第一天的BR和AR均为100。
注意:该函数未进行参数有效性验证,调用前需要确保传入的DataTable包含正确的列名和数据类型。
阅读全文