public static List <CompletedTrade> TakeProfit_Exiguous_GoldenBoil(List <Trade> FullTradeList, int N, double stdev, int triggercount) { var TakeProfitList = new List <CompletedTrade>(); var TO = Trade.TradesOnly(FullTradeList); var CompletedList = CompletedTrade.CreateList(TO); var GoldenBoil = Factory_Indicator.createBollingerBand(N, stdev, GlobalObjects.Points, TicTacTec.TA.Library.Core.MAType.Sma); foreach (var t in CompletedList) { var timeframe = from x in FullTradeList where x.TimeStamp >= t.OpenTrade.TimeStamp && x.TimeStamp <= t.CloseTrade.TimeStamp select x; var trade = new CompletedTrade(); trade.OpenTrade = t.OpenTrade; int boilTriggerCount = 0; foreach (var ts in timeframe) { if (t.OpenTrade.Reason == Trade.Trigger.OpenShort) { if (ts.CurrentPrice < GoldenBoil.Where(z => z.TimeStamp == ts.TimeStamp).First().Lower) { boilTriggerCount++; } } if (t.OpenTrade.Reason == Trade.Trigger.OpenLong) { if (ts.CurrentPrice > GoldenBoil.Where(z => z.TimeStamp == ts.TimeStamp).First().Upper) { boilTriggerCount++; } } if (boilTriggerCount == triggercount) { trade.CloseTrade = ts; break; } trade.CloseTrade = ts; } if (trade.OpenTrade.Reason == Trade.Trigger.OpenLong) { trade.CloseTrade.Reason = Trade.Trigger.CloseLong; } if (trade.OpenTrade.Reason == Trade.Trigger.OpenShort) { trade.CloseTrade.Reason = Trade.Trigger.CloseShort; } TakeProfitList.Add(trade); } return(TakeProfitList); }
private void SetMAMA() { //cannot use linq, too slow //0.01,0.01; mama = Factory_Indicator.createAdaptiveMA_MAMA(_f, _m, VarList); var FTL = _FullTradeList.Where(z => z.StopLoss_CenterLine != 0).ToList(); var Ftl_Count = FTL.Count; var mam_Count = mama.Count; //find first mama.time=TRL.time var Ftl_Time_Equal_Mama_Time = FTL.Where(f => f.TimeStamp == mama[0].TimeStamp).First().TimeStamp; int ftl_Start_Index = 0; foreach (var Ft in FTL) { if (Ft.TimeStamp == Ftl_Time_Equal_Mama_Time) { break; } ftl_Start_Index++; } for (int x = 0; x < Ftl_Count - ftl_Start_Index; x++) { FTL[ftl_Start_Index + x].Mama = mama[x]; } }
public static List <CompletedTrade> TakeProfit_Exiguous_AvgProfitPeriod(List <Price> EndOfDay, List <Trade> FullTradeList, int I, int ATR_Range, double ATR_Factor) { var TakeProfitList = new List <CompletedTrade>(); var TO = Trade.TradesOnly(FullTradeList); var CompletedList = CompletedTrade.CreateList(TO); var ATR = Factory_Indicator.createATR(ATR_Range, EndOfDay); double pl = 0; double count = 0; double index = 0; double tempPL = 0; double TotalImprovement = 0; List <TestData> TD = new List <TestData>(); foreach (var t in CompletedList) { var timeframe = from x in FullTradeList where x.TimeStamp >= t.OpenTrade.TimeStamp && x.TimeStamp <= t.CloseTrade.TimeStamp select x; var TList = timeframe.ToList(); double A = 0; double B = 0; for (int x = 0; x < TList.Count; x++) { if (x > I && TList.First().TradeVolume != 2) { var adxYesterday = ATR.Where(z => z.TimeStamp.Date.AddDays(-1) == TList[x].TimeStamp.Date); if (adxYesterday.ToList().Count() == 0) { break; } var Z = Math.Round((adxYesterday.First().AvgTrueRange *ATR_Factor), 2); if (TList[x].RunningProfit < Z) { break; } A = TList[x].RunningProfit; B = TList.Last().RunningProfit; tempPL += TList[x].RunningProfit; Debug.WriteLine(x + " " + TList[x].TimeStamp + " vol : " + TList.First().TradeVolume + " ADRxFact " + Z + " " + A + " VS " + B + " Diff : " + ((A - B) * TList.First().TradeVolume) + " Running " + TotalImprovement); TotalImprovement += ((A - B)); //*TList.First().TradeVolume); } } } Debug.WriteLine("TOTAL IMPROVE I(" + I + ")" + " ATR_Range(" + ATR_Range + ") ATR_Factor(" + ATR_Factor + ") ====>> " + TotalImprovement); return(CompletedList); }
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()); }
public static List <CompletedTrade> TakeProfit_Exiguous_SlowStoch_D(List <Trade> FullTradeList, int FK, int SK, int D, double H, double L) { var TakeProfitList = new List <CompletedTrade>(); var TO = Trade.TradesOnly(FullTradeList); var CompletedList = CompletedTrade.CreateList(TO); var SlowStoch = Factory_Indicator.createSlowStochastic(FK, SK, D, GlobalObjects.Points); foreach (var t in CompletedList) { var timeframe = from x in FullTradeList where x.TimeStamp >= t.OpenTrade.TimeStamp && x.TimeStamp <= t.CloseTrade.TimeStamp select x; var period = from x in SlowStoch where x.TimeStamp >= t.OpenTrade.TimeStamp && x.TimeStamp <= t.CloseTrade.TimeStamp select x; // foreach (var v in period) Debug.WriteLine(v.TimeStamp + " " + v.D); var trade = new CompletedTrade(); trade.OpenTrade = t.OpenTrade; bool TookProfitLong = false; bool TookProfitShort = false; DateTime lowJumpUp = t.CloseTrade.TimeStamp; DateTime highDipDown = t.CloseTrade.TimeStamp; if (t.OpenTrade.Reason == Trade.Trigger.OpenLong) { bool touchedHigh = period.Where(z => z.D > H).Any(); DateTime highTime; bool dipped; if (touchedHigh) { highTime = period.Where(z => z.D > H).Select(a => a).First().TimeStamp; var x = period.Where(z => z.TimeStamp > highTime && z.D < H); dipped = x.Any(); if (dipped) { highDipDown = x.First().TimeStamp; TookProfitLong = true; } else { TookProfitLong = false; } } } if (t.OpenTrade.Reason == Trade.Trigger.OpenShort) { // foreach (var v in period) Debug.WriteLine(v.TimeStamp + " " + v.D); var touchedLow = period.Where(z => z.D < L).Any(); DateTime lowTime; bool jumped; if (touchedLow) { lowTime = (period.Where(z => z.D < L)).Select(a => a).First().TimeStamp; var x = period.Where(z => z.TimeStamp > lowTime && z.D > L); jumped = x.Any(); if (jumped) { lowJumpUp = x.First().TimeStamp; TookProfitShort = true; } else { TookProfitShort = false; } } } if (TookProfitLong) { trade.CloseTrade.TimeStamp = highDipDown; trade.CloseTrade.RunningProfit = timeframe.Where(z => z.TimeStamp == highDipDown).First().RunningProfit; } else if (TookProfitShort) { trade.CloseTrade.TimeStamp = lowJumpUp; trade.CloseTrade.RunningProfit = timeframe.Where(z => z.TimeStamp == lowJumpUp).First().RunningProfit; } else { trade.CloseTrade = t.CloseTrade; } //if (t.OpenTrade.Reason == Trade.Trigger.OpenShort) // if (ts.CurrentPrice < GoldenBoil.Where(z => z.TimeStamp == ts.TimeStamp).First().Lower) boilTriggerCount++; //if (t.OpenTrade.Reason == Trade.Trigger.OpenLong) // if (ts.CurrentPrice > GoldenBoil.Where(z => z.TimeStamp == ts.TimeStamp).First().Upper) boilTriggerCount++; //if (boilTriggerCount == triggercount) //{ // trade.CloseTrade = ts; // break; //} //trade.CloseTrade = ts; if (trade.OpenTrade.Reason == Trade.Trigger.OpenLong) { trade.CloseTrade.Reason = Trade.Trigger.CloseLong; } if (trade.OpenTrade.Reason == Trade.Trigger.OpenShort) { trade.CloseTrade.Reason = Trade.Trigger.CloseShort; } TakeProfitList.Add(trade); } return(TakeProfitList); }
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 }