110,539
社区成员
发帖
与我相关
我的任务
分享
List<double> list10= new List<double>();
while (true)
{
int n = new Random().Next(100, 200);
Thread.Sleep(1000);
}
n
M = ∑Ci
i=1
即 Mn+1 = Mn - C1-n + Cn+1
缓存次序列,使用时再做除法
由于历史数据不会再改变,你完全可以对数据做持久化保存
股软中都有用到 db2 或 sqlite 数据库的
static void Stock()
{
var d = File.ReadLines("HS.txt").ToList();
var stock = new List<string[]>();
var flag = new string[] {"\t\t"};
for (var i = 0; i < d.Count; i++)
{
if (i >= 2) stock.Add(d[i].Split(flag, StringSplitOptions.RemoveEmptyEntries));
}
DateTime time1 = DateTime.Now;
var ma10 = 0f;
var MA10 = new float[stock.Count];
for (var i = 0; i < stock.Count; i++)
{
var c = float.Parse(stock[i][4]);
ma10 += c;
if(i >= 10)
{
ma10 -= float.Parse(stock[i-10][4]);
MA10[i] = (float)Math.Round(ma10 / 10, 3);
}
}
var sss = (DateTime.Now - time1).TotalMilliseconds;
Console.WriteLine(stock.Count);
Console.WriteLine("{0} {1} {2}", sss, ma10, MA10[MA10.Length - 1]);
time1 = DateTime.Now;
sss = (DateTime.Now - time1).TotalMilliseconds;
var t = stock.Select(x => float.Parse(x[4])).Reverse().ToList();
var q10 = t.Select((x, Index) => t.GetRange(Index, Math.Min(10, t.Count-Index)).Average()).Reverse().ToList();
var q60 = t.Select((x, Index) => t.GetRange(Index, Math.Min(60, t.Count - Index)).Average()).Reverse().ToList();
Console.WriteLine(stock.Count);
Console.WriteLine("{0} {1} {2} {3}", sss, ma10, q10[q10.Count - 1], q60[q60.Count - 1]);
}
public static List<Pub.Stock> GetStockMA2(List<Pub.Stock> Stock,ref double tt)
{
int num = Stock.Count;
var MA10 = new double[num];
var MA60 = new double[num];
var ma10 = 0d;
var ma60 = 0d;
DateTime time1 = DateTime.Now;
List<Pub.Stock> lists = new List<Pub.Stock>();
for (int i = Stock.Count - 1; i > 0; i--)
{
ma10 += Stock[i].Close;
ma60 += Stock[i].Close;
if (i == 9) MA10[i] = ma10 / 10;
if (i == 59) MA60[i] = ma60 / 60;
if (i > 9)
{
ma10 -= Stock[i - 10].Close;
MA10[i] = ma10 / 10;
}
if (i > 59)
{
ma60 -= Stock[i - 60].Close;
MA60[i] = ma60 / 60;
}
Pub.Stock stock2 = new Pub.Stock();
stock2.code = Stock[i].code;
stock2.tradedate = Stock[i].tradedate;
stock2.Open = Stock[i].Open;
stock2.Close = Stock[i].Close;
stock2.High = Stock[i].High;
stock2.Low = Stock[i].Low;
stock2.MA10 = MA10[i];
stock2.MA60 = MA60[i];
lists.Add(stock2);
}
double sss = (DateTime.Now - time1).TotalMilliseconds;
return lists;
}
int num = Stock.Count;
var MA10 = new float[num];
var MA60 = new fload[num];
var ma10 = 0f;
var ma60 = 0f;
for(vat i = 0; i < num; i++)
{
ma10 += Stock[i].Close;
ma60 += Stock[i].Close;
if(i == 9) MA10[i] = ma10 / 10;
if(i ==59) MA60[i] = ma60 / 60;
if(i > 9)
{
ma10 -= Stock[i-10].Close;
MA10 = ma10 / 10;
}
if(i > 59)
{
ma60 -= Stock[i-60].Close;
MA60 = ma60 / 60;
}
}
我说的是这个意思 /// <summary>
/// 计算MA
/// </summary>
/// <param name="stock"></param>
/// <returns></returns>
public static List<Pub.Stock> GetStockMA(List<Pub.Stock> Stock)
{
DateTime time1 = DateTime.Now;
List<Pub.Stock> lists = new List<Pub.Stock>();
for (int i = Stock.Count - 1; i > 0; i--)
{
double MA10 = MAValue(Stock, 10, i);
double MA60 = MAValue(Stock, 60, i);
Pub.Stock stock2 = new Pub.Stock();
stock2.code = Stock[i].code;
stock2.tradedate = Stock[i].tradedate;
stock2.Open = Stock[i].Open;
stock2.Close = Stock[i].Close;
stock2.High = Stock[i].High;
stock2.Low = Stock[i].Low;
stock2.MA10 = MA10;
stock2.MA60 = MA60;
lists.Add(stock2);
}
double sss = (DateTime.Now - time1).TotalMilliseconds;
return lists;
}
/// <summary>
/// 计算MA
/// </summary>
/// <param name="stock"></param>
/// <param name="ma"></param>
/// <returns></returns>
static double MAValue(List<Pub.Stock> stock, int ma, int start)
{
double temp = 0;
try
{
for (int i = start; i > start - ma; i--)
{
temp += stock[i].Close;
}
temp = temp / ma;
return Math.Round(temp, 2);
}
catch { return 0; }
}