示例#1
0
        /// <summary>
        /// Расчет Болинжера по _countPeriod и _kstd
        /// </summary>
        private async Task CreateRepositoryBolinger(MarketTradesRepository _mtr, int _countPeriod, double _kstd, string _fileNameInp)
        {
            double High_line = 0;
            double Midl_line = 0;
            double Low_line  = 0;

            double                   price;
            List <double>            priceList    = new List <double>();
            TradesBolingerRepository _trdBReposit = new TradesBolingerRepository();

            await Task.Run(() =>
            {
                foreach (ParametrMarketTrades item in _mtr)
                {
                    price = (double)item.PriceTrades;

                    priceList.Add(price);

                    if (priceList.Count == _countPeriod)
                    {
                        StaticCalculations.BollingerBands(priceList, _kstd, ref High_line, ref Midl_line, ref Low_line);
                        priceList.RemoveAt(0);
                        _trdBReposit.Add(new ParametrTradesBolinger(item.DateTimeTrades, item.NumberTrades, item.PriceTrades, item.SeccodeTrades, High_line, Low_line, Midl_line));
                    }
                }
                string _fileName = _fileNameInp + StaticService.GenerateKey(_countPeriod, _kstd);
                StaticService.Serializes(_trdBReposit, folderOut + _fileName);
            });
        }
示例#2
0
        public void CreateExtrem(TradesBolingerRepository _tBR, decimal _otkat, decimal _profit)
        {
            position   = 0;
            num_trades = 0;

            foreach (var item in _tBR)
            {
                this.ExtremumSearch(item.PriceTrades, item.DateTimeTrades, item.LineUp, item.LineMidl, item.LineDown, _otkat, _profit);
            }
        }
示例#3
0
        /// <summary>
        /// Открываем лонги, если цена выше самой верхней линии.
        /// Открываем шорты, если цена ниже самой нижней линии.
        /// Закрытие: переворачиваемся.
        /// </summary>
        private Task TrendAlgoritmTest(string _path)
        {
            return(Task.Run(() =>
            {
                TradesBolingerRepository _trdBRepo = null;
                string file_name = "test_result.txt";
                try
                {
                    _trdBRepo = (TradesBolingerRepository)StaticService.Deserializes(_path);
                }
                catch (Exception)
                {
                    StaticService.LogFileWrite(_path, "error_log.txt", true);
                }

                string _key = Path.GetFileNameWithoutExtension(_path);
                string _dateRes = StaticService.GetComment(_key, SettingsClass.PaternDate1);
                string _settBB = StaticService.GetComment(_key, SettingsClass.Patern);

                TestTradesCollection testTradColl = new TestTradesCollection();
                TestTradesCollection testTradCollOPT = new TestTradesCollection();

                int tp = 0;
                double profitPortfolio = 0; // прибыль портфеля на каждую сделку
                int countTrades = 0;
                double maxProfit = 0;
                double minProfit = 0;
                int countProfitTrades = 0;
                int countLossTrades = 0;

                // OPT
                double profitPortfolioOpt = 0;
                int countTradesOpt = 0;
                double maxProfitOpt = 0;
                double minProfitOpt = 0;
                int countProfitTradesOpt = 0;
                int countLossTradesOpt = 0;
                // end opt

                StaticService.LogFileWrite("\n         ---------" + _key + "---------", file_name, true);

                if (_trdBRepo != null)
                {
                    foreach (ParametrTradesBolinger pcT in _trdBRepo)
                    {
                        //StaticClassService.LogFileWrite(pcT.DateTimeTrades + "\t" + pcT.NumberTrades + "\t" + pcT.PriceTrades + "\t" + pcT.SeccodeTrades + "\t" + pcT.LineUp + "\t" + pcT.LineDown + "\t" + pcT.LineMidl, file_name, true);

                        DateTime dateTimeTrade = pcT.DateTimeTrades;

                        if (dateTimeTrade.TimeOfDay < new TimeSpan(19, 0, 0))
                        {
                            double price = (double)pcT.PriceTrades;

                            //---Здесь вызываем Класс нужного алгоритма---
                            Algoritms.BollingerCrossing.Algoritm(pcT, testTradColl, testTradCollOPT, file_name, price, dateTimeTrade, ref tp, ref countTrades, ref countTradesOpt, ref profitPortfolio, ref profitPortfolioOpt, ref maxProfit, ref maxProfitOpt, ref minProfit, ref minProfitOpt, ref countProfitTrades, ref countProfitTradesOpt, ref countLossTrades, ref countLossTradesOpt);
                            //--------------------------------------------
                        }
                    }
                }

                // save result
                testResultRepo.Add(new ParametrTestResult(_key, _dateRes, _settBB, profitPortfolio, countTrades, maxProfit, minProfit, countProfitTrades, countLossTrades));
                testResultRepo.Add(new ParametrTestResult(_key + "OPT", _dateRes, _settBB, profitPortfolioOpt, countTradesOpt, maxProfitOpt, minProfitOpt, countProfitTradesOpt, countLossTradesOpt)); // Opt

                // serialize TestTradesCollection end TestTradesCollection'OPT'
                StaticService.Serializes(testTradColl, folderOutTestTradesSimple + _key);
                StaticService.Serializes(testTradCollOPT, folderOutTestTradesOPT + _key);
            }));
        }
示例#4
0
        //-------------------------------------------


        //
        private void CalculationExtremumProfit(MarketTradesRepository _mTR, TradesBolingerRepository _tBR, decimal _otkat, decimal _profit, string _fileSummary, string _fileTrades, string _filevariability, string _fileBrutto, string _fileBruttoFiltr, string _fileBruttoFiltrPro)
        {
            ExtremumProfit  extPrice  = new ExtremumProfit();
            Queue <decimal> BruttoQue = new Queue <decimal>();

            decimal exchange_fee         = 0.47m; // биржевой сбор SBRF 0.47
            decimal brokerage_commission = 0.59m; // комиссия брокера 0.59
            decimal spred = 3m;

            // --одновременно можно только один
            //extPrice.CreateExtrem(_mTR, _otkat, _profit);
            extPrice.CreateExtrem(_tBR, _otkat, _profit);
            //-------

            //----
            decimal _buyMany      = 0;
            decimal _selMany      = 0;
            decimal _bruttoGlobal = 0;
            int     _countProfit  = 0;
            int     _countLoss    = 0;
            int     _countAll     = 0;
            int     _variability  = 0;

            StaticService.LogFileWriteNotDateTime("Profit setting <" + _profit + ">", _fileTrades, true);
            StaticService.LogFileWriteNotDateTime("Profit setting <" + _profit + ">", _filevariability, true);
            StaticService.LogFileWriteNotDateTime("Profit setting <" + _profit + ">", _fileBrutto, true);
            StaticService.LogFileWriteNotDateTime("Profit setting <" + _profit + ">", _fileBruttoFiltr, true);
            StaticService.LogFileWriteNotDateTime("Profit setting <" + _profit + ">", _fileBruttoFiltrPro, true);

            foreach (var item in extPrice.TradesQueue)
            {
                StaticService.LogFileWriteNotDateTime(item.ToString(), _fileTrades, true);

                double    _num    = item.NumberTrades;
                Operation _oper   = item.Operation;
                decimal   _price  = item.PriceTrades;
                decimal   _brutto = 0;

                if (_oper == Operation.Buuy)
                {
                    _buyMany = _price;
                }
                else
                {
                    _selMany = _price;
                }

                if (_buyMany != 0 && _selMany != 0)
                {
                    _brutto        = _selMany - _buyMany;
                    _bruttoGlobal += _brutto;
                    _buyMany       = 0;
                    _selMany       = 0;

                    if (_brutto > 0)
                    {
                        _countProfit++;
                    }
                    else
                    {
                        _countLoss++;
                    }

                    _countAll++;

                    BruttoQue.Enqueue(_brutto);
                    StaticService.LogFileWriteNotDateTime(_brutto.ToString(), _fileBrutto, true);

                    //
                    VariablityCalc(_brutto, _filevariability, ref _variability);
                    //-----
                }
            }

            // фильтрация pro
            for (int i = 1; i <= 10; i++)
            {
                Queue <decimal> resultPositive = extPrice.FiltrBruttoPro(BruttoQue, i, 0);
                Queue <decimal> resultNegative = extPrice.FiltrBruttoPro(BruttoQue, 0, i);

                decimal _sum = 0;

                foreach (decimal item in resultPositive)
                {
                    _sum += item;
                }

                StaticService.LogFileWriteNotDateTime("FILTR_PRO + <" + i + "> = " + _sum.ToString(), _fileBruttoFiltrPro, true);

                _sum = 0;

                foreach (decimal item in resultNegative)
                {
                    _sum += item;
                }

                StaticService.LogFileWriteNotDateTime("FILTR_PRO - <" + i + "> = " + _sum.ToString(), _fileBruttoFiltrPro, true);
            }


            // циклическая фильтрация
            StaticService.LogFileWriteNotDateTime("SUMMARY_INP = " + _bruttoGlobal.ToString(), _fileBruttoFiltr, true);
            Queue <decimal> _filtr_result = extPrice.FiltrBrutto(BruttoQue);

            for (int i = 0; i < 5; i++)
            {
                decimal _sum = 0;

                foreach (decimal item in _filtr_result)
                {
                    _sum += item;
                }
                StaticService.LogFileWriteNotDateTime("SUMMARY_" + i + " = " + _sum.ToString(), _fileBruttoFiltr, true);

                _filtr_result = extPrice.FiltrBrutto(_filtr_result);
            }

            /*
             * // фильтруем brutto и выводим в файл
             * Queue<decimal> _filtrBrut_I = extPrice.FiltrBrutto(BruttoQue);
             * foreach (decimal item in _filtrBrut_I)
             * {
             *  StaticService.LogFileWriteNotDateTime(item.ToString(), _fileBruttoFiltr, true);
             * }
             *
             * // фильтруем _filtrBrut и выводим в файл
             * StaticService.LogFileWriteNotDateTime("--------LEVEL II", _fileBruttoFiltr, true);
             * Queue<decimal> _filtrBrut_II = extPrice.FiltrBrutto(_filtrBrut_I);
             * foreach (decimal item in _filtrBrut_II)
             * {
             *  StaticService.LogFileWriteNotDateTime(item.ToString(), _fileBruttoFiltr, true);
             * }
             *
             * // summary brutto_filtr
             * decimal _sum_brut_filtr = 0;
             * foreach (decimal item in _filtrBrut_I)
             * {
             *  _sum_brut_filtr += item;
             * }
             * StaticService.LogFileWriteNotDateTime("SUMMARY_I = " + _sum_brut_filtr.ToString(), _fileBruttoFiltr, true);
             *
             * _sum_brut_filtr = 0;
             * foreach (decimal item in _filtrBrut_II)
             * {
             *  _sum_brut_filtr += item;
             * }
             * StaticService.LogFileWriteNotDateTime("SUMMARY_II = " + _sum_brut_filtr.ToString(), _fileBruttoFiltr, true);
             * //---------------------------
             */
            //StaticService.LogFileWriteNotDateTime(_bruttoGlobal + " <" + _profit + ">", _filename, true);
            StaticService.LogFileWriteNotDateTime(_profit + "\t" + _bruttoGlobal + "\t" + _countProfit + "\t" + _countLoss + "\t" + _countAll, _fileSummary, true);
        }