Beispiel #1
0
        //[TestMethod]
        public void Handlers_Make_Fifteen_Minutes_Bars()
        {
            DateTime start = new DateTime(2013, 5, 15, 0, 0, 0);

            DateTime end = new DateTime(2013, 5, 16, 11, 0, 0);

            FakeTimeTracker tt       = new FakeTimeTracker(start, end);
            StrategyHeader  s        = new StrategyHeader(1, "Strategy 2", "BP12345-RF-01", "RTS-12.12_FT", 10);
            BarSettings     settings = new BarSettings(s, "RTS-12.12_FT", 900, 10);

            MakeRangeBarsOnTick updateBars = new MakeRangeBarsOnTick(settings, tt, this.tradingData, new NullLogger());

            this.tradingData.Get <ObservableCollection <Bar> >().Add(new Bar {
                Symbol = "RTS-12.12_FT", DateTime = start, Open = 150000, High = 160000, Low = 140000, Close = 145000, Volume = 100
            });
            this.tradingData.Get <ObservableCollection <Bar> >().Add(new Bar {
                Symbol = "RTS-12.12_FT", DateTime = end, Open = 150000, High = 160000, Low = 140000, Close = 145000, Volume = 100
            });

            Assert.AreEqual(2, this.tradingData.Get <ObservableCollection <Bar> >().Count);


            for (int i = 0; i < settings.Interval * 4; i++)
            {
                this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                    DateTime = end.AddSeconds(i), Symbol = "RTS-12.12_FT", Price = 150000 + i, TradeAction = TradeAction.Buy, Volume = 100
                });

                if (i == 1000)
                {
                    this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                        DateTime = end.AddSeconds(1000), Symbol = "RTS-12.12_FT", Price = 149000, TradeAction = TradeAction.Buy, Volume = 100
                    });
                    this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                        DateTime = end.AddSeconds(2000), Symbol = "RTS-12.12_FT", Price = 154500, TradeAction = TradeAction.Buy, Volume = 100
                    });
                }

                tt.IncrementStopDate(1);
            }

            this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                DateTime = end.AddSeconds(-1), Symbol = "RTS-12.12_FT", Price = 148000, TradeAction = TradeAction.Buy, Volume = 100
            });
            this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                DateTime = end.AddSeconds(3600), Symbol = "RTS-12.12_FT", Price = 155500, TradeAction = TradeAction.Buy, Volume = 100
            });

            Assert.AreEqual(6, this.tradingData.Get <ObservableCollection <Bar> >().Count);

            Bar bar = this.tradingData.Get <ObservableCollection <Bar> >().Last();

            Assert.AreEqual("RTS-12.12_FT", this.tradingData.Get <ObservableCollection <Bar> >().ElementAt(5).Symbol);
            Assert.AreEqual(end.AddHours(1), this.tradingData.Get <ObservableCollection <Bar> >().ElementAt(5).DateTime);
            Assert.AreEqual(152700, this.tradingData.Get <ObservableCollection <Bar> >().ElementAt(5).Low);
            Assert.AreEqual(153599, this.tradingData.Get <ObservableCollection <Bar> >().ElementAt(5).High);
            Assert.AreEqual(152700, this.tradingData.Get <ObservableCollection <Bar> >().ElementAt(5).Open);
            Assert.AreEqual(153599, this.tradingData.Get <ObservableCollection <Bar> >().ElementAt(5).Close);
            Assert.AreEqual(90000, this.tradingData.Get <ObservableCollection <Bar> >().ElementAt(5).Volume);
        }
Beispiel #2
0
        /// <summary>
        /// пример переопределения
        /// Program.Sample1.SetupStrategy()
        /// </summary>
        /// <param name="args"></param>
        override public void SetupStrategy(string[] args)
        {
            Console.WriteLine("BackTest.Converter.SetupStrategy()");
            // инициализация обработчиков стратегии
            //strategySample1 = new Strategy.Sample1(args);
            //strategyHeader = strategySample1.strategyHeader;
            //AppSettings.GetStringValue("Symbol")
            string symbol = System.Configuration.ConfigurationManager.AppSettings["Symbol"];

            //Console.WriteLine(String.Format("Sybol: {0}", symbol));
            if (symbol == "")
            {
                symbol = null;
            }

            StrategyHeader strategyHeader = new StrategyHeader(1, "Sample strategyHeader", null, symbol, 1);
            BarSettings    barSettings    = new BarSettings(
                strategyHeader,
                strategyHeader.Symbol,
                //null,
                AppSettings.GetValue <int>("Interval"),
                AppSettings.GetValue <int>("Period"));

            TradingData.Instance.Get <ICollection <StrategyHeader> >().Add(strategyHeader);

            //BarSettings barSettings = new BarSettings(strategyHeader, "RIH4", 3600, 3);
            //BarSettings barSettings = new BarSettings(strategyHeader, "SPFB.RTS-3.14", 3600, 3);
            //TradingData.Instance.Get<ICollection<BarSettings>>().Add(barSettings);

            MakeRangeBarsOnTick updateBarsHandler =
                new MakeRangeBarsOnTick(barSettings,
                                        new TimeTracker(),
                                        TradingData.Instance,
                                        DefaultLogger.Instance);
        }
Beispiel #3
0
        //[TestMethod]
        public void Handlers_Do_Nothing_If_Bar_With_Same_Date_Exists()
        {
            StrategyHeader s           = new StrategyHeader(1, "Strategy 1", "BP12345-RF-01", "RTS-12.12_FT", 10);
            BarSettings    barSettings = new BarSettings(s, "RTS-12.12_FT", 3600, 19);

            DateTime start = new DateTime(2013, 5, 15, 10, 0, 0);

            FakeTimeTracker tt = new FakeTimeTracker(start, start);

            this.tradingData.Get <ObservableCollection <Bar> >().Add(new Bar {
                Symbol = barSettings.Symbol, DateTime = start.AddHours(1), Open = 100, High = 100, Low = 100, Close = 100, Volume = 100
            });

            MakeRangeBarsOnTick updateBars = new MakeRangeBarsOnTick(barSettings, tt, this.tradingData, new NullLogger());

            Assert.AreEqual(1, this.tradingData.Get <ObservableCollection <Bar> >().Count);


            for (int i = 0; i < barSettings.Interval; i++)
            {
                this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                    DateTime = start.AddSeconds(i), Symbol = "RTS-12.12_FT", Price = 150000 + i, TradeAction = TradeAction.Buy, Volume = 100
                });

                if (i == 1000)
                {
                    this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                        DateTime = start.AddSeconds(1000), Symbol = "RTS-12.12_FT", Price = 149000, TradeAction = TradeAction.Buy, Volume = 100
                    });
                    this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                        DateTime = start.AddSeconds(2000), Symbol = "RTS-12.12_FT", Price = 154500, TradeAction = TradeAction.Buy, Volume = 100
                    });
                }

                tt.IncrementStopDate(1);
            }

            this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                DateTime = start.AddSeconds(-1), Symbol = "RTS-12.12_FT", Price = 148000, TradeAction = TradeAction.Buy, Volume = 100
            });
            this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                DateTime = start.AddSeconds(3600), Symbol = "RTS-12.12_FT", Price = 155500, TradeAction = TradeAction.Buy, Volume = 100
            });

            IEnumerable <Tick> ticks = this.tradingData.Get <ObservableCollection <Tick> >().Where(t => t.DateTime >= start && t.DateTime < start.AddSeconds(3600));

            Assert.AreEqual(3602, ticks.Count());

            Assert.AreEqual(1, this.tradingData.Get <ObservableCollection <Bar> >().Count);

            Bar bar = this.tradingData.Get <ObservableCollection <Bar> >().First();

            Assert.AreEqual("RTS-12.12_FT", bar.Symbol);
            Assert.AreEqual(start.AddHours(1), bar.DateTime);
            Assert.AreEqual(100, bar.Low);
            Assert.AreEqual(100, bar.High);
            Assert.AreEqual(100, bar.Open);
            Assert.AreEqual(100, bar.Close);
            Assert.AreEqual(100, bar.Volume);
        }
Beispiel #4
0
        //private static string[] assemblies = { "Interop.SmartCOM3Lib.dll", "TRL.Common.dll", "TRL.Connect.Smartcom.dll" };

        /// <summary>
        /// пример
        /// </summary>
        /// <param name="args"></param>
        public void SetupStrategy(string[] args)
        {
            ///TODO 91. вопрос как изолировать стратегию от процесса инициализации параметров стратегии и AppSettings
            //AddStrategySettings();
            //TradingData.Instance.Get<ICollection<Strategy>>().Add(strategyHeader);
            //TradingData.Instance.Get<ICollection<BarSettings>>().Add(barSettings);
            //TradingData.Instance.Get<ICollection<ProfitPointsSettings>>().Add(ppSettings);
            //TradingData.Instance.Get<ICollection<TakeProfitOrderSettings>>().Add(poSettings);
            //TradingData.Instance.Get<ICollection<StopPointsSettings>>().Add(spSettings);
            //TradingData.Instance.Get<ICollection<StopLossOrderSettings>>().Add(soSettings);

            //SMASettings smaSettings = new SMASettings(strategyHeader, 7, 14);
            int         maf         = AppSettings.GetValue <int>("MaFast");
            int         mas         = AppSettings.GetValue <int>("MaSlow");
            SMASettings smaSettings = new SMASettings(strategyHeader, maf, mas);

            TradingData.Instance.Get <ICollection <SMASettings> >().Add(smaSettings);

            //ReversMaOnBar reversHandler =
            //    new ReversMaOnBar(strategyHeader,
            //        TradingData.Instance,
            //        SignalQueue.Instance,
            //        DefaultLogger.Instance);

            //MakeRangeBarsOnTick updateBarsHandler;
            updateBarsHandler = new MakeRangeBarsOnTick(barSettings,
                                                        new TimeTracker(),
                                                        TradingData.Instance,
                                                        DefaultLogger.Instance);

            //IndicatorOnBar2Ma indicatorsOnBar;
            indicatorsOnBar = new IndicatorOnBar2Ma(strategyHeader,
                                                    TradingData.Instance,
                                                    SignalQueue.Instance,
                                                    DefaultLogger.Instance);

            indicatorsOnBar.AddMa1Handler(TradeConsole.ConsoleWriteLineValueDouble);
            indicatorsOnBar.AddMa2Handler(TradeConsole.ConsoleWriteLineValueDouble);
            indicatorsOnBar.AddCrossUpHandler(TradeConsole.ConsoleWriteLineValueBool);
            indicatorsOnBar.AddCrossDnHandler(TradeConsole.ConsoleWriteLineValueBool);

            //Отправляем данные клиентам
            {
                //SetupHubHandlers();
                if (AppSettings.GetValue <bool>("SignalHub"))
                {
                    //отправляем через signalR
                    indicatorsOnBar.AddMa1Handler(TradeHubStarter.sendValueDouble1);
                    indicatorsOnBar.AddMa2Handler(TradeHubStarter.sendValueDouble2);
                    indicatorsOnBar.AddCrossUpHandler(TradeHubStarter.sendValueBool);
                    indicatorsOnBar.AddCrossDnHandler(TradeHubStarter.sendValueBool);

                    //reversHandler.AddMa1Handler(TradeHubStarter.sendIndicator1);
                    //reversHandler.AddMa2Handler(TradeHubStarter.sendIndicator2);
                }
            }
        }
Beispiel #5
0
        //[TestMethod]
        public void Handlers_Make_First_Morning_Bar_For_Hour()
        {
            StrategyHeader s           = new StrategyHeader(1, "Strategy 1", "BP12345-RF-01", "RTS-12.12_FT", 10);
            BarSettings    barSettings = new BarSettings(s, "RTS-12.12_FT", 3600, 19);

            DateTime start = new DateTime(2013, 5, 14, 23, 50, 0);

            DateTime end = new DateTime(2013, 5, 16, 10, 0, 0);

            FakeTimeTracker tt = new FakeTimeTracker(start, end);

            MakeRangeBarsOnTick updateBars = new MakeRangeBarsOnTick(barSettings, tt, this.tradingData, new NullLogger());

            Assert.AreEqual(0, this.tradingData.Get <ObservableCollection <Bar> >().Count);


            for (int i = 0; i < barSettings.Interval; i++)
            {
                this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                    DateTime = end.AddSeconds(i), Symbol = "RTS-12.12_FT", Price = 150000 + i, TradeAction = TradeAction.Buy, Volume = 100
                });

                if (i == 1000)
                {
                    this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                        DateTime = end.AddSeconds(1000), Symbol = "RTS-12.12_FT", Price = 149000, TradeAction = TradeAction.Buy, Volume = 100
                    });
                    this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                        DateTime = end.AddSeconds(2000), Symbol = "RTS-12.12_FT", Price = 154500, TradeAction = TradeAction.Buy, Volume = 100
                    });
                }

                tt.IncrementStopDate(1);
            }

            this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                DateTime = end.AddSeconds(-1), Symbol = "RTS-12.12_FT", Price = 148000, TradeAction = TradeAction.Buy, Volume = 100
            });
            this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                DateTime = end.AddSeconds(3600), Symbol = "RTS-12.12_FT", Price = 155500, TradeAction = TradeAction.Buy, Volume = 100
            });

            Assert.AreEqual(1, this.tradingData.Get <ObservableCollection <Bar> >().Count);

            Bar bar = this.tradingData.Get <ObservableCollection <Bar> >().Last();

            Assert.AreEqual("RTS-12.12_FT", bar.Symbol);
            Assert.AreEqual(end.AddHours(1), bar.DateTime);
            Assert.AreEqual(149000, bar.Low);
            Assert.AreEqual(154500, bar.High);
            Assert.AreEqual(150000, bar.Open);
            Assert.AreEqual(153599, bar.Close);
            Assert.AreEqual(360200, bar.Volume);
        }
Beispiel #6
0
        public void Handlers_make_RangeBarReach_test()
        {
            int            interval       = 50;
            StrategyHeader strategyHeader = new StrategyHeader(2, "Strategy 2", "BP12345-RF-01", "RTS-9.13_FT", 10);

            this.tradingData.Get <ObservableHashSet <StrategyHeader> >().Add(strategyHeader);

            BarSettings barSettings = new BarSettings(strategyHeader, strategyHeader.Symbol, interval, 0);

            this.tradingData.Get <ObservableHashSet <BarSettings> >().Add(barSettings);

            DateTime start = new DateTime(2013, 7, 10, 10, 0, 0, 0);

            FakeTimeTracker ftt = new FakeTimeTracker(start, start);

            MakeRangeBarsOnTick handler = new MakeRangeBarsOnTick(barSettings, ftt, this.tradingData, new NullLogger());

            this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick(barSettings.Symbol, new DateTime(2013, 7, 10, 10, 0, 59, 600), 510, 25));
            Assert.AreEqual(0, this.tradingData.Get <ObservableCollection <Bar> >().Count);
            this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick(barSettings.Symbol, new DateTime(2013, 7, 10, 10, 0, 59, 700), 530, 25));
            Assert.AreEqual(0, this.tradingData.Get <ObservableCollection <Bar> >().Count);
            this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick(barSettings.Symbol, new DateTime(2013, 7, 10, 10, 0, 59, 800), 500, 25));
            Assert.AreEqual(0, this.tradingData.Get <ObservableCollection <Bar> >().Count);
            this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick(barSettings.Symbol, new DateTime(2013, 7, 10, 10, 0, 59, 900), 550, 25));
            Assert.AreEqual(1, this.tradingData.Get <ObservableCollection <Bar> >().Count);

            // Обработчик генерирует новый бар, только когда цена пришедшего тика располагается в диапазоне следующего бара.
            this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick(barSettings.Symbol, new DateTime(2013, 7, 10, 10, 1, 0, 0), 560, 25));
            Assert.AreEqual(1, this.tradingData.Get <ObservableCollection <Bar> >().Count);

            Bar bar = this.tradingData.Get <ObservableCollection <Bar> >().Last();

            //Assert.AreEqual(new DateTime(2013, 7, 10, 10, 1, 0, 0), bar.DateTime);
            Assert.AreEqual(new DateTime(2013, 7, 10, 10, 0, 59, 900), bar.DateTime);
            Assert.AreEqual(barSettings.Symbol, bar.Symbol);
            Assert.AreEqual(barSettings.Interval, bar.Interval);
            Assert.AreEqual(510, bar.Open);
            Assert.AreEqual(550, bar.High);
            Assert.AreEqual(500, bar.Low);
            Assert.AreEqual(550, bar.Close);
            Assert.AreEqual(100, bar.Volume);
        }
Beispiel #7
0
        public void Handlers_Do_Nothing_When_No_Ticks_With_TradeSettings_Symbol()
        {
            StrategyHeader s           = new StrategyHeader(1, "Strategy 1", "BP12345-RF-01", "RTS-12.12_FT", 10);
            BarSettings    barSettings = new BarSettings(s, "RTS-12.12_FT", 3600, 19);

            DateTime start = new DateTime(2013, 5, 15, 10, 0, 0);

            FakeTimeTracker tt = new FakeTimeTracker(start, start);

            MakeRangeBarsOnTick updateBars = new MakeRangeBarsOnTick(barSettings, tt, this.tradingData, new NullLogger());

            Assert.AreEqual(0, this.tradingData.Get <ObservableCollection <Bar> >().Count);


            for (int i = 0; i < barSettings.Interval; i++)
            {
                this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                    DateTime = start.AddSeconds(i), Symbol = "RTS-6.13_FT", Price = 150000 + i, TradeAction = TradeAction.Buy, Volume = 100
                });

                if (i == 1000)
                {
                    this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                        DateTime = start.AddSeconds(1000), Symbol = "RTS-6.13_FT", Price = 149000, TradeAction = TradeAction.Buy, Volume = 100
                    });
                    this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                        DateTime = start.AddSeconds(2000), Symbol = "RTS-6.13_FT", Price = 154500, TradeAction = TradeAction.Buy, Volume = 100
                    });
                }

                tt.IncrementStopDate(1);
            }

            this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                DateTime = start.AddSeconds(-1), Symbol = "RTS-6.13_FT", Price = 148000, TradeAction = TradeAction.Buy, Volume = 100
            });
            this.tradingData.Get <ObservableCollection <Tick> >().Add(new Tick {
                DateTime = start.AddSeconds(3600), Symbol = "RTS-6.13_FT", Price = 155500, TradeAction = TradeAction.Buy, Volume = 100
            });

            Assert.AreEqual(0, this.tradingData.Get <ObservableCollection <Bar> >().Count);
        }
Beispiel #8
0
        //private static string[] assemblies = { "Interop.SmartCOM3Lib.dll", "TRL.Common.dll", "TRL.Connect.Smartcom.dll" };

        /// <summary>
        /// пример
        /// </summary>
        /// <param name="args"></param>
        public void SetupStrategy(string[] args)
        {
            //TradingData.Instance.Get<ICollection<Strategy>>().Add(strategyHeader);
            //TradingData.Instance.Get<ICollection<BarSettings>>().Add(barSettings);
            //TradingData.Instance.Get<ICollection<ProfitPointsSettings>>().Add(ppSettings);
            //TradingData.Instance.Get<ICollection<TakeProfitOrderSettings>>().Add(poSettings);
            //TradingData.Instance.Get<ICollection<StopPointsSettings>>().Add(spSettings);
            //TradingData.Instance.Get<ICollection<StopLossOrderSettings>>().Add(soSettings);

            //SMASettings smaSettings = new SMASettings(strategyHeader, 7, 14);
            int         maf         = AppSettings.GetValue <int>("MaFast");
            int         mas         = AppSettings.GetValue <int>("MaSlow");
            SMASettings smaSettings = new SMASettings(strategyHeader, maf, mas);

            TradingData.Instance.Get <ICollection <SMASettings> >().Add(smaSettings);

            //MakeRangeBarsOnTick updateBarsHandler;
            updateBarsHandler = new MakeRangeBarsOnTick(barSettings,
                                                        new TimeTracker(),
                                                        TradingData.Instance,
                                                        DefaultLogger.Instance);

            //IndicatorOnBar2Ma indicatorsOnBar;
            indicatorsOnBar = new IndicatorOnBar2Ma(strategyHeader,
                                                    TradingData.Instance,
                                                    SignalQueue.Instance,
                                                    DefaultLogger.Instance);

            indicatorsOnBar.AddMa1Handler(TradeConsole.ConsoleWriteLineValueDouble);
            indicatorsOnBar.AddMa2Handler(TradeConsole.ConsoleWriteLineValueDouble);
            indicatorsOnBar.AddCrossUpHandler(TradeConsole.ConsoleWriteLineValueBool);
            indicatorsOnBar.AddCrossDnHandler(TradeConsole.ConsoleWriteLineValueBool);

            //Отправляем данные клиентам
            {
                //SetupHubHandlers();
                if (AppSettings.GetValue <bool>("SignalHub"))
                {
                    //отправляем через signalR
                    indicatorsOnBar.AddMa1Handler(TradeHubStarter.sendValueDouble1);
                    indicatorsOnBar.AddMa2Handler(TradeHubStarter.sendValueDouble2);
                    indicatorsOnBar.AddCrossUpHandler(TradeHubStarter.sendValueBool);
                    indicatorsOnBar.AddCrossDnHandler(TradeHubStarter.sendValueBool);

                    //reversHandler.AddMa1Handler(TradeHubStarter.sendIndicator1);
                    //reversHandler.AddMa2Handler(TradeHubStarter.sendIndicator2);
                }
                else
                {
                    Console.WriteLine(String.Format("SignalHub is off"));
                }
            }

            //ReversMaOnBar reversHandler =
            reversHandler = new ReversMaOnBar(strategyHeader,
                                              TradingData.Instance,
                                              SignalQueue.Instance,
                                              DefaultLogger.Instance)
            {
                IndicatorsOnBar = indicatorsOnBar
            };

            double pp = AppSettings.GetValue <double>("ProfitPoints");

            //TakeProfitOnBar takeProfitOnBar =
            takeProfitOnBar =
                new TakeProfitOnBar(strategyHeader,
                                    200,
                                    TradingData.Instance,
                                    SignalQueue.Instance,
                                    DefaultLogger.Instance);

            //StopLossOnBar stopLossOnBar =
            stopLossOnBar =
                new StopLossOnBar(strategyHeader,
                                  100,
                                  TradingData.Instance,
                                  SignalQueue.Instance,
                                  DefaultLogger.Instance);
        }
Beispiel #9
0
        static void Main(string[] args)
        {
            try
            {
                Console.BufferHeight = 300;
                Console.BufferWidth  = 230;

                Console.WindowHeight = 90;
                Console.WindowWidth  = 110;

                Console.WindowTop  = 0;
                Console.WindowLeft = 0;
            }
            catch
            {
                Console.WriteLine(String.Format("Error Console.Window Size"));
            }

            Console.WriteLine(String.Format("Console.BufferHeight {0}", Console.BufferHeight));
            Console.WriteLine(String.Format("Console.BufferWidth {0}", Console.BufferWidth));
            Console.WriteLine(String.Format("Console.WindowHeight {0}", Console.WindowHeight));
            Console.WriteLine(String.Format("Console.WindowWidth {0}", Console.WindowWidth));
            Console.WriteLine(String.Format("Console.WindowTop {0}", Console.WindowTop));
            Console.WriteLine(String.Format("Console.WindowLeft {0}", Console.WindowLeft));

            LogAssemblyInfo();

            //AddStrategySettings();
            {
                TradingData.Instance.Get <ICollection <Strategy> >().Add(strategy);
                TradingData.Instance.Get <ICollection <BarSettings> >().Add(barSettings);
                TradingData.Instance.Get <ICollection <ProfitPointsSettings> >().Add(ppSettings);
                TradingData.Instance.Get <ICollection <TakeProfitOrderSettings> >().Add(poSettings);
                TradingData.Instance.Get <ICollection <StopPointsSettings> >().Add(spSettings);
                TradingData.Instance.Get <ICollection <StopLossOrderSettings> >().Add(soSettings);

                //SMASettings smaSettings = new SMASettings(strategy, 7, 14);
                int         maf         = AppSettings.GetValue <int>("MaFast");
                int         mas         = AppSettings.GetValue <int>("MaSlow");
                SMASettings smaSettings = new SMASettings(strategy, maf, mas);
                TradingData.Instance.Get <ICollection <SMASettings> >().Add(smaSettings);
            }

            ////stopLoss
            //StrategiesPlaceStopLossByPointsOnTradeHandlers stopLossOnTradeHandlers =
            //    new StrategiesPlaceStopLossByPointsOnTradeHandlers(TradingData.Instance,
            //        SignalQueue.Instance,
            //        DefaultLogger.Instance,
            //        AppSettings.GetValue<bool>("MeasureStopFromSignalPrice"));
            ////stopLoss
            //StrategiesStopLossByPointsOnTickHandlers stopLossOnTickHandlers =
            //    new StrategiesStopLossByPointsOnTickHandlers(TradingData.Instance,
            //        SignalQueue.Instance,
            //        DefaultLogger.Instance,
            //        AppSettings.GetValue<bool>("MeasureStopFromSignalPrice"));
            ////takeProfit
            //StrategiesPlaceTakeProfitByPointsOnTradeHandlers takeProfitOnTradeHandlers =
            //    new StrategiesPlaceTakeProfitByPointsOnTradeHandlers(TradingData.Instance,
            //        SignalQueue.Instance,
            //        DefaultLogger.Instance,
            //        AppSettings.GetValue<bool>("MeasureProfitFromSignalPrice"));
            ////takeProfit
            //StrategiesTakeProfitByPointsOnTickHandlers takeProfitOnTickHandlers =
            //    new StrategiesTakeProfitByPointsOnTickHandlers(TradingData.Instance,
            //        SignalQueue.Instance,
            //        DefaultLogger.Instance,
            //        AppSettings.GetValue<bool>("MeasureProfitFromSignalPrice"));

            SmartComHandlers.Instance.Add <_IStClient_DisconnectedEventHandler>(ScalperIsDisconnected);
            SmartComHandlers.Instance.Add <_IStClient_ConnectedEventHandler>(ScalperIsConnected);

            //BreakOutOnTick openHandler =
            //    new BreakOutOnTick(strategy,
            //        TradingData.Instance,
            //        SignalQueue.Instance,
            //        DefaultLogger.Instance);

            //ReversOnTick openHandler =
            //    new ReversOnTick(strategy,
            //        TradingData.Instance,
            //        SignalQueue.Instance,
            //        DefaultLogger.Instance);


            //UpdateBarsOnTick updateBarsHandler =
            //    new UpdateBarsOnTick(barSettings,
            //        new TimeTracker(),
            //        TradingData.Instance,
            //        DefaultLogger.Instance);

            MakeRangeBarsOnTick updateBarsHandler =
                new MakeRangeBarsOnTick(barSettings,
                                        new TimeTracker(),
                                        TradingData.Instance,
                                        DefaultLogger.Instance);

            //отправляем бар через signalR
            SendItemOnBar barItemSender =
                new SendItemOnBar(barSettings,
                                  TradingData.Instance);

            barItemSender.AddItemHandler(TradeHubStarter.sendBar);
            barItemSender.AddItemHandler(ConsoleWriteLineBar);

            ReversOnBar reversHandler =
                new ReversOnBar(strategy,
                                TradingData.Instance,
                                SignalQueue.Instance,
                                DefaultLogger.Instance);

            reversHandler.AddMa1Handler(TradeHubStarter.sendIndicator1);
            reversHandler.AddMa2Handler(TradeHubStarter.sendIndicator2);


            //отправляем бар через signalR
            SendItemOnTrade tradeItemSender =
                new SendItemOnTrade(TradingData.Instance, DefaultLogger.Instance);

            tradeItemSender.AddItemHandler(TradeHubStarter.sendTrade);

            //отправляем ордер через signalR
            //SendItemOnOrder senderItemOrder =
            //    new SendItemOnOrder(TradingData.Instance.Get<ObservableQueue<Order>>());
            //senderItemOrder.AddedItemHandler(TradeHubStarter.sendOrder);

            //список доступных команд
            ConsoleWriteCommands();

            //AddStrategySubscriptions();
            {
                DefaultSubscriber.Instance.Portfolios.Add(strategy.Portfolio);
                DefaultSubscriber.Instance.BidsAndAsks.Add(strategy.Symbol);
                DefaultSubscriber.Instance.Ticks.Add(strategy.Symbol);
            }

            TradeHubStarter tradeHubStarter = new TradeHubStarter();

            //StartServer();
            Task.Run(() => tradeHubStarter.StartServer());
            Console.WriteLine(String.Format("Starting server..."));

            if (AppSettings.GetValue <bool>("ConsoleReadKey"))
            {
                Console.WriteLine(String.Format("Press 's' to start..."));
                while (Console.ReadKey().KeyChar != 's')
                {
                    Console.WriteLine(String.Format("Press 's' to start..."));
                }
            }

            adapter.Start();

            while (true)
            {
                try
                {
                    string command = Console.ReadLine();

                    if (command == "x")
                    {
                        adapter.Stop();

                        ExportData <Order>(AppSettings.GetValue <bool>("ExportOrdersOnExit"));
                        ExportData <Trade>(AppSettings.GetValue <bool>("ExportTradesOnExit"));
                        ExportData <Bar>(AppSettings.GetValue <bool>("ExportBarsOnExit"));

                        break;
                    }

                    if (command == "p")
                    {
                        Console.Clear();

                        Console.WriteLine(String.Format("Реализованный профит и лосс составляет {0} пунктов",
                                                        TradingData.Instance.GetProfitAndLossPoints(strategy)));
                    }

                    if (command == "t")
                    {
                        Console.Clear();

                        foreach (Trade item in TradingData.Instance.Get <IEnumerable <Trade> >())
                        {
                            Console.WriteLine(item.ToString());
                        }
                    }

                    if (command == "b")
                    {
                        Console.Clear();
                        foreach (Bar item in TradingData.Instance.Get <IEnumerable <Bar> >().OrderBy(i => i.DateTime))
                        //foreach (Bar item in TradingData.Instance.Get<IEnumerable<Bar>>())
                        {
                            ConsoleWriteLineBar(item);
                            //TradeHubStarter.sendBarString(item);
                            TradeHubStarter.sendBar(item);
                        }
                    }
                    if (command == "c")
                    {
                        //Console.Clear();
                        Console.WriteLine("clearChart");
                        TradeHubStarter.clearChart();
                    }
                    if (command == "h")
                    {
                        Console.Clear();
                        ConsoleWriteCommands();
                    }

                    if (command == "d")
                    {
                        TradeHubStarter.ConsoleWriteTime = !TradeHubStarter.ConsoleWriteTime;
                        Console.WriteLine(String.Format("ConsoleWriteTime {0}",
                                                        TradeHubStarter.ConsoleWriteTime));
                    }
                }
                catch (System.Runtime.InteropServices.COMException e)
                {
                    DefaultLogger.Instance.Log(e.Message);

                    adapter.Restart();
                }
            }
            if (tradeHubStarter.SignalR != null)
            {
                tradeHubStarter.SignalR.Dispose();
            }
        }
Beispiel #10
0
        //private static Strategy strategyHeader = new Strategy(1, "Sample strategyHeader", "ST46520-RF-01", "SPFB.Si-9.15", 1);
        //private static Strategy strategyHeader = new Strategy(1, "Sample strategyHeader", null, null, 1);

        static void Main(string[] args)
        {
            TradeConsole.ConsoleSetSize();

            //AppSettings.GetStringValue("Symbol")
            string symbol = System.Configuration.ConfigurationManager.AppSettings["Symbol"];

            //Console.WriteLine(String.Format("Sybol: {0}", symbol));
            if (symbol == "")
            {
                symbol = null;
            }

            StrategyHeader strategyHeader = new StrategyHeader(1, "Sample strategyHeader", null, symbol, 1);
            BarSettings    barSettings    = new BarSettings(
                strategyHeader,
                strategyHeader.Symbol,
                //null,
                AppSettings.GetValue <int>("Interval"),
                AppSettings.GetValue <int>("Period"));

            TradingData.Instance.Get <ICollection <StrategyHeader> >().Add(strategyHeader);

            //BarSettings barSettings = new BarSettings(strategyHeader, "RIH4", 3600, 3);
            //BarSettings barSettings = new BarSettings(strategyHeader, "SPFB.RTS-3.14", 3600, 3);
            //TradingData.Instance.Get<ICollection<BarSettings>>().Add(barSettings);

            MakeRangeBarsOnTick updateBarsHandler =
                new MakeRangeBarsOnTick(barSettings,
                                        new TimeTracker(),
                                        TradingData.Instance,
                                        DefaultLogger.Instance);

            TradeConsole.ImportTicksTransaction(args);

            //список доступных команд
            TradeConsole.ConsoleWriteCommands();

            while (true)
            {
                try
                {
                    string command = Console.ReadLine();

                    if (command == "x")
                    {
                        //adapter.Stop();
                        //TradeConsole.ExportData<Order>(AppSettings.GetValue<bool>("ExportOrdersOnExit"));
                        //TradeConsole.ExportData<Trade>(AppSettings.GetValue<bool>("ExportTradesOnExit"));
                        Export.ExportData <Bar>(AppSettings.GetValue <bool>("ExportBarsOnExit"));

                        break;
                    }
                    if (command == "h")
                    {
                        Console.Clear();
                        TradeConsole.ConsoleWriteCommands();
                        Console.WriteLine("Use data files in args:");
                        Console.WriteLine("Converter.exe in.txt");
                        Console.WriteLine("or use filename by default: {0}", TradeConsole.fileNameDefault);
                        Console.WriteLine("Interval - config file");
                        Console.WriteLine("Symbol - config file");
                    }

                    if (command == "t")
                    {
                        Console.Clear();

                        foreach (Trade item in TradingData.Instance.Get <IEnumerable <Trade> >())
                        {
                            Console.WriteLine(item.ToString());
                        }
                    }

                    if (command == "b")
                    {
                        Console.Clear();
                        foreach (Bar item in TradingData.Instance.Get <IEnumerable <Bar> >().OrderBy(i => i.DateTime))
                        //foreach (Bar item in TradingData.Instance.Get<IEnumerable<Bar>>())
                        {
                            Console.WriteLine(item.ToString());
                            //Console.WriteLine(item.ToImportString());
                        }
                    }

                    if (command == "p")
                    {
                        Console.WriteLine(String.Format("Реализованный профит и лосс составляет {0} пунктов",
                                                        TradingData.Instance.GetProfitAndLossPoints(strategyHeader)));
                    }
                }
                catch (System.Runtime.InteropServices.COMException e)
                {
                    DefaultLogger.Instance.Log(e.Message);
                }
            }
        }
Beispiel #11
0
        /// <summary>
        /// пример
        /// </summary>
        private void SetupRevers()
        {
            //AddStrategySettings();
            {
                TradingData.Instance.Get <ICollection <StrategyHeader> >().Add(strategyHeader);
                TradingData.Instance.Get <ICollection <BarSettings> >().Add(barSettings);

                //TradingData.Instance.Get<ICollection<ProfitPointsSettings>>().Add(ppSettings);
                //TradingData.Instance.Get<ICollection<TakeProfitOrderSettings>>().Add(poSettings);
                //TradingData.Instance.Get<ICollection<StopPointsSettings>>().Add(spSettings);
                //TradingData.Instance.Get<ICollection<StopLossOrderSettings>>().Add(soSettings);

                //SMASettings smaSettings = new SMASettings(strategyHeader, 7, 14);
                int         mafast      = AppSettings.GetValue <int>("MaFast");
                int         maslow      = AppSettings.GetValue <int>("MaSlow");
                SMASettings smaSettings = new SMASettings(strategyHeader, mafast, maslow);
                TradingData.Instance.Get <ICollection <SMASettings> >().Add(smaSettings);
            }

            //SmartComHandlers.Instance.Add<_IStClient_DisconnectedEventHandler>(IsDisconnected);
            //SmartComHandlers.Instance.Add<_IStClient_ConnectedEventHandler>(IsConnected);

            MakeRangeBarsOnTick updateBarsHandler =
                new MakeRangeBarsOnTick(barSettings,
                                        new TimeTracker(),
                                        TradingData.Instance,
                                        DefaultLogger.Instance);

            SendItemOnBar barItemSender =
                new SendItemOnBar(barSettings,
                                  TradingData.Instance);
            //barItemSender.AddItemHandler(TradeConsole.ConsoleWriteLineBar);

            IndicatorOnBar2Ma indicatorsOnBar =
                new IndicatorOnBar2Ma(strategyHeader,
                                      TradingData.Instance,
                                      SignalQueue.Instance,
                                      DefaultLogger.Instance);

            indicatorsOnBar.AddMa1Handler(TradeConsole.ConsoleWriteLineValueDouble);
            indicatorsOnBar.AddMa2Handler(TradeConsole.ConsoleWriteLineValueDouble);
            indicatorsOnBar.AddCrossUpHandler(TradeConsole.ConsoleWriteLineValueBool);
            indicatorsOnBar.AddCrossDnHandler(TradeConsole.ConsoleWriteLineValueBool);

            ReversMaOnBar reversHandler =
                new ReversMaOnBar(strategyHeader,
                                  TradingData.Instance,
                                  SignalQueue.Instance,
                                  DefaultLogger.Instance)
            {
                IndicatorsOnBar = indicatorsOnBar
            };

            SendItemOnTrade tradeItemSender =
                new SendItemOnTrade(TradingData.Instance, DefaultLogger.Instance);
            //tradeItemSender.AddItemHandler(TradeConsole.ConsoleWriteLineTrade);

            //SendItemOnOrder senderItemOrder =
            //    new SendItemOnOrder(TradingData.Instance.Get<ObservableQueue<Order>>());
            //senderItemOrder.AddedItemHandler(TradeHubStarter.sendOrder);

            //AddStrategySubscriptions();
            {
                DefaultSubscriber.Instance.Portfolios.Add(strategyHeader.Portfolio);
                DefaultSubscriber.Instance.BidsAndAsks.Add(strategyHeader.Symbol);
                DefaultSubscriber.Instance.Ticks.Add(strategyHeader.Symbol);
            }

            //Отправляем данные клиентам
            {
                barItemSender.AddItemHandler(TradeConsole.ConsoleWriteLineBar);
                tradeItemSender.AddItemHandler(TradeConsole.ConsoleWriteLineTrade);
                //senderItemOrder.AddedItemHandler(TradeHubStarter.sendOrder);

                //SetupHubHandlers();
                if (AppSettings.GetValue <bool>("SignalHub"))
                {
                    //отправляем через signalR
                    barItemSender.AddItemHandler(TradeHubStarter.sendBar);
                    tradeItemSender.AddItemHandler(TradeHubStarter.sendTrade);
                    indicatorsOnBar.AddMa1Handler(TradeHubStarter.sendValueDouble1);
                    indicatorsOnBar.AddMa2Handler(TradeHubStarter.sendValueDouble2);
                    indicatorsOnBar.AddCrossUpHandler(TradeHubStarter.sendValueBool);
                    indicatorsOnBar.AddCrossDnHandler(TradeHubStarter.sendValueBool);

                    //reversHandler.AddMa1Handler(TradeHubStarter.sendIndicator1);
                    //reversHandler.AddMa2Handler(TradeHubStarter.sendIndicator2);
                }
            }
        }
Beispiel #12
0
        public void Handlers_Make_RangeBarReach_GapTurn_Test()
        {
            int            interval       = 50;
            StrategyHeader strategyHeader = new StrategyHeader(2, "Strategy 2", "BP12345-RF-01", "RTS-9.13_FT", 10);

            this.tradingData.Get <ObservableHashSet <StrategyHeader> >().Add(strategyHeader);

            BarSettings barSettings = new BarSettings(strategyHeader, strategyHeader.Symbol, interval, 0);

            this.tradingData.Get <ObservableHashSet <BarSettings> >().Add(barSettings);

            DateTime start = new DateTime(2015, 8, 15, 10, 0, 0);

            FakeTimeTracker tt = new FakeTimeTracker(start, start);

            MakeRangeBarsOnTick updateBars = new MakeRangeBarsOnTick(barSettings, tt, this.tradingData, new NullLogger());

            Assert.AreEqual(0, this.tradingData.Get <ObservableCollection <Bar> >().Count);

            this.tradingData.Get <ObservableCollection <Tick> >().Add(
                new Tick(barSettings.Symbol, new DateTime(2015, 7, 10, 10, 0, 59, 600), 10, 25));
            Assert.AreEqual(0, this.tradingData.Get <ObservableCollection <Bar> >().Count);
            this.tradingData.Get <ObservableCollection <Tick> >().Add(
                new Tick(barSettings.Symbol, new DateTime(2015, 7, 10, 10, 0, 59, 700), 30, 25));
            Assert.AreEqual(0, this.tradingData.Get <ObservableCollection <Bar> >().Count);
            this.tradingData.Get <ObservableCollection <Tick> >().Add(
                new Tick(barSettings.Symbol, new DateTime(2015, 7, 10, 10, 0, 59, 800), 00, 25));
            Assert.AreEqual(0, this.tradingData.Get <ObservableCollection <Bar> >().Count);

            // Обработчик генерирует новый бар, только когда цена пришедшего тика располагается в диапазоне следующего бара.
            this.tradingData.Get <ObservableCollection <Tick> >().Add(
                new Tick(barSettings.Symbol, new DateTime(2015, 7, 10, 10, 0, 59, 900), 50, 25));
            Assert.AreEqual(1, this.tradingData.Get <ObservableCollection <Bar> >().Count);

            this.tradingData.Get <ObservableCollection <Tick> >().Add(
                new Tick(barSettings.Symbol, new DateTime(2015, 7, 10, 10, 1, 00, 000), 70, 25));
            Assert.AreEqual(1, this.tradingData.Get <ObservableCollection <Bar> >().Count);

            Bar bar = this.tradingData.Get <ObservableCollection <Bar> >().Last();

            //Assert.AreEqual(new DateTime(2015, 7, 10, 10, 1, 0, 0), bar.DateTime);
            Assert.AreEqual(new DateTime(2015, 7, 10, 10, 0, 59, 900), bar.DateTime);
            Assert.AreEqual(barSettings.Symbol, bar.Symbol);
            Assert.AreEqual(barSettings.Interval, bar.Interval);
            Assert.AreEqual(10, bar.Open);
            Assert.AreEqual(50, bar.High);
            Assert.AreEqual(00, bar.Low);
            Assert.AreEqual(50, bar.Close);
            Assert.AreEqual(100, bar.Volume);

            this.tradingData.Get <ObservableCollection <Tick> >().Add(
                new Tick(barSettings.Symbol, new DateTime(2015, 7, 10, 10, 1, 00, 000), 180, 25));
            Assert.AreEqual(3, this.tradingData.Get <ObservableCollection <Bar> >().Count);

            bar = this.tradingData.Get <ObservableCollection <Bar> >().Last();
            Assert.AreEqual(new DateTime(2015, 7, 10, 10, 1, 0, 0).ToLongTimeString(), bar.DateTime.ToLongTimeString());
            Assert.AreEqual(barSettings.Symbol, bar.Symbol);
            Assert.AreEqual(barSettings.Interval, bar.Interval);
            Assert.AreEqual(100, bar.Open);
            Assert.AreEqual(150, bar.High);
            Assert.AreEqual(100, bar.Low);
            Assert.AreEqual(150, bar.Close);
            Assert.AreEqual(00, bar.Volume);

            this.tradingData.Get <ObservableCollection <Tick> >().Add(
                new Tick(barSettings.Symbol, new DateTime(2015, 7, 10, 10, 10, 00, 000), 110, 25));
            Assert.AreEqual(4, this.tradingData.Get <ObservableCollection <Bar> >().Count);

            bar = this.tradingData.Get <ObservableCollection <Bar> >().Last();
            Assert.AreEqual(new DateTime(2015, 7, 10, 10, 10, 0, 0), bar.DateTime);
            Assert.AreEqual(barSettings.Symbol, bar.Symbol);
            Assert.AreEqual(barSettings.Interval, bar.Interval);
            Assert.AreEqual(150, bar.Open);
            Assert.AreEqual(180, bar.High);
            Assert.AreEqual(130, bar.Low);
            Assert.AreEqual(130, bar.Close);
            Assert.AreEqual(25, bar.Volume);

            this.tradingData.Get <ObservableCollection <Tick> >().Add(
                new Tick(barSettings.Symbol, new DateTime(2015, 7, 10, 10, 20, 00, 000), 30, 25));
            Assert.AreEqual(6, this.tradingData.Get <ObservableCollection <Bar> >().Count);

            bar = this.tradingData.Get <ObservableCollection <Bar> >().Last();
            Assert.AreEqual(new DateTime(2015, 7, 10, 10, 20, 0, 0).ToLongTimeString(), bar.DateTime.ToLongTimeString());
            Assert.AreEqual(barSettings.Symbol, bar.Symbol);
            Assert.AreEqual(barSettings.Interval, bar.Interval);
            Assert.AreEqual(80, bar.Open);
            Assert.AreEqual(80, bar.High);
            Assert.AreEqual(30, bar.Low);
            Assert.AreEqual(30, bar.Close);
            Assert.AreEqual(25, bar.Volume);

            Assert.AreEqual(this.tradingData.Get <ObservableCollection <Bar> >().Sum(i => i.Volume), 200);
            Assert.AreEqual(this.tradingData.Get <ObservableCollection <Bar> >().Sum(i => i.VolumePrice), (10 + 30 + 50 + 70 + 180 + 110 + 30) * 25);
        }