// public StgPairSimple () { // VendorLicense("TheTradingBook", "StgPairSimple", "thetradingbook.com", "*****@*****.**",null); // } protected override void OnStateChange() { base.OnStateChange(); if (State == State.SetDefaults) { Description = "Pair Trading by Spread Ladders"; Name = "StgATR3"; //Account.Name = "Sim102"; SlippageRate = 0.04; //percent of the price/100 Calculate = Calculate.OnPriceChange; IsFillLimitOnTouch = false; TraceOrders = false; BarsRequiredToTrade = 12; IsUnmanaged = false; IncludeCommission = true; OrderFillResolution = OrderFillResolution.Standard; EntriesPerDirection = 1; EntryHandling = EntryHandling.AllEntries; DefaultQuantity = 100; StopTargetHandling = StopTargetHandling.PerEntryExecution; IsExitOnSessionCloseStrategy = false; //ExitOnSessionCloseSeconds = 30; // MM_ProfitFactorMax = 1; // MM_ProfitFactorMin = 0; // TG_TradeEndH = 10; // TG_TradeEndM = 45; TG_OpenStartH = 8; TG_OpenStartM = 30; PeriodNear = 10; PeriodMiddle = 30; PeriodFar = 90; MktPosition1 = MarketPosition.Flat; MktPosition2 = MarketPosition.Flat; SPKLineThresholdLow = 3; SPKLineThresholdMid = 50; SPKLineThresholdHigh = 96; TradeCostRate = 0.3; DaysToHoldPos = 9; PrintOut = 1; // IsInstantiatedOnEachOptimizationIteration = false; } else if (State == State.Configure) { // Add an MSFT 1 minute Bars object to the strategy //AddDataSeries("NQ 06-20", Data.BarsPeriodType.Minute, 13); if (ChartMinutes > 0) { AddDataSeries(SecondSymbol, BarsPeriodType.Minute, ChartMinutes, MarketDataType.Last); } else { AddDataSeries(SecondSymbol, BarsPeriodType.Day, 1, MarketDataType.Last); } //AddDataSeries(SecondSymbol, BarsPeriodType.Minute, ChartMinutes); 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) { giSpdLadder = GISpdLadder(SecondSymbol, ChartMinutes, PeriodNear, PeriodMiddle, PeriodFar, SPKLineThresholdLow, SPKLineThresholdMid, SPKLineThresholdHigh, 1); // CapRatio1, CapRatio2, PctChgSpdThresholdEn, PctChgSpdThresholdEx); AddChartIndicator(giSpdLadder); giSpdLadder.RaiseIndicatorEvent += OnTradeBySpdLadder; // giPctSpd.RaiseIndicatorEvent += OnTradeByPctSpd; // giPctSpd.TM_ClosingH = TG_TradeEndH; // giPctSpd.TM_ClosingM = TG_TradeEndM; SetPrintOut(-1); CapRatio2 = 1; CapRatio1 = Closes[1][0] / Closes[0][0]; if (!IsInStrategyAnalyzer && PrintOut > 1) { Print(String.Format("{0}: IsUnmanaged={1}", this.GetType().Name, IsUnmanaged)); Print(String.Format("{0}: DataLoaded...BarsArray.Length={1}", this.GetType().Name, BarsArray.Length)); } ctxPairSpdDaily = giSpdLadder.CtxPairSpreadDaily; // if(BarsPeriod.BarsPeriodType == BarsPeriodType.Day) { // //SetMarketContext(); // ctxPairSpd = new Dictionary<string, List<CtxPairSpd>>(); // } if (BarsPeriod.BarsPeriodType != BarsPeriodType.Day) { GetMarketContext(); } } }
// public StgPairSimple () { // VendorLicense("TheTradingBook", "StgPairSimple", "thetradingbook.com", "*****@*****.**",null); // } protected override void OnStateChange() { base.OnStateChange(); if (State == State.SetDefaults) { Description = "Pair Trading by Spread Diff or Ratio"; Name = "StgPairSpdRS"; Calculate = Calculate.OnPriceChange; IsFillLimitOnTouch = false; TraceOrders = false; BarsRequiredToTrade = 128; IsUnmanaged = false; IncludeCommission = true; OrderFillResolution = OrderFillResolution.Standard; EntriesPerDirection = 2; EntryHandling = EntryHandling.AllEntries; DefaultQuantity = 100; StopTargetHandling = StopTargetHandling.PerEntryExecution; IsExitOnSessionCloseStrategy = false; //ExitOnSessionCloseSeconds = 30; // MM_ProfitFactorMax = 1; // MM_ProfitFactorMin = 0; // TG_TradeEndH = 10; // TG_TradeEndM = 45; TG_OpenStartH = 8; TG_OpenStartM = 30; MktPosition1 = MarketPosition.Flat; MktPosition2 = MarketPosition.Flat; NumStdDevUp = 1.6; NumStdDevDown = 1.6; NumStdDevUpMin = 0.2; NumStdDevDownMin = 0.2; // IsInstantiatedOnEachOptimizationIteration = false; } else if (State == State.Configure) { // Add an MSFT 1 minute Bars object to the strategy //AddDataSeries("NQ 06-20", Data.BarsPeriodType.Minute, 13); if (ChartMinutes > 0) { AddDataSeries(SecondSymbol, BarsPeriodType.Minute, ChartMinutes, MarketDataType.Last); } else { AddDataSeries(SecondSymbol, BarsPeriodType.Day, 1, MarketDataType.Last); } //AddDataSeries(SecondSymbol, BarsPeriodType.Minute, ChartMinutes); 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) { giSpdRs = GISpdRS(NumStdDevUp, NumStdDevDown, NumStdDevUpMin, NumStdDevDownMin, MAPeriod, ATRPeriod, SecondSymbol, ChartMinutes); // CapRatio1, CapRatio2, PctChgSpdThresholdEn, PctChgSpdThresholdEx); AddChartIndicator(giSpdRs); giSpdRs.RaiseIndicatorEvent += OnTradeByPairSpdRs; // giPctSpd.RaiseIndicatorEvent += OnTradeByPctSpd; // giPctSpd.TM_ClosingH = TG_TradeEndH; // giPctSpd.TM_ClosingM = TG_TradeEndM; SetPrintOut(1); CapRatio2 = 1; CapRatio1 = Closes[1][0] / Closes[0][0]; Print(String.Format("{0}: IsUnmanaged={1}", this.GetType().Name, IsUnmanaged)); Print(String.Format("{0}: DataLoaded...BarsArray.Length={1}", this.GetType().Name, BarsArray.Length)); ctxPairSpdDaily = giSpdRs.CtxPairSpreadDaily; // if(BarsPeriod.BarsPeriodType == BarsPeriodType.Day) { // //SetMarketContext(); // ctxPairSpd = new Dictionary<string, List<CtxPairSpd>>(); // } if (BarsPeriod.BarsPeriodType != BarsPeriodType.Day) { GetMarketContext(); } } }