Exemple #1
0
        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);
        }
Exemple #2
0
        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];
            }
        }
Exemple #3
0
        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);
        }
Exemple #4
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);
            }
        }
Exemple #5
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());
        }
Exemple #6
0
        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);
        }
Exemple #7
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
        }