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