Example #1
0
        public MultyExtremumStrategy(int stopLoss, int pegTopSize, int minExtremumStep)
        {
            this.minExtremumStep = minExtremumStep;

            extremumsFinder = new ExtremumsFinder(pegTopSize);
            stopLossManager = new StopLossManager(stopLoss, 0.15);
        }
Example #2
0
        public static void TestFirstExtremumsOrder(string toolName, int pegTopSize, bool isMinimums)
        {
            var repository = new HistoryRepository(toolName, false);

            var extremumFinder = new ExtremumsFinder(pegTopSize);

            foreach (var day in repository.Days)
            {
                var extremums = extremumFinder.FindFirstExtremums(day.FiveMins, isMinimums);

                bool bad = false;
                for (int i = 0; i < extremums.Count; ++i)                       //TODO Люой экстремум
                {
                    for (int j = i + 1; j < extremums.Count; ++j)
                    {
                        if (extremums[j].Date >= extremums[i].Date && extremums[j].CheckerIndex < extremums[i].CheckerIndex)
                        {
                            Console.Out.WriteLine(extremums[i] + "\t" + extremums[j]);
                            bad = true;
                        }
                    }
                }

                Assert.That(!bad);
            }
        }
Example #3
0
        public static void TestSecondExtremumsAlternation(string toolName, int pegTopSize)
        {
            //TODO ошибка в том, что реализм требует сортировки firstExtremums по checkerIndex, а текущий метод поиска secondExtremums - сортировки по Date. В общем случае, обоюдная сортировка невозможна
            var repository     = new HistoryRepository(toolName, false);
            var extremumFinder = new ExtremumsFinder(pegTopSize);

            bool bad = false;

            foreach (var day in repository.Days)
            {
                var firstMaximums = extremumFinder.FindFirstExtremums(day.FiveMins, false);
                var maximums      = extremumFinder.FindSecondExtremums(firstMaximums, false);

                var firstMinimums = extremumFinder.FindFirstExtremums(day.FiveMins, true);
                var minimums      = extremumFinder.FindSecondExtremums(firstMinimums, true);

                var allExtremums = maximums
                                   .Concat(minimums)
                                   .OrderBy(ex => ex.CheckerIndex)
                                   .ToList();

                for (int i = 0; i < allExtremums.Count - 1; ++i)
                {
                    if (allExtremums[i].Date >= allExtremums[i + 1].Date && allExtremums[i].IsMinimum == allExtremums[i + 1].IsMinimum)
                    {
                        bad = true;
                        Console.Out.WriteLine(allExtremums[i] + "\t" + allExtremums[i + 1]);
                    }
                }
            }
            Assert.That(!bad);
        }
Example #4
0
        public static void Run(string toolName, List <Day> days)
        {
            var outPath = toolName + @"\";

            Directory.CreateDirectory(outPath + candlesPath);
            Directory.CreateDirectory(outPath + firstMaxPath);
            Directory.CreateDirectory(outPath + firstMinPath);
            Directory.CreateDirectory(outPath + secondMaxPath);
            Directory.CreateDirectory(outPath + secondMinPath);

            var extremumsFindex = new ExtremumsFinder(pegTopSize);

            for (int i = 0; i < days.Count; ++i)
            {
                var day           = days[i];
                var candles       = day.FiveMins;
                var firstMaximums = extremumsFindex.FindFirstExtremums(candles, false);
                var firstMinimums = extremumsFindex.FindFirstExtremums(candles, true);

                var secondMaximums = extremumsFindex.FindSecondExtremums(firstMaximums, false);
                var secondMinimums = extremumsFindex.FindSecondExtremums(firstMinimums, true);

                File.WriteAllLines(outPath + candlesPath + i + ".txt", candles.ConvertAll(c => c.High + "\t" + c.Low + "\t" + c.Close + "\t" + c.Open));

                File.WriteAllLines(outPath + firstMaxPath + i + ".txt", firstMaximums.Select(ex => (candles.FindIndex(c => c.Time == ex.Date.TimeOfDay) + 1).ToString()));
                File.WriteAllLines(outPath + firstMinPath + i + ".txt", firstMinimums.Select(ex => (candles.FindIndex(c => c.Time == ex.Date.TimeOfDay) + 1).ToString()));

                File.WriteAllLines(outPath + secondMaxPath + i + ".txt", secondMaximums.Select(ex => (candles.FindIndex(c => c.Time == ex.Date.TimeOfDay) + 1).ToString()));
                File.WriteAllLines(outPath + secondMinPath + i + ".txt", secondMinimums.Select(ex => (candles.FindIndex(c => c.Time == ex.Date.TimeOfDay) + 1).ToString()));
            }
        }
        public ExtremumStrategy(int baseStopLoss, int pegTopSize, double breakevenPercent, TimeSpan?lastTradeTime = null)
        {
            this.baseStopLoss     = baseStopLoss;
            this.breakevenPercent = breakevenPercent;
            this.lastTradeTime    = lastTradeTime ?? new TimeSpan(23, 59, 59);

            extremumsFinder = new ExtremumsFinder(pegTopSize);
        }
        public MonotoneExtremumsStrategy(int monotoneCount, int baseStopLoss, int invertCount, double breakevenPercent,
                                         TimeSpan?lastTradeTime = null, double breakevenInitializerPercent = 1)
        {
            this.monotoneCount = monotoneCount;
            this.invertCount   = invertCount;
            this.lastTradeTime = lastTradeTime ?? new TimeSpan(23, 59, 59);

            finder          = new ExtremumsFinder(0);
            stopLossManager = new StopLossManager(baseStopLoss, breakevenPercent, breakevenInitializerPercent);
        }
Example #7
0
        public static void TestFirstExtremumsSortByChecker(string toolName, int pegTopSize, bool isMinimums)
        {
            var repository     = new HistoryRepository(toolName, false);
            var extremumFinder = new ExtremumsFinder(pegTopSize);

            bool bad = false;

            foreach (var day in repository.Days)
            {
                var extremums = extremumFinder.FindFirstExtremums(day.FiveMins, isMinimums);

                for (int i = 1; i < extremums.Count; ++i)
                {
                    if (extremums[i - 1].CheckerIndex > extremums[i].CheckerIndex)
                    {
                        Console.Out.WriteLine(extremums[i - 1] + "\t" + extremums[i]);
                        bad = true;
                    }
                }

                Assert.That(!bad);
            }
        }
Example #8
0
        public static void TestSecondExtremumsOrder(string toolName, int pegTopSize)
        {
            var repository = new HistoryRepository(toolName, false);

            var extremumFinder = new ExtremumsFinder(pegTopSize);

            foreach (var day in repository.Days)
            {
                var extremums = extremumFinder.FindAllSecondExtremums(day.FiveMins);

                bool bad = false;
                for (int i = 1; i < extremums.Count; ++i)
                {
                    if (/*extremums[i].IsMinimum == extremums[i-1].IsMinimum && */ extremums[i].Date >= extremums[i - 1].Date && extremums[i].CheckerIndex < extremums[i - 1].CheckerIndex)
                    {
                        Console.Out.WriteLine(extremums[i] + "\t" + extremums[i - 1]);
                        bad = true;
                    }
                }

                Assert.That(!bad);
            }
        }
Example #9
0
 public CorrectedExtremumStrategy(int baseStopLoss, int pegTopSize, double breakevenPercent, int trailingStopSize, int maxDistFromOpen = int.MaxValue)
 {
     extremumsFinder      = new ExtremumsFinder(pegTopSize);
     stopLossManager      = new StopLossManager(baseStopLoss, trailingStopSize, breakevenPercent);
     this.maxDistFromOpen = maxDistFromOpen;
 }