示例#1
0
 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);
         }
     }
 }
示例#2
0
        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;
            }
        }