Ejemplo n.º 1
0
        List <decimal> GetState(string s)
        {
            //pfe, pfe_inc, eit, eit_inc, PerfScoreLong, PerfScoreShort, successRatio

            //pfe, eit, PerfScore, successRatio
            var list = new List <decimal>();

            list.Add(pfe[s]);
            list.Add(eit[s]);
            list.Add(TradeMonitor.GetAveragePerfForDays(s, Time, stockPickingPeriod));
            list.Add(TradeMonitor.GetAveragePerfForDays(s, Time, longPeriod));
            return(list);
        }
Ejemplo n.º 2
0
        void BuyRatio(Slice data, Symbol s, decimal ratio)
        {
            var sr = TradeMonitor.GetSuccessRatio(s);

            TradeMonitor.AddTrade(s, Securities[s].Price, GetState(s));
            //if (sr < 0.0 && !s.ToString().StartsWith("VXX")) return;
            if (!tradableSymbols.Contains(s))
            {
                return;
            }
            if (IsWarmingUp)
            {
                return;
            }


            if (Portfolio[s].Quantity == 0)
            {
                SetHoldings(s, ratio);
            }
        }
Ejemplo n.º 3
0
        public override void OnEndOfDay()
        {
            //Transactions.CancelOpenOrders();
            //_pfeStrategy.Update(new TradeBar(Time, symbols.FirstOrDefault(), Portfolio.TotalPortfolioValue, Portfolio.TotalPortfolioValue, Portfolio.TotalPortfolioValue, Portfolio.TotalPortfolioValue, Portfolio.TotalPortfolioValue));_pfeStrategy
            _pfeStrategy.Update(new IndicatorDataPoint(Time, Portfolio.TotalPortfolioValue));
            Plot("PFE", "Strategy", _pfeStrategy.Current.Value);

            if (jitter < 1000)
            {
                Plot("Jitter", "Jitter", (decimal)jitter);
                jitterSma.Update(Time, jitter);
                jitterSmaL.Update(Time, jitter);
                Plot("Jitter", "JitterSMA", jitterSma.Current.Value);
                Plot("Jitter", "JitterLong", jitterSmaL.Current.Value);
            }
            jitter = 0;

            var perf  = new Dictionary <string, decimal>();
            var perfS = new Dictionary <string, decimal>();
            var bull1 = 0;
            var bull2 = 0;
            var bull3 = 0;

            foreach (var s in symbols)
            {
                // if (riskProtectSymbols.Contains(s))
                // {
                //  UpdateReference(s);
                //  _pfeReference[s].Update(new TradeBar(Time, s, reference[s], reference[s], reference[s], reference[s], reference[s]));
                // }

                if (eit[s] > 0)
                {
                    bull1++;
                }
                if (pfe[s] > 0)
                {
                    bull2++;
                }
                if (pfe[s] > ppfe[s] && pfe[s] > -50)
                {
                    bull3++;
                }
                Plot("BULLISH", "EIT", (decimal)bull1);
                Plot("BULLISH", "PFE", (decimal)bull2);
                Plot("BULLISH", "PFE+", (decimal)bull2);
                perf[s]  = TradeMonitor.GetAveragePerfForDays(s, Time, stockPickingPeriod);
                perfS[s] = TradeMonitor.GetAveragePerfForDays(s, Time, longPeriod);

                ppfe[s] = pfe[s];
            }


            tradableSymbols.Clear();
            if (!IsWarmingUp)
            {
                var l1 = (from entry in perf where perf[entry.Key] > 0  orderby perf[entry.Key] descending select entry.Key).Take(MAX_POS * 2);
                var l2 = (from entry in l1 where perfS[entry] > 0  orderby perfS[entry] descending select entry).Take(MAX_POS * 2);
                var lr = l2;        //l1.Intersect(l2);
                foreach (var s in lr)
                {
                    tradableSymbols.Add(s);
                }
                //tradableSymbols.Add("QQQ");
                // tradableSymbols.Add("VXX");
                // tradableSymbols.Add("VXX.1");
            }
        }
Ejemplo n.º 4
0
        public override void OnData(Slice data)
        {
            if (!IsWarmingUp && Time.Month != pmonth && VOL_PROTECT)
            {
                SetHoldings("VIXM", 0.1m);
                pmonth = Time.Month;
            }

            if (Time.Minute != 0)
            {
                return;
            }

            foreach (var s in symbols)
            {
                if (!Securities.ContainsKey(s))
                {
                    continue;
                }
                TradeMonitor.RecordPerf(s, Securities[s].Price);


                if (pvalue[s] > 50 & pfe[s] < 50 || pfe[s] < -50)
                {
                    if (activate[s])
                    {
                        jitter++;
                    }
                    activate[s] = false;
                }
                else if (pvalue[s] < -50 & pfe[s] > -50 || pfe[s] > 0 && pfe[s] > pvalue[s])
                {
                    if (!activate[s])
                    {
                        jitter++;
                    }
                    activate[s] = true;
                }
                pvalue[s] = pfe[s];



                if (eit[s].IsReady)
                {
                    if (Securities.ContainsKey(s) && data.Bars.ContainsKey(s))
                    {
                        var ratio = 1.0m / MAX_POS;      ///(symbols.Contains("VXX.1")) ? 1.0/(symbols.Count()-1) : 1.0 / (symbols.Count());
                        //if (POS_COUNT >= 10) ratio = 0.1;

                        if (activate[s] && Portfolio[s].Quantity == 0)
                        {
                            if (eit[s] > 0 && data[s].Close > Math.Max(eit[s].Lag, eit[s].InstantaneousTrend))
                            {
                                BuyRatio(data, s, ratio);
                            }
                        }

                        if (eit[s] < 0 || data[s].Close < Math.Min(eit[s].Lag, eit[s].InstantaneousTrend))
                        {
                            UpdateReference(s);
                            if (Securities.ContainsKey(s))
                            {
                                TradeMonitor.CloseAt(s, Securities[s].Price, Time);
                            }
                            if (Portfolio.ContainsKey(s) && Portfolio[s].Quantity != 0 && !IsWarmingUp)
                            {
                                SetHoldings(s, 0);                        //, tag:TradeMonitor.GetPerfReport(s));
                            }
                        }
                        else if (!activate[s] && data.Bars.ContainsKey(s) && data.Bars[s].Close < eit[s].Lag)                //tightening the grip when trend slowing down according to PFE
                        {
                            UpdateReference(s);
                            TradeMonitor.CloseAt(s, Securities[s].Price, Time);
                            if (Portfolio[s].Quantity != 0 && !IsWarmingUp)
                            {
                                SetHoldings(s, 0);                        //, tag:TradeMonitor.GetPerfReport(s));
                            }
                        }
                        //risk mgmt kinda redundant with algo so little impact on DD
                        // else //if (data.Bars.ContainsKey(s))
                        // {
                        //  // if (stopLoss.ContainsKey(s) && data[s].Close < stopLoss[s])
                        //  // {
                        //  //  UpdateReference(s);
                        //  //  TradeMonitor.CloseAt(s, Securities[s].Price, Time);
                        //  //  if (Portfolio[s].Quantity != 0)
                        //  //      SetHoldings(s, 0, tag:TradeMonitor.GetPerfReport(s));
                        //  // }
                        //  // else if (takeProfit.ContainsKey(s) && data[s].Close >= takeProfit[s])
                        //  // {
                        //  //  if (Portfolio[s].Quantity != 0)
                        //  //      MarketOrder(s, -0.5m * Portfolio[s].Quantity);
                        //  //  takeProfit.Remove(s);
                        //  // }
                        //  // else if (!takeProfit.ContainsKey(s) && data[s].Close < Portfolio[s].AveragePrice)
                        //  // {
                        //  //  UpdateReference(s);
                        //  //  TradeMonitor.CloseAt(s, Securities[s].Price, Time);
                        //  //  if (Portfolio[s].Quantity != 0)
                        //  //      SetHoldings(s, 0, tag:TradeMonitor.GetPerfReport(s));
                        //  // }
                        // }
                    }
                }
            }
        }