//[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); }
/// <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); }
//[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); }
//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); } } }
//[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); }
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); }
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); }
//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); }
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(); } }
//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); } } }
/// <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); } } }
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); }