MACD的公式
DIFF : EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);
DEA : EMA(DIFF,M);
MACD : 2*(DIFF-DEA), COLORSTICK;
它的变量是可以直接进行加减*除的,但是我们要知道,它里面的Close这个东西实际上也是一个数组类型的。同过总结分析我们可以知道。我们在C#当中可以使用操作符重载来实现数组的相加相减,或者运算。但是数组这个东西是系统自带的类型,我们是没有办法对它再进行操作符的重载,所以我们自己需要构造成一个类型出来。
创造了一个类型是 FloatList类型,
public class FloatList : List<float>
{
public FloatList()
{ }
public FloatList(int length):base(length)
{}
public FloatList(IEnumerable<float> input)
: base(input)
{ }
public static FloatList operator +(FloatList input,float m)
{
FloatList list = new FloatList();
for(int i=0;i<input.Count;i++)
{
list.Add(input[i] + m);
}
return list;
}
...其它的省略
}
{
public FloatList()
{ }
public FloatList(int length):base(length)
{}
public FloatList(IEnumerable<float> input)
: base(input)
{ }
public static FloatList operator +(FloatList input,float m)
{
FloatList list = new FloatList();
for(int i=0;i<input.Count;i++)
{
list.Add(input[i] + m);
}
return list;
}
...其它的省略
}
因为股票里面的数据实际上就是Float类型了。
这样你就可以对它进行操作符的重载了。
再接下来你要实现的是一个种全局函数,实现的方式是通过父类来实现的。如果在是脚本语言的话,还可以用其它的方式。
这样的话你只要让你的类去继承BaseFunctions类就可以实现了。
看我们的一个例子
public class MACDHelper:BaseFunctions
{
/// <summary>
/// DIFF : EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);
/// DEA : EMA(DIFF,M);
/// MACD : 2*(DIFF-DEA), COLORSTICK;
/// </summary>
/// <param name="list"></param>
/// <param name="?"></param>
/// <returns></returns>
public MacdInfo Calculate(List<StockLog> list,int l,int s,int m)
{
this.StockLogs = list;
var diff = EMA(CLOSE,s) - EMA(CLOSE,l);
var dea = EMA(diff,m);
var macd = (diff - dea) *2;
MacdInfo info = new MacdInfo();
info.DEA = dea;
info.Diff = diff;
info.MACD = macd;
return info;
}
{
/// <summary>
/// DIFF : EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);
/// DEA : EMA(DIFF,M);
/// MACD : 2*(DIFF-DEA), COLORSTICK;
/// </summary>
/// <param name="list"></param>
/// <param name="?"></param>
/// <returns></returns>
public MacdInfo Calculate(List<StockLog> list,int l,int s,int m)
{
this.StockLogs = list;
var diff = EMA(CLOSE,s) - EMA(CLOSE,l);
var dea = EMA(diff,m);
var macd = (diff - dea) *2;
MacdInfo info = new MacdInfo();
info.DEA = dea;
info.Diff = diff;
info.MACD = macd;
return info;
}
}