/// <summary>
        /// Converts instance execution status to SolidColorBrush for indication of status
        /// </summary>
        /// <param name="value">StrategyStatus</param>
        /// <param name="targetType">not used</param>
        /// <param name="parameter">not used</param>
        /// <param name="culture">not used</param>
        /// <returns>System.Windows.Media.SolidColorBrush</returns>
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value != null && value != DependencyProperty.UnsetValue)
            {
                StrategyStatus status = (StrategyStatus)value;

                // Return certain brush depending on StrategyStatus
                if (status.Equals(StrategyStatus.Executed))
                {
                    return(Application.Current.Resources["BlueBrush"]);
                }
                else if (status.Equals(StrategyStatus.Executing))
                {
                    return(Application.Current.Resources["GreenBrush"]);
                }
                else if (status.Equals(StrategyStatus.Stopped))
                {
                    return(Application.Current.Resources["RedBrush"]);
                }
                else if (status.Equals(StrategyStatus.Initializing))
                {
                    return(Application.Current.Resources["OrangeBrush"]);
                }
                else if (status.Equals(StrategyStatus.None))
                {
                    return(Application.Current.Resources["GrayBrush"]);
                }
            }

            // Initial state is None, so the color is Gray
            return(Application.Current.Resources["GrayBrush"]);
        }
コード例 #2
0
        public IStrategy[] Tick()
        {
            var tickerResult = ticker.Tick();

            Status = tickerResult.Status;
            return(tickerResult.Strategies);
        }
コード例 #3
0
ファイル: StrategyManager.cs プロジェクト: ForTrade/CSharp
 private void StopStrategy()
 {
     Console.WriteLine(DateTime.Now + " StrategyManager::StopStrategy " + this.strategy.Name);
     if (!this.framework.IsExternalDataQueue)
     {
         foreach (KeyValuePair <IDataProvider, InstrumentList> current in new Dictionary <IDataProvider, InstrumentList>(this.requests))
         {
             if (this.framework.SubscriptionManager != null)
             {
                 this.framework.SubscriptionManager.Unsubscribe(current.Key, current.Value);
             }
         }
     }
     if (this.strategy.status == StrategyStatus.Stopped)
     {
         Console.WriteLine("StrategyManager::Stop Error: Can not stop stopped strategy ( " + this.strategy.Name + ")");
         return;
     }
     this.strategy.OnStrategyStop_();
     if (this.framework.Mode == FrameworkMode.Simulation)
     {
         this.framework.providerManager.dataSimulator.Disconnect();
         this.framework.providerManager.executionSimulator.Disconnect();
     }
     if (this.strategy.DataProvider != null)
     {
         this.strategy.DataProvider.Disconnect();
     }
     if (this.strategy.ExecutionProvider != null)
     {
         this.strategy.ExecutionProvider.Disconnect();
     }
     this.status = StrategyStatus.Stopped;
 }
コード例 #4
0
        /// <summary>
        /// Converts instance execution status to bool. Used for enabling/disabling of 'Edit' and 'Delete' instance buttons from DataGrid.
        /// </summary>
        /// <param name="value">StrategyStatus</param>
        /// <param name="targetType">not used</param>
        /// <param name="parameter">not used</param>
        /// <param name="culture">not used</param>
        /// <returns>bool</returns>
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value != null)
            {
                // If parameter is Invert, then use inverted logic for button visibility
                if (parameter != null && ((string)parameter).Equals("Invert"))
                {
                    StrategyStatus status = (StrategyStatus)value;

                    // Return 'False' only if status is 'None' or 'Initializing' indicating it's not yet executed.
                    if (status.Equals(StrategyStatus.None) || status.Equals(StrategyStatus.Initializing))
                    {
                        return(false);
                    }
                    else
                    {
                        return(true);
                    }
                }
                else if (value != DependencyProperty.UnsetValue)
                {
                    StrategyStatus status = (StrategyStatus)value;

                    // Return true only if status is Stopped or None
                    if (status.Equals(StrategyStatus.Stopped) || status.Equals(StrategyStatus.None))
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
コード例 #5
0
ファイル: StrategyManager.cs プロジェクト: ForTrade/CSharp
 public void Stop()
 {
     if (this.status != StrategyStatus.Stopped)
     {
         this.status = StrategyStatus.Stopped;
         this.StopStrategy();
     }
     this.Clear();
 }
コード例 #6
0
 internal virtual void OnStrategyStop_()
 {
     this.status = StrategyStatus.Stopped;
     if (this.raiseEvents)
     {
         this.OnStrategyStop();
     }
     for (LinkedListNode <Strategy> linkedListNode = this.strategies.First; linkedListNode != null; linkedListNode = linkedListNode.Next)
     {
         linkedListNode.Data.OnStrategyStop_();
     }
 }
コード例 #7
0
        /// <summary>
        /// On strategy status changed
        /// </summary>
        /// <param name="instanceKey"></param>
        /// <param name="strategyStatus"></param>
        private void OnStrategyStatusChanged(string instanceKey, StrategyStatus strategyStatus)
        {
            // Create object to indicate status change to be used for Publishing
            StrategyInstanceStatus strategyInstanceStatus = new StrategyInstanceStatus();

            strategyInstanceStatus.StrategyKey    = instanceKey.Split('-')[0];
            strategyInstanceStatus.InstanceKey    = instanceKey;
            strategyInstanceStatus.StrategyStatus = strategyStatus;

            // Publish event to notify listeners
            EventSystem.Publish <StrategyInstanceStatus>(strategyInstanceStatus);
        }
コード例 #8
0
        /// <summary>
        /// Called when there is a change in strategy status
        /// </summary>
        /// <param name="key">Unique Key to identify the Strategy</param>
        /// <param name="status">indicates whether the strategy is running or stopped</param>
        private void OnStrategyExecutorStatusChanged(string key, StrategyStatus status)
        {
            try
            {
                if (_asyncClassLogger.IsInfoEnabled)
                {
                    _asyncClassLogger.Info("Strategy: " + key + " is running: " + status, _type.FullName, "OnStrategyExecutorStatusChanged");
                }

                // Get Statistics if the strategy is completed
                if (status == StrategyStatus.Executed)
                {
                    StrategyExecutor strategyExecutor;
                    if (_strategiesCollection.TryRemove(key, out strategyExecutor))
                    {
                        StringBuilder parametersInfo = new StringBuilder();

                        foreach (object ctorArgument in strategyExecutor.CtorArguments)
                        {
                            parametersInfo.Append(ctorArgument.ToString());
                            parametersInfo.Append(" | ");
                        }

                        // Unhook Event
                        strategyExecutor.StatusChanged -= OnStrategyExecutorStatusChanged;

                        // Stop Strategy
                        strategyExecutor.StopStrategy();

                        //// Close all connections
                        //strategyExecutor.Close();

                        // Dispose
                        strategyExecutor.Dispose();

                        // Update Iterations information
                        _optimizationParameters.CompletedIterations += 1;
                        _optimizationParameters.RemainingIterations  = _optimizationParameters.TotalIterations -
                                                                       _optimizationParameters.CompletedIterations;

                        // Execute next iteration
                        StartStrategyExecution();
                    }
                }
            }
            catch (Exception exception)
            {
                _asyncClassLogger.Error(exception, _type.FullName, "OnStrategyExecutorStatusChanged");
            }
        }
コード例 #9
0
 internal virtual void OnStrategyStart_()
 {
     this.status = StrategyStatus.Running;
     foreach (Instrument current in this.instruments)
     {
         this.RegisterInstrument(current);
     }
     if (this.raiseEvents)
     {
         this.OnStrategyStart();
     }
     for (LinkedListNode <Strategy> linkedListNode = this.strategies.First; linkedListNode != null; linkedListNode = linkedListNode.Next)
     {
         this.RegisterStrategy(linkedListNode.Data, linkedListNode.Data.instruments, (int)linkedListNode.Data.id);
         linkedListNode.Data.OnStrategyStart_();
     }
 }
コード例 #10
0
        public bool bAskPriceChanged;//用于通知ShortSell重新挂单

        //public long TotalVolume;
        //public long Volume;
        //public long BuyVolume; //主动买量
        //public long SellVolume; //主动卖量
        //为未来加入lvl2数据留空间

        public SingleStockData(string _ticker)
        {
            BidPrices = new double[10];
            AskPrices = new double[10];
            BidVol    = new uint[10];
            AskVol    = new uint[10];

            StatusCBFishing    = StrategyStatus.None;
            StatusStockFishing = StrategyStatus.None;
            StatusTrending     = StrategyStatus.None;

            bAskPriceChanged = false;

            zbDataList = new List <ZBTickData>();

            ZBFirstIndex = -1;
            ZBLastIndex  = -1;
        }
        /// <summary>
        /// Converts instance execution status to visibility of buttons Start and Stop
        /// </summary>
        /// <param name="value">StrategyStatus</param>
        /// <param name="targetType">not used</param>
        /// <param name="parameter">String as inversion indicator</param>
        /// <param name="culture">not used</param>
        /// <returns>System.Windows.Visibility</returns>
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value != null)
            {
                StrategyStatus status = (StrategyStatus)value;

                // If parameter is Invert, then use inverted logic for button visibility
                if (parameter != null && ((string)parameter).Equals("Invert"))
                {
                    // If inverted logic and if strategy status is Executing or Executed, Start button is visible, Stop button is collapsed
                    if (status.Equals(StrategyStatus.Executing) || status.Equals(StrategyStatus.Executed))
                    {
                        return(System.Windows.Visibility.Visible);
                    }
                    else if (status.Equals(StrategyStatus.None) || status.Equals(StrategyStatus.Stopped))
                    {
                        return(System.Windows.Visibility.Collapsed);
                    }
                    else if (status.Equals(StrategyStatus.Initializing))
                    {
                        return(System.Windows.Visibility.Visible);
                    }
                }
                else
                {
                    // If not inverted logic and if strategy status is Executing or Executed, Start button is collapsed, Stop button is visible
                    if (status.Equals(StrategyStatus.Executing) || status.Equals(StrategyStatus.Executed))
                    {
                        return(System.Windows.Visibility.Collapsed);
                    }
                    else if (status.Equals(StrategyStatus.None) || status.Equals(StrategyStatus.Stopped))
                    {
                        return(System.Windows.Visibility.Visible);
                    }
                }
            }

            // Default visibility for Start button is visible
            return(System.Windows.Visibility.Visible);
        }
コード例 #12
0
ファイル: Strategy.cs プロジェクト: ForTrade/CSharp
 public Strategy(Framework framework, string name)
 {
     this.framework = framework;
     this.Name = name;
     this.strategiesByInstrument = new IdArray<LinkedList<Strategy>>(1000);
     this.strategyByOrderId = new IdArray<Strategy>(1000);
     this.strategies = new LinkedList<Strategy>();
     this.status = StrategyStatus.Stopped;
     this.instruments = new InstrumentList();
     this.instrumentCountTable = new IdArray<int>(1000);
     if (framework != null)
     {
         this.portfolio = new Portfolio(framework, this.Name);
         framework.PortfolioManager.Add(this.portfolio);
     }
     this.bars = new BarSeries("", "");
     this.equity = new TimeSeries();
     this.bids = new TickSeries("");
     this.asks = new TickSeries("");
     this.stops = new List<Stop>();
     this.stopsByInstrument = new IdArray<List<Stop>>(1000);
 }
コード例 #13
0
 public Strategy(Framework framework, string name)
 {
     this.framework = framework;
     this.Name      = name;
     this.strategiesByInstrument = new IdArray <LinkedList <Strategy> >(1000);
     this.strategyByOrderId      = new IdArray <Strategy>(1000);
     this.strategies             = new LinkedList <Strategy>();
     this.status               = StrategyStatus.Stopped;
     this.instruments          = new InstrumentList();
     this.instrumentCountTable = new IdArray <int>(1000);
     if (framework != null)
     {
         this.portfolio = new Portfolio(framework, this.Name);
         framework.PortfolioManager.Add(this.portfolio);
     }
     this.bars              = new BarSeries("", "");
     this.equity            = new TimeSeries();
     this.bids              = new TickSeries("");
     this.asks              = new TickSeries("");
     this.stops             = new List <Stop>();
     this.stopsByInstrument = new IdArray <List <Stop> >(1000);
 }
コード例 #14
0
ファイル: Strategy.cs プロジェクト: ForTrade/CSharp
 internal virtual void OnStrategyStop_()
 {
     this.status = StrategyStatus.Stopped;
     if (this.raiseEvents)
     {
         this.OnStrategyStop();
     }
     for (LinkedListNode<Strategy> linkedListNode = this.strategies.First; linkedListNode != null; linkedListNode = linkedListNode.Next)
     {
         linkedListNode.Data.OnStrategyStop_();
     }
 }
コード例 #15
0
ファイル: StrategyManager.cs プロジェクト: ForTrade/CSharp
        public void StartStrategy(Strategy strategy, StrategyMode mode)
        {
            this.strategy = strategy;
            if (mode == StrategyMode.Backtest)
            {
                this.framework.Mode = FrameworkMode.Simulation;
            }
            else
            {
                this.framework.Mode = FrameworkMode.Realtime;
            }
            if (this.framework.eventManager.status != EventManagerStatus.Running)
            {
                this.framework.eventManager.Start();
            }
            StrategyStatusInfo strategyStatusInfo = new StrategyStatusInfo(this.framework.clock.DateTime, StrategyStatusType.Started);

            strategyStatusInfo.Solution = ((strategy.Name == null) ? "Solution" : strategy.Name);
            strategyStatusInfo.Mode     = mode.ToString();
            this.framework.eventServer.OnLog(new GroupEvent(strategyStatusInfo, null));
            strategy.OnStrategyStart_();
            if (!this.framework.IsExternalDataQueue)
            {
                Dictionary <IDataProvider, InstrumentList> dictionary = new Dictionary <IDataProvider, InstrumentList>();
                while (this.requests.Count != 0)
                {
                    Dictionary <IDataProvider, InstrumentList> dictionary2 = new Dictionary <IDataProvider, InstrumentList>(this.requests);
                    this.requests.Clear();
                    foreach (KeyValuePair <IDataProvider, InstrumentList> current in new Dictionary <IDataProvider, InstrumentList>(dictionary2))
                    {
                        InstrumentList instrumentList = null;
                        if (!dictionary.TryGetValue(current.Key, out instrumentList))
                        {
                            instrumentList          = new InstrumentList();
                            dictionary[current.Key] = instrumentList;
                        }
                        InstrumentList instrumentList2 = new InstrumentList();
                        foreach (Instrument current2 in current.Value)
                        {
                            if (!instrumentList.Contains(current2))
                            {
                                instrumentList.Add(current2);
                                instrumentList2.Add(current2);
                            }
                        }
                        if (current.Key is SellSideStrategy && this.framework.SubscriptionManager != null)
                        {
                            this.framework.SubscriptionManager.Subscribe(current.Key, instrumentList2);
                        }
                    }
                }
                this.status   = StrategyStatus.Running;
                this.requests = dictionary;
                if (this.requests.Count == 0)
                {
                    Console.WriteLine(string.Concat(new object[]
                    {
                        DateTime.Now,
                        " StrategyManager::StartStrategy ",
                        strategy.Name,
                        " has no data requests, stopping..."
                    }));
                    this.StopStrategy();
                    return;
                }
                foreach (KeyValuePair <IDataProvider, InstrumentList> current3 in this.requests)
                {
                    if (!(current3.Key is SellSideStrategy) && this.framework.SubscriptionManager != null)
                    {
                        this.framework.SubscriptionManager.Subscribe(current3.Key, current3.Value);
                    }
                }
            }
        }
コード例 #16
0
ファイル: StrategyManager.cs プロジェクト: ForTrade/CSharp
 public void StartStrategy(Strategy strategy, StrategyMode mode)
 {
     this.strategy = strategy;
     if (mode == StrategyMode.Backtest)
     {
         this.framework.Mode = FrameworkMode.Simulation;
     }
     else
     {
         this.framework.Mode = FrameworkMode.Realtime;
     }
     if (this.framework.eventManager.status != EventManagerStatus.Running)
     {
         this.framework.eventManager.Start();
     }
     StrategyStatusInfo strategyStatusInfo = new StrategyStatusInfo(this.framework.clock.DateTime, StrategyStatusType.Started);
     strategyStatusInfo.Solution = ((strategy.Name == null) ? "Solution" : strategy.Name);
     strategyStatusInfo.Mode = mode.ToString();
     this.framework.eventServer.OnLog(new GroupEvent(strategyStatusInfo, null));
     strategy.OnStrategyStart_();
     if (!this.framework.IsExternalDataQueue)
     {
         Dictionary<IDataProvider, InstrumentList> dictionary = new Dictionary<IDataProvider, InstrumentList>();
         while (this.requests.Count != 0)
         {
             Dictionary<IDataProvider, InstrumentList> dictionary2 = new Dictionary<IDataProvider, InstrumentList>(this.requests);
             this.requests.Clear();
             foreach (KeyValuePair<IDataProvider, InstrumentList> current in new Dictionary<IDataProvider, InstrumentList>(dictionary2))
             {
                 InstrumentList instrumentList = null;
                 if (!dictionary.TryGetValue(current.Key, out instrumentList))
                 {
                     instrumentList = new InstrumentList();
                     dictionary[current.Key] = instrumentList;
                 }
                 InstrumentList instrumentList2 = new InstrumentList();
                 foreach (Instrument current2 in current.Value)
                 {
                     if (!instrumentList.Contains(current2))
                     {
                         instrumentList.Add(current2);
                         instrumentList2.Add(current2);
                     }
                 }
                 if (current.Key is SellSideStrategy && this.framework.SubscriptionManager != null)
                 {
                     this.framework.SubscriptionManager.Subscribe(current.Key, instrumentList2);
                 }
             }
         }
         this.status = StrategyStatus.Running;
         this.requests = dictionary;
         if (this.requests.Count == 0)
         {
             Console.WriteLine(string.Concat(new object[]
             {
                 DateTime.Now,
                 " StrategyManager::StartStrategy ",
                 strategy.Name,
                 " has no data requests, stopping..."
             }));
             this.StopStrategy();
             return;
         }
         foreach (KeyValuePair<IDataProvider, InstrumentList> current3 in this.requests)
         {
             if (!(current3.Key is SellSideStrategy) && this.framework.SubscriptionManager != null)
             {
                 this.framework.SubscriptionManager.Subscribe(current3.Key, current3.Value);
             }
         }
     }
 }
コード例 #17
0
ファイル: StrategyManager.cs プロジェクト: ForTrade/CSharp
 public void Stop()
 {
     if (this.status != StrategyStatus.Stopped)
     {
         this.status = StrategyStatus.Stopped;
         this.StopStrategy();
     }
     this.Clear();
 }
コード例 #18
0
 public StrategyResult(StrategyStatus status, IStrategy[] strategies)
 {
     Status     = status;
     Strategies = strategies;
 }
コード例 #19
0
 /// <summary>
 /// Argument Constructor
 /// </summary>
 /// <param name="instanceKey"></param>
 /// <param name="strategyStatus"></param>
 public StrategyStatusRepresentation(string instanceKey, StrategyStatus strategyStatus)
 {
     InstanceKey    = instanceKey;
     StrategyStatus = strategyStatus;
 }
コード例 #20
0
ファイル: StrategyManager.cs プロジェクト: ForTrade/CSharp
 private void StopStrategy()
 {
     Console.WriteLine(DateTime.Now + " StrategyManager::StopStrategy " + this.strategy.Name);
     if (!this.framework.IsExternalDataQueue)
     {
         foreach (KeyValuePair<IDataProvider, InstrumentList> current in new Dictionary<IDataProvider, InstrumentList>(this.requests))
         {
             if (this.framework.SubscriptionManager != null)
             {
                 this.framework.SubscriptionManager.Unsubscribe(current.Key, current.Value);
             }
         }
     }
     if (this.strategy.status == StrategyStatus.Stopped)
     {
         Console.WriteLine("StrategyManager::Stop Error: Can not stop stopped strategy ( " + this.strategy.Name + ")");
         return;
     }
     this.strategy.OnStrategyStop_();
     if (this.framework.Mode == FrameworkMode.Simulation)
     {
         this.framework.providerManager.dataSimulator.Disconnect();
         this.framework.providerManager.executionSimulator.Disconnect();
     }
     if (this.strategy.DataProvider != null)
     {
         this.strategy.DataProvider.Disconnect();
     }
     if (this.strategy.ExecutionProvider != null)
     {
         this.strategy.ExecutionProvider.Disconnect();
     }
     this.status = StrategyStatus.Stopped;
 }
コード例 #21
0
ファイル: Strategy.cs プロジェクト: ForTrade/CSharp
 internal virtual void OnStrategyStart_()
 {
     this.status = StrategyStatus.Running;
     foreach (Instrument current in this.instruments)
     {
         this.RegisterInstrument(current);
     }
     if (this.raiseEvents)
     {
         this.OnStrategyStart();
     }
     for (LinkedListNode<Strategy> linkedListNode = this.strategies.First; linkedListNode != null; linkedListNode = linkedListNode.Next)
     {
         this.RegisterStrategy(linkedListNode.Data, linkedListNode.Data.instruments, (int)linkedListNode.Data.id);
         linkedListNode.Data.OnStrategyStart_();
     }
 }