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); } }
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); } }
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()); }
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); }