public static void StrategyUpdateTickets(StrategyBase strategy, SpreadTraderWindow stw, Queue <SingleSpread> spreads, double displayedprice, string strratio, LegEntryType leg1entrytype, LegEntryType leg2entrytype, object ieh) { List <SpreadOrderTicket> ticketstoremove = new List <SpreadOrderTicket>(); lock (stw.tickets) { if (stw.tickets.Count > 0) { foreach (SpreadOrderTicket ticket in stw.tickets) { if (ticket.EntryConditionSatisfied(displayedprice)) { Guid newguid = Guid.NewGuid(); ticket.Guid = newguid; ticketstoremove.Add(ticket); ClickhandlerArgs A = new ClickhandlerArgs(ticket.ClickedButton, ticket.Units, newguid); Zweistein.SpreadTraderWindow.StrategyHandleClickedButton(strategy, A, spreads, strratio, leg1entrytype, leg2entrytype, ieh); // clickcustomhandler(A); } } } } if (ticketstoremove.Count > 0) { foreach (SpreadOrderTicket t in ticketstoremove) { stw.Dispatcher.Invoke(new Action(() => stw.DeleteTicket(t))); } } }
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; } }