Пример #1
0
        public static DataSeries <Value> Trim(this DataSeries <Value> values, double value)
        {
            var first = values.First(x => x.Val != value).Timestamp;
            var last  = values.Reverse().First(x => x.Val != value).Timestamp;

            return(values.From(first).To(last));
        }
Пример #2
0
        public static double CalcMaxDrawdownPercent(DataSeries <Value> accountValue)
        {
            bool   inDrawdown         = false;
            var    last               = (double)accountValue.First();
            var    lastHigh           = last;
            double worstInDrawdown    = double.PositiveInfinity;
            double maxDrawdownPercent = 0;

            foreach (var v in accountValue.Skip(1))
            {
                inDrawdown = inDrawdown || v < last;
                if (!inDrawdown)
                {
                    lastHigh = Math.Max(lastHigh, v);
                }
                else
                {
                    worstInDrawdown = Math.Min(worstInDrawdown, v);
                    if (v >= lastHigh)
                    {
                        inDrawdown         = false;
                        maxDrawdownPercent = Math.Max(maxDrawdownPercent, (lastHigh - worstInDrawdown) / lastHigh);
                        lastHigh           = v;
                        worstInDrawdown    = double.PositiveInfinity;
                    }
                }
                last = v;
            }

            return(maxDrawdownPercent);
        }
Пример #3
0
        public static DataSeries <Value> SignalAccuracy(this DataSeries <Bar> bars, DataSeries <Value> signal)
        {
            var bs = bars.From(signal.First().Timestamp);

            return(bs.ZipElements <Value, Value>(signal, (b, s, v) =>
                                                 s[0] == 0 ? 0 :
                                                 b[0].IsGreen == (s[0] > 0) ? 1 :
                                                 -1));
        }