Example #1
0
        private string Formula_EMA(SchemaInstrument formula, LocalFormula localFormula, List <int> selectedIndex, List <RecordInstrument> values)
        {
            var retval      = string.Empty;
            var closing     = GetDouble(selectedIndex.Count - 1, localFormula, selectedIndex, values);
            var previous    = GetValueInstrument(selectedIndex.Count - 2, selectedIndex, values);
            var previousEma = Double.Parse(previous.Values[localFormula.Items[0].FieldName]);

            if (previousEma == 0)
            {
                var sum = 0d;
                for (var i = 1; i < selectedIndex.Count; i++)
                {
                    sum += GetDouble(i, localFormula, selectedIndex, values);
                }

                var avg = (sum / (selectedIndex.Count - 1));
                retval = (avg == 0 ? null : avg.ToString());
            }
            else
            {
                var multiplier = (2d / (selectedIndex.Count + 1));
                var ema        = closing * multiplier + previousEma * (1 - multiplier);
                retval = (ema == 0 ? null : ema.ToString());
            }

            return(retval);
        }
Example #2
0
        private double GetInt(int index, LocalFormula localFormula, List <int> selectedIndex, List <RecordInstrument> values)
        {
            var value = GetValueInstrument(index, selectedIndex, values);
            var item  = localFormula.Items[index];

            return(Int32.Parse(value.Values[item.FieldName]));
        }
Example #3
0
        private string GetString(int index, LocalFormula localFormula, List <int> selectedIndex, List <RecordInstrument> values)
        {
            var value = GetValueInstrument(index, selectedIndex, values);
            var item  = localFormula.Items[index];

            return(value.Values[item.FieldName]);
        }
Example #4
0
        //private int GetRange(RecordInstrument target, List<RecordInstrument> values, enmUnit unit, int position, int max)
        //{
        //    var retval = -1;

        //    if (unit == enmUnit.seconds)
        //    {
        //        var fromMilliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds() - (Math.Abs(position) * 1000);
        //        var toMilliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds() - (Math.Abs(position) * 1000);
        //        retval = values.FindLastIndex(x => x.Time < fromMilliseconds);
        //    }
        //    else if (unit == enmUnit.ticks)
        //    {
        //        retval = (values.Count - max + position - 1);
        //    }

        //    return retval;
        //}

        private List <int> GetSelected(List <RecordInstrument> values, LocalFormula localFormula)
        {
            var retval = new List <int>();

            if (localFormula.Type == enmType.formula && values.Count >= localFormula.Range && values.Count > 0 && localFormula.Items.Count > 0)
            {
                var targetPosition = (values.Count - localFormula.Max + localFormula.Items[0].Position - 1);
                retval.Add(targetPosition);

                for (var i = 1; i < localFormula.Items.Count; i++)
                {
                    var row = localFormula.Items[i];

                    //if (localFormula.Unit == enmUnit.ticks)
                    retval.Add(values.Count - localFormula.Max + row.Position - 1);
                    //else if (localFormula.ValueType == enmValueType.single || localFormula.ValueType == enmValueType.scale)
                    //{
                    //    var milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds() - (Math.Abs(row.Position) * 1000);
                    //    retval.Add(values.FindLastIndex(x => x.Time < milliseconds));
                    //}
                    //else if (localFormula.ValueType == enmValueType.range)
                    //{
                    //    var fromMilliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds() - (Math.Abs(row.Position) * 1000);
                    //    var toMilliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds() - (Math.Abs(localFormula.Items[i + 1].Position) * 1000);

                    //    foreach (var valueInstrument in values.FindAll(x => x.Time <= fromMilliseconds && x.Time >= toMilliseconds)) {
                    //        retval.Add(values.IndexOf(valueInstrument));
                    //    }

                    //    break;
                    //}
                }
            }
            else if (localFormula.Type == enmType.capture)
            {
                retval.Add(values.Count - 1);
            }

            return(retval);
        }
Example #5
0
        private bool CheckValid(List <RecordInstrument> values, List <int> selectedIndex, LocalFormula localFormula)
        {
            var retval = true;

            for (var i = 0; i < selectedIndex.Count; i++)
            {
                if (string.IsNullOrEmpty(values[selectedIndex[i]].Values[localFormula.Items[i].FieldName]) && localFormula.Items[i].FieldName != localFormula.Key)
                {
                    retval = false;
                    break;
                }
            }

            return(retval);
        }
Example #6
0
        private LocalFormula GetUnit(SchemaInstrument formula)
        {
            var retval = new LocalFormula();

            if (CachedFormula.ContainsKey(formula.CacheKey))
            {
                retval = CachedFormula[formula.CacheKey];
            }
            else
            {
                retval.Key = formula.Key;

                retval.Items    = new List <LocalFormula.ItemInfo>();
                retval.Value    = formula.Value;
                retval.Unit     = formula.Unit;
                retval.Type     = formula.Type;
                retval.DataType = formula.DataType;

                int min = int.MaxValue;
                int max = int.MinValue;

                if (formula.Transform != null)
                {
                    var transforms = formula.Transform.Split(';');

                    for (var i = 0; i < transforms.Length; i++)
                    {
                        retval.Transform = new Dictionary <string, List <string> >();
                        var items = transforms[i].Split(',');
                        var args  = new string[items.Length - 1];
                        Array.Copy(items, 1, args, 0, args.Length);

                        retval.Transform.Add(items[0], args.ToList <string>());
                    }
                }

                var fields = retval.Value.Split(';');

                if (formula.Type == enmType.formula)
                {
                    for (var i = 0; i < fields.Length; i++)
                    {
                        var item = fields[i].Split(',');
                        if (item.Length == 2)
                        {
                            var fieldName = item[0];

                            var selectedRows = item[1];
                            retval.ValueType = (selectedRows.Contains('>') ? enmValueType.range : (selectedRows.Contains('~') ? enmValueType.scale : enmValueType.single));

                            if (retval.ValueType == enmValueType.single)
                            {
                                var y = int.Parse(selectedRows);
                                min = Math.Min(min, y);
                                max = Math.Max(max, y);
                                retval.Items.Add(new LocalFormula.ItemInfo(fieldName, y));
                            }
                            else if (retval.ValueType == enmValueType.range) // && retval.Unit == enmUnit.ticks)
                            {
                                var range = selectedRows.Split(">");
                                var a     = int.Parse(range[0]);
                                var b     = int.Parse(range[1]);
                                if (a > b)
                                {
                                    (a, b) = (b, a);
                                }

                                for (var x = a; x <= b; x++)
                                {
                                    min = Math.Min(min, x);
                                    max = Math.Max(max, x);
                                    retval.Items.Add(new LocalFormula.ItemInfo(fieldName, x));
                                }
                            }
                            //else if (retval.ValueType == enmValueType.range && retval.Unit == enmUnit.seconds)
                            //{
                            //    var range = selectedRows.Split(">");
                            //    var a = int.Parse(range[0]);
                            //    var b = int.Parse(range[1]);
                            //    retval.Items.Add(new LocalFormula.ItemInfo(fieldName, a));
                            //    retval.Items.Add(new LocalFormula.ItemInfo(fieldName, b));
                            //}
                            else
                            {
                                var range = selectedRows.Split("~");
                                foreach (var x in range)
                                {
                                    var y = int.Parse(x);
                                    min = Math.Min(min, y);
                                    max = Math.Max(max, y);
                                    retval.Items.Add(new LocalFormula.ItemInfo(fieldName, y));
                                }
                            }
                        }
                        else
                        {
                            throw new Exception("Formula item in value element must have <field>,<position> combination");
                        }
                    }

                    retval.Range = max - min + 1;
                    retval.Min   = min;
                    retval.Max   = max;
                }

                CachedFormula.Add(formula.CacheKey, retval);
            }

            return(retval);
        }