Example #1
0
        private void SetCenterLine(List <TakeProfitTrade> tpt)
        {
            var r     = tpt.Last().TotalPL;
            var count = tpt.Count();

            for (int q = 0; q < count; q++)
            {
                tpt[q].StopLoss_CenterLine = r;


                //set Variable List
                var v = new VariableIndicator()
                {
                    TimeStamp = tpt[q].TimeStamp,
                    Value     = tpt[q].TotalRunningProfit
                };
                VarList.Add(v);
            }
        }
Example #2
0
        public static void StandardDevOnPL(List <Trade> Trades)
        {
            var viList = new List <VariableIndicator>();
            var list   = Trades.Where(z => z.Reason == Trade.Trigger.CloseLong || z.Reason == Trade.Trigger.CloseShort);

            foreach (var l in list)
            {
                var VI = new VariableIndicator()
                {
                    Value     = l.TotalPL,
                    TimeStamp = l.TimeStamp,
                };
                viList.Add(VI);
            }

            var SDTDEV = Factory_Indicator.creatStandardDeviation(1, 10, viList);

            foreach (var v in SDTDEV)
            {
                Debug.WriteLine(v.N + "," + v.SingleStdev + "," + v.CustomValue + "," + v.StdDev);
            }
        }
Example #3
0
        public static List <Trade> RegressionAnalysis_OnPL(int N, List <Trade> Trades)
        {
            List <VariableIndicator> V = new List <VariableIndicator>();
            var tradeonlyList          = Trades.Where(z => z.Reason == Trade.Trigger.CloseLong || z.Reason == Trade.Trigger.CloseShort);

            foreach (var v in tradeonlyList)
            {
                var varindicator = new VariableIndicator()
                {
                    TimeStamp = v.TimeStamp,
                    Value     = v.TotalPL,
                };

                V.Add(varindicator);
            }
            var reg = Factory_Indicator.createRegression(N, V);

            // var avg= reg.Sum(z => z.Slope) / reg.Count;
            // Debug.WriteLine(avg);
            foreach (var t in tradeonlyList)
            {
                foreach (var e in reg)
                {
                    if (e.TimeStamp == t.TimeStamp)
                    {
                        t.Extention.Regression = e.Regression;
                        t.Extention.Slope      = e.Slope;
                        t.Extention.OrderVol   = 1;
                    }
                }
            }



            return(tradeonlyList.ToList());
        }
Example #4
0
        private void SetRegressionSlopes()
        {           //cannot use linq, too slow
            var FTL       = _FullTradeList.Where(z => z.StopLoss_CenterLine != 0).ToList();
            var Ftl_Count = FTL.Count;


            #region Regression Calcs-Regression of MAMA

            var varList1 = new List <VariableIndicator>();
            foreach (var x in FTL.Where(z => z.Mama != null))
            {
                var v = new VariableIndicator()
                {
                    TimeStamp = x.TimeStamp,
                    Value     = x.Mama.Mama,
                };
                varList1.Add(v);
            }

            var reg1     = Factory_Indicator.createRegression(_reg1, varList1);
            var varList2 = new List <VariableIndicator>();

            foreach (var rr in reg1)
            {
                var q = new VariableIndicator()
                {
                    TimeStamp = rr.TimeStamp,
                    Value     = rr.Slope,
                };
                varList2.Add(q);
            }

            var reg2 = Factory_Indicator.createRegression(_reg2, varList2);

            var varList3 = new List <VariableIndicator>();

            foreach (var rr in reg2)
            {
                var qq = new VariableIndicator()
                {
                    TimeStamp = rr.TimeStamp,
                    Value     = rr.Slope,
                };
                varList3.Add(qq);
            }

            var reg3 = Factory_Indicator.createRegression(_reg3, varList3);
            #endregion

            #region Populate TakeProfitTrade object

            int ftl_Start_Index;

            //REG_1_SLOPE
            ftl_Start_Index = 0;
            //find start for reg1
            var reg1_Count = reg1.Count;
            //find first reg1.Time=FTL.Time
            var Ftl_Time_Equal_Reg1_Time = FTL.Where(f => f.TimeStamp == reg1[0].TimeStamp).First().TimeStamp;
            foreach (var Ft in FTL)
            {
                if (Ft.TimeStamp == Ftl_Time_Equal_Reg1_Time)
                {
                    break;
                }
                ftl_Start_Index++;
            }
            for (int x = 0; x < Ftl_Count - ftl_Start_Index; x++)
            {
                FTL[ftl_Start_Index + x].Reg1_Slope = reg1[x].Slope;
            }

            //REG_2_SLOPE
            ftl_Start_Index = 0;
            //find start for reg2
            var reg2_Count = reg2.Count;
            //find first reg1.Time=FTL.Time
            var Ftl_Time_Equal_Reg2_Time = FTL.Where(f => f.TimeStamp == reg2[0].TimeStamp).First().TimeStamp;
            foreach (var Ft in FTL)
            {
                if (Ft.TimeStamp == Ftl_Time_Equal_Reg2_Time)
                {
                    break;
                }
                ftl_Start_Index++;
            }
            for (int x = 0; x < Ftl_Count - ftl_Start_Index; x++)
            {
                FTL[ftl_Start_Index + x].Reg2_Slope = reg2[x].Slope * 10;
            }


            //REG_3_SLOPE
            ftl_Start_Index = 0;
            //find start for reg3
            var reg3_Count = reg3.Count;
            //find first reg1.Time=FTL.Time
            var Ftl_Time_Equal_Reg3_Time = FTL.Where(f => f.TimeStamp == reg3[0].TimeStamp).First().TimeStamp;
            foreach (var Ft in FTL)
            {
                if (Ft.TimeStamp == Ftl_Time_Equal_Reg3_Time)
                {
                    break;
                }
                ftl_Start_Index++;
            }
            for (int x = 0; x < Ftl_Count - ftl_Start_Index; x++)
            {
                FTL[ftl_Start_Index + x].Reg3_Slope = reg3[x].Slope * 100;
            }

            #endregion
        }
		private void SetRegressionSlopes()
		{   //cannot use linq, too slow
			var FTL = _FullTradeList.Where(z => z.StopLoss_CenterLine != 0).ToList();
			var Ftl_Count = FTL.Count;


			#region Regression Calcs-Regression of MAMA

			var varList1 = new List<VariableIndicator>();
			foreach (var x in FTL.Where(z => z.Mama != null))
			{
				var v = new VariableIndicator()
				{
					TimeStamp = x.TimeStamp,
					Value = x.Mama.Mama,
				};
				varList1.Add(v);
			}

			var reg1 = Factory_Indicator.createRegression(_reg1, varList1);
			var varList2 = new List<VariableIndicator>();

			foreach (var rr in reg1)
			{
				var q = new VariableIndicator()
				{
					TimeStamp = rr.TimeStamp,
					Value = rr.Slope,
				};
				varList2.Add(q);
			}

			var reg2 = Factory_Indicator.createRegression(_reg2, varList2);

			var varList3 = new List<VariableIndicator>();

			foreach (var rr in reg2)
			{
				var qq = new VariableIndicator()
				{
					TimeStamp = rr.TimeStamp,
					Value = rr.Slope,
				};
				varList3.Add(qq);
			}

			var reg3 = Factory_Indicator.createRegression(_reg3, varList3);
			#endregion

			#region Populate TakeProfitTrade object

			int ftl_Start_Index;

			//REG_1_SLOPE
			ftl_Start_Index = 0;
			//find start for reg1
			var reg1_Count = reg1.Count;
			//find first reg1.Time=FTL.Time
			var Ftl_Time_Equal_Reg1_Time = FTL.Where(f => f.TimeStamp == reg1[0].TimeStamp).First().TimeStamp;
			foreach (var Ft in FTL)
			{
				if (Ft.TimeStamp == Ftl_Time_Equal_Reg1_Time) break;
				ftl_Start_Index++;
			}
			for (int x = 0; x < Ftl_Count - ftl_Start_Index; x++) FTL[ftl_Start_Index + x].Reg1_Slope = reg1[x].Slope;

			//REG_2_SLOPE
			ftl_Start_Index = 0;
			//find start for reg2
			var reg2_Count = reg2.Count;
			//find first reg1.Time=FTL.Time
			var Ftl_Time_Equal_Reg2_Time = FTL.Where(f => f.TimeStamp == reg2[0].TimeStamp).First().TimeStamp;
			foreach (var Ft in FTL)
			{
				if (Ft.TimeStamp == Ftl_Time_Equal_Reg2_Time) break;
				ftl_Start_Index++;
			}
			for (int x = 0; x < Ftl_Count - ftl_Start_Index; x++) FTL[ftl_Start_Index + x].Reg2_Slope = reg2[x].Slope * 10;


			//REG_3_SLOPE
			ftl_Start_Index = 0;
			//find start for reg3
			var reg3_Count = reg3.Count;
			//find first reg1.Time=FTL.Time
			var Ftl_Time_Equal_Reg3_Time = FTL.Where(f => f.TimeStamp == reg3[0].TimeStamp).First().TimeStamp;
			foreach (var Ft in FTL)
			{
				if (Ft.TimeStamp == Ftl_Time_Equal_Reg3_Time) break;
				ftl_Start_Index++;
			}
			for (int x = 0; x < Ftl_Count - ftl_Start_Index; x++) FTL[ftl_Start_Index + x].Reg3_Slope = reg3[x].Slope * 100;

			#endregion

		}
		private void SetCenterLine(List<TakeProfitTrade> tpt)
		{
			var r = tpt.Last().TotalPL;
			var count = tpt.Count();
			for (int q = 0; q < count; q++)
			{
				tpt[q].StopLoss_CenterLine = r;


				//set Variable List
				var v = new VariableIndicator()
				{
					TimeStamp = tpt[q].TimeStamp,
					Value = tpt[q].TotalRunningProfit
				};
				VarList.Add(v);

			}

		}
            private static void Apply_2nd_AlgoLayer(int EMA)
            {
                List<VariableIndicator> _st = new List<VariableIndicator>();
                foreach (var t in _ST)
                {
                    if (t.TotalProfit != 0)
                    {
                        VariableIndicator v = new VariableIndicator()
                        {
                            TimeStamp = t.TimeStamp,
                            Value = t.TotalProfit,
                        };
                        _st.Add(v);
                    }
                }

                var ema = Factory_Indicator.createEMA(EMA, _st);
                double newprof = ema[0].CustomValue;
                TradeStrategy mt = null;
                bool cantradeA = false;
                bool cantradeB = false;
                bool closepos = false;
                bool first = true;
                int count = 0;
                foreach (var v in ema)
                {
                    count++;
                    // if (count > 30) break;          

                    if (first) ;
                    mt = _ST.Where(z => z.TimeStamp == v.TimeStamp).First();

                    if (!first) closepos = (mt.ActualTrade == Trade.Trigger.CloseShort || mt.ActualTrade == Trade.Trigger.CloseLong);
                    if (closepos && cantradeA) cantradeB = true;
                    else
                        cantradeB = false;

                    cantradeA = (v.CustomValue > v.Ema);

                    if (!first && closepos && cantradeB) newprof += mt.RunningProfit;

                    //Debug.WriteLine(((cantradeA) ? "**" : "") + ((cantradeB) ? "**" : "") + v.Timestamp + " " + v.CustomValue + " " + v.Ema +
                    //    " TradeA :" + cantradeA + "  TradeB :" + cantradeB + " Prof " + newprof +
                    //    "   " + ((!first && mt != null) ? mt.ActualTrade.ToString() : ""));



                    first = false;
                }

                Debug.WriteLine(EMA + "  " + newprof);
                Debug.WriteLine("----------------------------------------------");


            }
        public static List<IndicatorBasket> CalcIndicators()
        {
         //   Console.WriteLine("Calculating Indicators...");
            var Indicators = new List<IndicatorBasket>();

            //Base Level Calcs
            var ohlc = Trades.Select(z => z.OHLC);
            var OHLC_LIST = ohlc.ToList();
            var volume = Trades.ToDictionary(x => x.TimeStamp, x => x.TradeVolume);
            var trigger = Trades.ToDictionary(x => x.TimeStamp, x => x.TradeTrigger);
            var EM = AlsiUtils.Factory_Indicator.createAdaptiveMA_MAMA(P.Mamapar1, P.Mamapar2, OHLC_LIST).ToDictionary(x => x.TimeStamp, x => x.Mama);
            var adx_DMI = AlsiUtils.Factory_Indicator.createADX(P.ADX_period, OHLC_LIST);
            var RSI = AlsiUtils.Factory_Indicator.createRSI(P.RSI_period, OHLC_LIST);


            //Second Level Clacs
            //EMA OF DMI+ and DMI-
            List<VariableIndicator> varDmiUP = new List<VariableIndicator>();
            List<VariableIndicator> varDmiDOWN = new List<VariableIndicator>();
            foreach (var f in adx_DMI)
            {
                var vdown = new VariableIndicator()
                    {
                        TimeStamp = f.TimeStamp,
                        Value = f.DI_Down,
                    };
                var vup = new VariableIndicator()
                {
                    TimeStamp = f.TimeStamp,
                    Value = f.DI_Up,
                };

                varDmiUP.Add(vup);
                varDmiDOWN.Add(vdown);
            }

            var Dmi_Up_EMA = Factory_Indicator.createEMA(P.Di_UP_avg_period, varDmiUP);
            var Dmi_Down_EMA = Factory_Indicator.createEMA(P.Di_DOWN_avg_period, varDmiDOWN);

            //EMA OF RSI
            List<VariableIndicator> varRsi = new List<VariableIndicator>();
            foreach (var r in RSI)
            {
                var rsi = new VariableIndicator()
                {
                    TimeStamp = r.TimeStamp,
                    Value = r.RSI,
                };
                varRsi.Add(rsi);
            }

            var RSI_EMA = Factory_Indicator.createEMA(P.RSI_EMA, varRsi);

            //slope OF RSI
            var rsi_slope = Factory_Indicator.createRegression(P.RSI_Slope_period, varRsi);

            //CREATE DICTIONARY 
            var DMI_UP_DIC = Dmi_Up_EMA.ToDictionary(x => x.TimeStamp, x => x.Ema);
            var DMI_Down_DIC = Dmi_Down_EMA.ToDictionary(x => x.TimeStamp, x => x.Ema);
            var RSI_DIC = RSI_EMA.ToDictionary(x => x.TimeStamp, x => x.Ema);
            var RSI_SLOPE = rsi_slope.ToDictionary(x => x.TimeStamp, x => x.Slope);



          //  var sw = new StreamWriter(@"d:\Indicators.csv");
           // sw.WriteLine("Trade" + "," + "Stamp" + "," + "PriceClose" + "," + "MAMA" + "," + "DI-UP" + "," + "DI-DOWN" + "," + "VOL" + "," + "RSI" + "," + "RSI SLOPE" + "," + "extra 3" + "," + "extra 4");
            foreach (var r in adx_DMI)
            {
                double em = 0;
                EM.TryGetValue(r.TimeStamp, out em);

                double rs = 0;
                RSI_DIC.TryGetValue(r.TimeStamp, out rs);

                double rsslope = 0;
                RSI_SLOPE.TryGetValue(r.TimeStamp, out rsslope);

                int vol = 0;
                volume.TryGetValue(r.TimeStamp, out vol);

                double DI_up = 0;
                DMI_UP_DIC.TryGetValue(r.TimeStamp, out DI_up);

                double DI_Down = 0;
                DMI_Down_DIC.TryGetValue(r.TimeStamp, out DI_Down);

                Trade.Trigger Trig;
                trigger.TryGetValue(r.TimeStamp, out Trig);



                var topband = DI_up;
                var midband = em;
                var lowband = DI_Down;

                var b1 = rs;
                var adjVol = (vol == null) ? 0 : vol;
                var b2 = rsslope; ;
                var b3 = 0;
                var b4 = 0;
                var trade = Trig;

                var i = new IndicatorBasket()
                {
                    Action = trade,
                    Timestamp = r.TimeStamp,
                    DI_DOWN = DI_Down,
                    DI_UP = DI_up,
                    Mama = em,
                    RSI = rs,
                    RSI_SLOPE = rsslope,
                    Price = r.Price_Close,
                    Volume = adjVol,

                };
                Indicators.Add(i);
             //   sw.WriteLine(trade + "," + r.TimeStamp + "," + r.Price_Close + "," + midband + "," + topband + "," + lowband + "," + adjVol + "," + b1 + "," + b2 + "," + b3 + "," + b4);
            }
         //   sw.Close();
           
            return Indicators;
        }
        public static List<Trade> RegressionAnalysis_OnPL(int N, List<Trade> Trades)
        {
            List<VariableIndicator> V = new List<VariableIndicator>();
            var tradeonlyList = Trades.Where(z => z.Reason == Trade.Trigger.CloseLong || z.Reason == Trade.Trigger.CloseShort);
            foreach (var v in tradeonlyList)
            {
                var varindicator = new VariableIndicator()
                {
                    TimeStamp = v.TimeStamp,
                    Value = v.TotalPL,

                };

                V.Add(varindicator);
            }
            var reg = Factory_Indicator.createRegression(N, V);

            // var avg= reg.Sum(z => z.Slope) / reg.Count;
            // Debug.WriteLine(avg);
            foreach (var t in tradeonlyList)
            {
                foreach (var e in reg)
                {
                    if (e.TimeStamp == t.TimeStamp)
                    {
                        t.Extention.Regression = e.Regression;
                        t.Extention.Slope = e.Slope;
                        t.Extention.OrderVol = 1;
                    }

                }

            }





            return tradeonlyList.ToList();

        }
        public static void StandardDevOnPL(List<Trade> Trades)
        {
            var viList = new List<VariableIndicator>();
            var list = Trades.Where(z => z.Reason == Trade.Trigger.CloseLong || z.Reason == Trade.Trigger.CloseShort);
            foreach (var l in list)
            {
                var VI = new VariableIndicator()
                {
                    Value = l.TotalPL,
                    TimeStamp = l.TimeStamp,

                };
                viList.Add(VI);
            }

            var SDTDEV = Factory_Indicator.creatStandardDeviation(1, 10, viList);
            foreach (var v in SDTDEV)
                Debug.WriteLine(v.N + "," + v.SingleStdev + "," + v.CustomValue + "," + v.StdDev);
        }