protected override void OnStateChange()
        {
            base.OnStateChange();
            if (State == State.SetDefaults)
            {
                Description = "Double Pair ES, NQ, and RTY, hedged max spread pair with min spread pair";
                Name        = "StgSQRSpd";
                // This strategy has been designed to take advantage of performance gains in Strategy Analyzer optimizations
                // See the Help Guide for additional information
                Calculate = Calculate.OnBarClose;
                //IsFillLimitOnTouch							= false;
                TraceOrders         = false;
                BarsRequiredToTrade = 128;
                IsUnmanaged         = false;
                OrderFillResolution = OrderFillResolution.Standard;
                EntriesPerDirection = 4;
                DefaultQuantity     = 100;
                StopTargetHandling  = StopTargetHandling.PerEntryExecution;
                RocPeriod           = 10;
                RocScale            = 10000;
                NumStdDevUp         = 1.6;
                NumStdDevDown       = 2.6;
                PTStdDev            = 0.5;
                SLStdDev            = 0.5;
                PTRatio             = 0.2;
                SLRatio             = 0.1;
                ChartMinutes        = 8;
                MM_ProfitFactorMax  = 1;
                MM_ProfitFactorMin  = 0;
                TG_TradeStartH      = 11;
                TG_TradeStartM      = 15;
                TG_TradeEndH        = 12;
                TG_TradeEndM        = 45;
                SpySymbol           = "SPY";
                QQQSymbol           = "QQQ";
                IWMSymbol           = "IWM";
                SpyLnSymbol         = "SPXL";
                SpyStSymbol         = "SH";
                QQQLnSymbol         = "QLD";
                QQQStSymbol         = "SQQQ";
                IWMLnSymbol         = "TNA";
                IWMStSymbol         = "TZA";
                SpyLnSymbolRatio    = 3;                                                                    //"SPXL";
                SpyStSymbolRatio    = 1;                                                                    //"SH";
                QQQLnSymbolRatio    = 2;                                                                    //"QLD";
                QQQStSymbolRatio    = 3;                                                                    //"SQQQ";
                IWMLnSymbolRatio    = 3;                                                                    //"TNA";
                IWMStSymbolRatio    = 3;                                                                    //"TZA";
                TradeBaseSymbol     = 4;
                BarsToHoldPos       = 16;
                BasePriceType       = 0;
                Slippage            = 0.02;
                PrintOut            = 0;
                //IsInstantiatedOnEachOptimizationIteration = false;
            }
            else if (State == State.Configure)
            {
                AddDataSeries(QQQSymbol, Data.BarsPeriodType.Minute, ChartMinutes, Data.MarketDataType.Last);
                AddDataSeries(IWMSymbol, Data.BarsPeriodType.Minute, ChartMinutes, Data.MarketDataType.Last);

                AddDataSeries(SpyLnSymbol, Data.BarsPeriodType.Minute, ChartMinutes, Data.MarketDataType.Last);
                AddDataSeries(SpyStSymbol, Data.BarsPeriodType.Minute, ChartMinutes, Data.MarketDataType.Last);

                AddDataSeries(QQQLnSymbol, Data.BarsPeriodType.Minute, ChartMinutes, Data.MarketDataType.Last);
                AddDataSeries(QQQStSymbol, Data.BarsPeriodType.Minute, ChartMinutes, Data.MarketDataType.Last);

                AddDataSeries(IWMLnSymbol, Data.BarsPeriodType.Minute, ChartMinutes, Data.MarketDataType.Last);
                AddDataSeries(IWMStSymbol, Data.BarsPeriodType.Minute, ChartMinutes, Data.MarketDataType.Last);

                SetOrderQuantity = SetOrderQuantity.Strategy;                 // calculate orders based off default size
                // Sets a 20 tick trailing stop for an open position
                //SetTrailStop(CalculationMode.Ticks, 200);
            }
            else if (State == State.DataLoaded)
            {
//				giPctSpd = GIPctSpd(8);
//				giChartTrader = GIChartTrader(this.Input);
                giSQRSpd = GISQRSpd(RocPeriod, ChartMinutes, SpySymbol, QQQSymbol, IWMSymbol,
                                    SpyLnSymbol, SpyLnSymbolRatio, SpyStSymbol, SpyStSymbolRatio,
                                    QQQLnSymbol, QQQLnSymbolRatio, QQQStSymbol, QQQStSymbolRatio,
                                    IWMLnSymbol, IWMLnSymbolRatio, IWMStSymbol, IWMStSymbolRatio,
                                    TradeBaseSymbol, RocScale,
                                    NumStdDevUp, NumStdDevDown, PTStdDev, SLStdDev, BasePriceType);
                // Add RSI and ADX indicators to the chart for display
                // This only displays the indicators for the primary Bars object (main instrument) on the chart
                AddChartIndicator(giSQRSpd);
                giSQRSpd.TM_OpenStartH = TG_TradeStartH;
                giSQRSpd.TM_OpenStartM = TG_TradeStartM;
                giSQRSpd.TM_OpenEndH   = TG_TradeEndH;
                giSQRSpd.TM_OpenEndM   = TG_TradeEndM;

                giSQRSpd.RaiseIndicatorEvent += OnTradeBySQRSpd;

//				giPctSpd.RaiseIndicatorEvent += OnTradeBySQRSpd;
//				giPctSpd.TM_ClosingH = TG_TradeEndH;
//				giPctSpd.TM_ClosingM = TG_TradeEndM;
//				giChartTrader.RaiseIndicatorEvent += OnTradeByChartTrader;
                SetPrintOut(0);
                Print(String.Format("{0}: IsUnmanaged={1}, PrintOut={2}", this.GetType().Name, IsUnmanaged, PrintOut));
                Print(String.Format("{0}: DataLoaded...BarsArray.Length={1}", this.GetType().Name, BarsArray.Length));

                //this.Dispatcher.Invoke(() =>
//				this.Dispatcher.BeginInvoke(new ThreadStart(() =>
//				{
//				    //be.Show();
//				}));
            }
        }