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;
            }
        }
Beispiel #3
0
        public void Entry(LegEntryType et1, LegEntryType et2)
        {
            if (entry[0].Order != null || entry[1].Order != null)
            {
                return;
            }
            if (exit[0].Order != null || exit[1].Order != null)
            {
                return;
            }

            if (mleg1 == MarketPosition.Flat)
            {
                return;
            }

            double limitleg1 = 0;
            double limitleg2 = 0;

            if (et1 == LegEntryType.Market)
            {
                limitleg1 = 0;
            }
            if (et2 == LegEntryType.Market)
            {
                limitleg2 = 0;
            }

            OrderAction[] o      = { OrderAction.Buy, OrderAction.SellShort };
            string[]      o_name = { "Buy_X", "SellShort_Y" };

            if (mleg1 == MarketPosition.Long)
            {
                if (et1 == LegEntryType.JoinBidOrAsk)
                {
                    limitleg1 = strategybase.GetCurrentBid(0);
                }
                if (et2 == LegEntryType.JoinBidOrAsk)
                {
                    limitleg2 = strategybase.GetCurrentAsk(1);
                }
            }

            if (mleg1 == MarketPosition.Short)
            {
                o      = new OrderAction[] { OrderAction.SellShort, OrderAction.Buy };
                o_name = new String[] { "SellShort_X", "Buy_Y" };

                if (et1 == LegEntryType.JoinBidOrAsk)
                {
                    limitleg1 = strategybase.GetCurrentAsk(0);
                }
                if (et2 == LegEntryType.JoinBidOrAsk)
                {
                    limitleg2 = strategybase.GetCurrentBid(1);
                }
            }

            if (strategybase.TraceOrders)
            {
                strategybase.Print(strategybase.Time[0].ToString() + " Entry:" + strategybase.Instruments[0].FullName + " " + o_name[0] + "; " + strategybase.Instruments[1].FullName + " " + o_name[1]);
            }


            if (lots1 != 0)
            {
                entry[0].Order = strategybase.SubmitOrderUnmanaged(0, o[0], (limitleg1 == 0) ? OrderType.Market : OrderType.Limit, lots1, limitleg1, 0, "", o_name[0]);
            }
            if (lots2 != 0)
            {
                entry[1].Order = strategybase.SubmitOrderUnmanaged(1, o[1], (limitleg2 == 0) ? OrderType.Market : OrderType.Limit, lots2, limitleg2, 0, "", o_name[1]);
            }
        }