Exemplo n.º 1
0
        private void AddTicks(int period, string pair, DateTime dateStart)
        {
            try {
                using (var context = new ForexEntities()
                {
                    CommandTimeout = 6000
                }) {
                    #region callback
                    Action <FXCoreWrapper.RateLoadingCallbackArgs <Rate> > showProgress = (args) => {
                        TestContext.WriteLine("{0}", args.Message);
                        foreach (var t in args.NewRates)
                        {
                            var bar = context.CreateObject <t_Bar>();
                            FillBar(period, pair, bar, t);
                            context.t_Bar.AddObject(bar);
                        }
                        context.SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);
                    };
                    #endregion

                    var dateEnd = context.t_Bar.Where(b => b.Pair == pair && b.Period == period).Select(b => b.StartDate).DefaultIfEmpty(DateTime.Now).Min().DateTime;
                    o2g.GetBarsBase(pair, period, 0, dateStart, dateEnd, new List <Rate>(), showProgress);

                    dateStart = context.t_Bar.Where(b => b.Pair == pair && b.Period == period).Select(b => b.StartDate).DefaultIfEmpty(DateTime.Now).Max().DateTime;
                    o2g.GetBarsBase(pair, period, 0, dateStart, DateTime.Now, new List <Rate>(), showProgress);
                }
            } catch (Exception exc) {
                Debug.WriteLine(exc.ToString());
            }
        }
Exemplo n.º 2
0
        //[TestMethod]
        public void ShowDensities()
        {
            var pair  = "EUR/JPY";
            var rates = new List <Rate>();

            o2g.GetBars(pair, 1, 720, TradesManagerStatic.FX_DATE_NOW, TradesManagerStatic.FX_DATE_NOW, rates);
            var densities = "".Select(b => new { Rate = new Rate(), Density = 0.0 }).ToList();
            Func <double, double> inPips = d => o2g.InPips(pair, d);

            foreach (var i in Enumerable.Range(10, rates.Count - 10))
            {
                densities.Add(new{ Rate = rates[i], Density = inPips(i / rates.Take(i).ToArray().Height()) });
            }
            var statName = "Densities";

            using (var context = new ForexEntities()) {
                var a = typeof(t_Stat).GetCustomAttributes(typeof(EdmEntityTypeAttribute), true).Cast <EdmEntityTypeAttribute>();
                context.ExecuteStoreCommand("DELETE " + a.First().Name + " WHERE Name={0}", statName);
                foreach (var d in densities)
                {
                    context.t_Stat.AddObject(new t_Stat()
                    {
                        Time = d.Rate.StartDate, Price = d.Rate.PriceAvg, Value1 = d.Density, Name = statName
                    });
                }
                context.SaveChanges();
                context.AcceptAllChanges();
            }
        }
Exemplo n.º 3
0
        public static void SaveTickCallBack(int period, string pair, Action <object> progressCallback, ActionBlock <Action> saveTickActionBlock, RateLoadingCallbackArgs <Rate> args)
        {
            if (progressCallback != null)
            {
                progressCallback(args.Message);
            }
            else
            {
                Debug.WriteLine("{0}", args.Message);
            }
            var context = new ForexEntities();

            //context.Configuration.AutoDetectChangesEnabled = false;
            context.Configuration.ValidateOnSaveEnabled = false;
            Action a = () =>
                       args.NewRates.Distinct().Do(t => {
                context.t_Bar.Add(FillBar(period, pair, context.t_Bar.Create(), t));
            }).TakeLast(1)
                       .ForEach(_ => {
                try {
                    context.SaveConcurrent();
                } catch (Exception exc) {
                    progressCallback?.Invoke(exc);
                }
                context.Dispose();
                args.NewRates.Clear();
            });

            a();
            //saveTickActionBlock.Post(a);
        }
Exemplo n.º 4
0
        static ForexEntities ForexEntitiesFactory()
        {
            var fe = new ForexEntities();

            SetTimeout(fe, 60 * 1);
            return(fe);
        }
Exemplo n.º 5
0
 private void SavePair(int period, string pair)
 {
     using (var context = new ForexEntities()
     {
         CommandTimeout = 6000
     }) {
         var dateStart = context.t_Bar
                         .Where(b => b.Pair == pair && b.Period == period).Select(b => b.StartDate).DefaultIfEmpty(DateTime.Now.AddYears(-3))
                         .Max().AddMinutes(period);
         Action <string> showProgress = msg => { };// Console.WriteLine(msg);
         var             ticks        = new List <Rate>();
         o2g.GetBarsBase(pair, period, 0, dateStart.DateTime, TradesManagerStatic.FX_DATE_NOW, ticks);
         if (ticks.Count() == 0)
         {
             return;
         }
         var lastDate = ticks.Min(t => t.StartDate);
         var a        = typeof(t_Bar).GetCustomAttributes(typeof(EdmEntityTypeAttribute), true).Cast <EdmEntityTypeAttribute>();
         context.ExecuteStoreCommand("DELETE " + a.First().Name + " WHERE Pair = {2} AND Period = {1} AND StartDate>={0}", lastDate, period, pair);
         var i = 0;
         foreach (var t in ticks.Distinct().OrderBars())
         {
             var bar = context.CreateObject <t_Bar>();
             bar.Pair      = pair;
             bar.Period    = period;
             bar.StartDate = t.StartDate;
             bar.AskHigh   = (float)t.AskHigh;
             bar.AskLow    = (float)t.AskLow;
             bar.AskOpen   = (float)t.AskOpen;
             bar.AskClose  = (float)t.AskClose;
             bar.BidHigh   = (float)t.BidHigh;
             bar.BidLow    = (float)t.BidLow;
             bar.BidOpen   = (float)t.BidOpen;
             bar.BidClose  = (float)t.BidClose;
             context.t_Bar.AddObject(bar);
             if (i++ % 1000 == 0)
             {
                 try {
                     context.SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);
                     context.AcceptAllChanges();
                 } catch (Exception exc) {
                     Debug.WriteLine(exc);
                     Debugger.Break();
                 }
             }
         }
         try {
             context.SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);
             context.AcceptAllChanges();
         } catch (Exception exc) {
             Debug.WriteLine(exc);
             Debugger.Break();
         }
     }
 }
Exemplo n.º 6
0
        public void MinuteRsi()
        {
            if (fw.Pair == "")
            {
                return;
            }
            var minutesBack = Period * PeriodsBack;

            lock (rates) {
                if (resetRates)
                {
                    rates.Clear();
                    resetRates = false;
                }
                ClearLog();
                AddLog("Rates.");
                fw.GetBars(fw.Pair, 1, 0, DateTime.Now.AddMinutes(-minutesBack), DateTime.FromOADate(0), rates);
                AddLog("RSI.");
                rates.ToArray().Rsi((Period * RsiPeriods).ToInt(), true);
                var rsiStats     = rates.RsiStats();
                var ratesToChart = rates.Where(t => t.PriceRsi.GetValueOrDefault(50) != 50).ToList();
                if (NoGaps)
                {
                    var i          = 0;
                    var startDate2 = ratesToChart.Max(r => r.StartDate2);
                    ratesToChart.OrderBarsDescending().Skip(1).ToList().ForEach(r => r.StartDate2 = startDate2.AddMinutes(-(++i)));
                }
                var rsi = ratesToChart.Select(t => new Volt()
                {
                    Volts = t.PriceRsi.GetValueOrDefault(), StartDate = t.StartDate
                }).ToList();
                AddLog("Chart.");
                //new HedgeHog.Schedulers.Scheduler(charter.Dispatcher).Command = () =>
                //  charter.AddTicks(null, ratesToChart, rsi, rsiStats.Sell, rsiStats.Buy, rsiStats.SellAverage, rsiStats.BuyAverage, 0, 0, DateTime.MinValue, DateTime.MinValue, new double[0]);
                AddLog("Done.");
                return;

                var statName = "MinuteRsi";
                var context  = new ForexEntities();
                var a        = typeof(t_Stat).GetCustomAttributes(typeof(EdmEntityTypeAttribute), true).Cast <EdmEntityTypeAttribute>();
                context.ExecuteStoreCommand("DELETE " + a.First().Name + " WHERE Name={0}", statName);
                var stats = context.t_Stat;
                ratesToChart.ForEach(t =>
                                     stats.AddObject(new t_Stat()
                {
                    Time   = t.StartDate, Name = statName, Price = t.PriceAvg,
                    Value1 = 0,
                    Value2 = 0,
                    Value3 = t.PriceRsi.Value
                }));
                context.SaveChanges();
            }
        }
Exemplo n.º 7
0
        //[Timeout(TestTimeout.Infinite)]
        public void LoadBars()
        {
            var pairsAvl = o2g.CoreFX.Instruments;
            var pairs    = new ForexEntities().v_Pair.Select(p => p.Pair).ToArray();

            foreach (var minutes in new [] { 5, 15, 30, 60 })
            {
                foreach (var pair in pairs)
                {
                    o2g.Desk.SetOfferSubscription(pair, "Enabled");
                    AddTicks(minutes, pair, DateTime.Now.AddYears(-4));
                }
            }
            //SavePair(5, pair);
            //SavePair(15, pair);
            //SavePair(60, pair);
        }
Exemplo n.º 8
0
        //[MethodImpl(MethodImplOptions.Synchronized)]
        public static void AddTicks(ITradesManager fw, int period, string pair, DateTime dateStart, Action <object> progressCallback)
        {
            try {
                #region callback
                ActionBlock <Action> saveTickActionBlock = new ActionBlock <Action>(a => a());
                Action <RateLoadingCallbackArgs <Rate> > showProgress = (args) => {
                    SaveTickCallBack(period, pair, progressCallback, saveTickActionBlock, args);
                    args.IsProcessed = true;
                };
                #endregion

                var offset = TimeSpan.FromMinutes(period);
                using (var context = new ForexEntities()) {
                    if (dateStart > DateTime.MinValue)
                    {
                        var dateMin = new DateTime(context.t_Bar.Where(b => b.Pair == pair && b.Period == period).Min(b => (DateTimeOffset?)b.StartDate).GetValueOrDefault().DateTime.Ticks, DateTimeKind.Utc);
                        if (dateMin.IsMin())
                        {
                            dateMin = DateTime.Now;
                        }
                        var dateEnd = dateMin.Subtract(offset);
                        if (dateStart < dateMin)
                        {
                            fw.GetBarsBase(pair, period, 0, dateStart, dateEnd, new List <Rate>(), null, showProgress);
                        }
                    }
                    var q = context.t_Bar.Where(b => b.Pair == pair && b.Period == period).Select(b => b.StartDate).DefaultIfEmpty().Max();
                    if (dateStart == DateTime.MinValue && q == DateTimeOffset.MinValue)
                    {
                        throw new Exception("dateStart must be provided there is no bars in database.");
                    }
                    var p = period == 0 ? 1 / 60.0 : period;
                    dateStart = q.LocalDateTime.Add(p.FromMinutes());
                }
                if (period == 0)
                {
                    dateStart = dateStart.Max(DateTime.Now.AddYears(-1));
                }
                fw.GetBarsBase(pair, period, 0, dateStart, DateTime.Now, new List <Rate>(), null, showProgress);
            } catch (Exception exc) {
                GalaSoft.MvvmLight.Messaging.Messenger.Default.Send <LogMessage>(new LogMessage(exc));
            }
        }
Exemplo n.º 9
0
        public static void SaveTickCallBack(int period, string pair, Action <object> progressCallback, ActionBlock <Action> saveTickActionBlock, RateLoadingCallbackArgs <Rate> args)
        {
            if (progressCallback != null)
            {
                progressCallback(args.Message);
            }
            else
            {
                Debug.WriteLine("{0}", args.Message);
            }
            var context = new ForexEntities();

            //context.Configuration.AutoDetectChangesEnabled = false;
            context.Configuration.ValidateOnSaveEnabled = false;
            Action a = () =>
                       args.NewRates.Distinct(r => r.StartDate2).Do(t => {
                context.t_Bar.Add(FillBar(period, pair, context.t_Bar.Create(), t));
            }).TakeLast(1)
                       .ForEach(_ => {
                try {
                    context.SaveConcurrent();
                }
                catch (System.Data.Entity.Infrastructure.DbUpdateException exc) when(exc.InnerException is System.Data.Entity.Core.UpdateException)
                {
                    // get failed entries
                    var entries = exc.Entries;
                    foreach (var entry in entries)
                    {
                        // change state to remove it from context
                        entry.State = System.Data.Entity.EntityState.Detached;
                    }
                    progressCallback?.Invoke(exc);
                }
                context.Dispose();
                args.NewRates.Clear();
            });

            a();
            //saveTickActionBlock.Post(a);
        }
Exemplo n.º 10
0
        public void MunuteRsi()
        {
            var minutesBack = 60 * 24 * 2;
            var rates       = o2g.GetBarsBase(o2g.Pair, 1, DateTime.Now.AddMinutes(-minutesBack)).ToArray();

            rates.FillRsis((minutesBack * 0.5).ToInt());
            var statName = "MinuteRsi";
            var context  = new ForexEntities();
            var a        = typeof(t_Stat).GetCustomAttributes(typeof(EdmEntityTypeAttribute), true).Cast <EdmEntityTypeAttribute>();

            context.ExecuteStoreCommand("DELETE " + a.First().Name + " WHERE Name={0}", statName);
            var stats = context.t_Stat;

            rates.Where(t => t.PriceRsi.GetValueOrDefault(50) != 50).ToList().ForEach(t =>
                                                                                      stats.AddObject(new t_Stat()
            {
                Time   = t.StartDate, Name = statName, Price = t.PriceAvg,
                Value1 = 0,
                Value2 = 0,
                Value3 = t.PriceRsi.Value
            }));
            context.SaveChanges();
        }
Exemplo n.º 11
0
        public void Waves1()
        {
            var statName  = System.Reflection.MethodBase.GetCurrentMethod().Name;
            var dateStart = DateTime.Parse("07/20/2009 12:00");
            var dateEnd   = dateStart.AddHours(0.5);
            var context   = new ForexEntities();
            var a         = typeof(t_Stat).GetCustomAttributes(typeof(EdmEntityTypeAttribute), true).Cast <EdmEntityTypeAttribute>();

            context.ExecuteStoreCommand("DELETE " + a.First().Name + " WHERE Name={0}", statName);

            var ticks = o2g.GetTicks(o2g.Pair, 12000);
            var t1    = o2g.GetTicks(o2g.Pair, 900);

            ticks = ticks.Union(t1).OrderBars().ToArray();
            ticks.ToList().ForEach(t => t.StartDate = t.StartDate.AddMilliseconds(-t.StartDate.Millisecond));
            var rates = ticks.Cast <Rate>().OrderBars().ToArray();

            Stopwatch timer = Stopwatch.StartNew();

            foreach (var tick in rates.OrderBarsDescending())
            {
                tick.Trend.Volume = rates.Where(TimeSpan.FromMinutes(1), tick).Count();
            }
            Debug.WriteLine("Volumes:" + timer.Elapsed);

            var rsiTicks  = 250;
            var rsiPeriod = TimeSpan.FromMinutes(14);

            timer = Stopwatch.StartNew();
            rates.FillRsis(rsiTicks);
            Debug.WriteLine("FillRsi 1:" + timer.Elapsed);

            timer = Stopwatch.StartNew();
            rates.Rsi(rsiTicks, (r, v) => r.PriceAvg1 = (double)v, r => r.PriceAvg1);
            Debug.WriteLine("FillRsi 2:" + timer.Elapsed);

            timer = Stopwatch.StartNew();
            var rsiStats = rates.RsiStats();

            Debug.WriteLine("RsiStats:" + timer.Elapsed + " " + string.Format("{0:n0}/{1:n0}", rsiStats.Sell, rsiStats.Buy));


            timer = Stopwatch.StartNew();
            rates.SkipWhile(t => !t.PriceRsi.HasValue).ToArray().SetCMA(t => t.PriceRsi.GetValueOrDefault(), 2);
            Debug.WriteLine("CMA:" + timer.Elapsed);


            //var ticks = context.v_Tick.Where(t => t.StartDate >= dateStart && t.StartDate <= dateEnd)
            //  .ToArray().Select((t, i) =>
            //    new Tick(t.StartDate, t.Ask, t.Bid, i, true) { Trend = new BarBase.TrendInfo() { Volume = t.Count.Value } }).ToArray();

            var stats = context.t_Stat;

            rates.Where(t => t.PriceRsi.HasValue && !double.IsNaN(t.PriceRsi.Value)).ToList().ForEach(t =>
                                                                                                      stats.AddObject(new t_Stat()
            {
                Time     = t.StartDate, Name = statName, Price = t.PriceAvg
                , Value1 = t.PriceAvg1
                , Value2 = 0
                ,
                Value3 = t.PriceRsi.Value
            }));
            context.SaveChanges();


            //timer = Stopwatch.StartNew();
            //var waves = ticks.FindWaves(3);
            //Debug.WriteLine("FindWaves(3):"+timer.Elapsed);

            //waves.ToList().ForEach(w => Debug.WriteLine(w));
        }