public void setIExitHandling(IExitHandling ieh) { iexithandling = ieh; if (ieh == null) { iehdata = null; return; } try { byte[] mem = new byte[32768]; MemoryStream memstr = new MemoryStream(mem, true); ibKastl.Helper.BinaryFormatterHelper.Write(iexithandling, memstr); //Zweistein.NinjaTraderLog.Process("setIExitHandling:", iexithandling.ToString(), NinjaTrader.Cbi.LogLevel.Warning, NinjaTrader.Cbi.LogCategories.Strategy); byte[] used = new byte[(int)memstr.Position]; byte[] res = memstr.ToArray(); for (int i = 0; i < (int)memstr.Position; i++) { used[i] = res[i]; } iehdata = Convert.ToBase64String(used, Base64FormattingOptions.None); } catch (Exception e) { Zweistein.NinjaTraderLog.Process("setIExitHandling:", e.Message, NinjaTrader.Cbi.LogLevel.Warning, NinjaTrader.Cbi.LogCategories.Strategy); if (strategybase.TraceOrders) { strategybase.Print(e.Message + " " + e.Source); } } }
public void setStrategyBase(NinjaTrader.NinjaScript.StrategyBase s) { strategybase = s; SetBaseCurrency(s.Account.Denomination); if (!string.IsNullOrEmpty(iehdata)) { try { BinaryFormatter bf = new BinaryFormatter(); MemoryStream memstr = new MemoryStream(Convert.FromBase64String(iehdata), true); iexithandling = ibKastl.Helper.BinaryFormatterHelper.Read <IExitHandling>(memstr, Assembly.GetExecutingAssembly()); Zweistein.NinjaTraderLog.Process("SingleSpread.setStrategyBase:", iexithandling.ToString(), NinjaTrader.Cbi.LogLevel.Warning, NinjaTrader.Cbi.LogCategories.Strategy); } catch (Exception e) { Zweistein.NinjaTraderLog.Process("SingleSpread.setStrategyBase:", e.Message, NinjaTrader.Cbi.LogLevel.Warning, NinjaTrader.Cbi.LogCategories.Strategy); if (strategybase.TraceOrders) { strategybase.Print(e.Message + " SOURCE:" + e.Source); } } } string tmp = "iexithandling="; if (iexithandling == null) { Zweistein.NinjaTraderLog.Process("SingleSpread.setStrategyBase:", "iexithandling==null", NinjaTrader.Cbi.LogLevel.Warning, NinjaTrader.Cbi.LogCategories.Strategy); tmp += "null"; } else { tmp += iexithandling.ToString(); } if (strategybase.TraceOrders) { strategybase.Print(tmp); } entry[0].setStrategyBase(s); entry[1].setStrategyBase(s); exit[0].setStrategyBase(s); exit[1].setStrategyBase(s); }
public static void StrategyHandleClickedButton(StrategyBase strategy, ClickhandlerArgs cha, Queue <SingleSpread> spreads, string strratio, LegEntryType leg1entrytype, LegEntryType leg2entrytype, object ieh) { int _units = cha.Units; // bool b= mut.WaitOne(new TimeSpan(0,0,3)); // if (b == false) throw new TimeoutException("clickcustomhandler mutex timeout"); switch (cha.ClickedButton) { case ClickedButton.Close: lock (spreads){ foreach (SingleSpread spread in spreads) { spread.Exit(LegExitType.Market, LegExitType.Market); } } break; case ClickedButton.Reverse: lock (spreads){ foreach (SingleSpread s in spreads) { s.Reverse(); } } break; case ClickedButton.GoLong: lock (spreads){ foreach (SingleSpread s in spreads) { if (s.MarketPosition != MarketPosition.Long) { Zweistein.NinjaTraderLog.Process("GoLong: already Short", "", LogLevel.Error, LogCategories.User); if (strategy.TraceOrders) { strategy.Print("GoLong: already Short"); } return; } } //strategy.Account.Currency SingleSpread spread = new SingleSpread(MarketPosition.Long, _units, strratio, strategy); spread.Entry(leg1entrytype, leg2entrytype); IExitHandling eh = ieh as IExitHandling; spread.setIExitHandling(eh); if (cha.Guid != null) { spread.Guid = cha.Guid; } spreads.Enqueue(spread); } break; case ClickedButton.GoShort: lock (spreads){ foreach (SingleSpread s in spreads) { if (s.MarketPosition != MarketPosition.Short) { Zweistein.NinjaTraderLog.Process("GoShort: already Long", "", LogLevel.Error, LogCategories.User); if (strategy.TraceOrders) { strategy.Print("GoShort: already Long"); } return; } } SingleSpread spread = new SingleSpread(MarketPosition.Short, _units, strratio, strategy); spread.Entry(leg1entrytype, leg2entrytype); IExitHandling eh = ieh as IExitHandling; spread.setIExitHandling(eh); if (cha.Guid != null) { spread.Guid = cha.Guid; } spreads.Enqueue(spread); } break; } }