открыл я то что написано в тслабе: using System; using System.Collections.Generic; using TSLab.Script; using TSLab.Script.Handlers; using TSLab.DataSource; using TSLab.Script.Helpers;
namespace WAD_ { public class WAD : IBar2DoubleHandler, IContextUses { public IList<double> Execute(ISecurity source) { var Close = source.ClosePrices; var High = source.HighPrices; var Low = source.LowPrices; IList<double> wad1 = new List<double>(Close.Count); double wad_v=0; double AD, TRH, TRL;
wad1.Add(wad_v);
for (int i = 1; i < Close.Count; i++) { TRH = Math.Max(High[i], Close[i-1]); TRL = Math.Min(Low[i], Close[i-1]); if(Close[i] > Close[i-1]) AD = Close[i] - TRL; else if(Close[i] < Close[i-1]) AD = Close[i] - TRH; else AD = 0; wad_v=wad1[i-1]+AD; wad1.Add(wad_v); } return wad1; }
public IContext Context { get; set; } } }
это тоже самое (всё правильно или нет) как написано в квике:
Вычисление: CumWADn = CumWadn-1 + WADn,
где:
WADn = PRICEn - TL, если PRICEn > PRICEn-1, WADn = PRICEn - TH, если PRICEn < PRICEn-1, WADn = 0, если PRICEn = PRICEn-1, TH = max(PRICEn-1, HIGHn) - истинный диапазон пиков, TL = min(PRICEn-1, LOWn) – истинный диапазон донышек, PRICEn – цена закрытия в n-ом интервале, HIGH – максимальное значение цены в n-ом интервале, LOW – минимальное значение цены в n-ом интервале.