예제 #1
0
        public void TestGetInstrument(string instrumentName)
        {
            var instrument = new Instrument(instrumentName, InstrumentType.Bond);

            _repository.AddInstrument(instrument);

            Assert.AreEqual(instrument, _repository.GetInstrument(instrumentName));
        }
예제 #2
0
        public async Task <IActionResult> GetInstrument(int id)
        {
            var items = await _repository.GetInstrument(id);

            var itemsDto = _mapper.Map <DtoOutputInstrumentForSingleSelect>(items);

            return(Ok(itemsDto));
        }
        public async Task <IActionResult> GetInstrument(int id)
        {
            var item = await _repo.GetInstrument(id);

            if (item == null)
            {
                return(NotFound());
            }
            var itemDto = _mapper.Map <DtoInstrument>(item);

            return(Ok(itemDto));
        }
예제 #4
0
        public static async void Bash()
        {
            var stringArray = string.Empty;
            var symbol      = "DE30";
            var interval    = "M1";

            var instrument = await _instrumentRepository.GetInstrument(symbol);

            var chart = await _chartRepository.GetChartAsync(symbol, interval, 200, instrument.Precision);

            var quotations = chart.Quotations.Skip(chart.Quotations.Count - 120).ToList();;

            foreach (var item in quotations)
            {
                stringArray += $"{item.Close}/{item.Open}/{item.Low}/{item.High}/{item.Volume}/{item.Time} ";
            }

            var process = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName = "cmd.exe",
                    RedirectStandardInput  = true,
                    UseShellExecute        = false,
                    RedirectStandardOutput = true,
                }
            };

            process.Start();
            // Pass multiple commands to cmd.exe
            using (var sw = process.StandardInput)
            {
                if (sw.BaseStream.CanWrite)
                {
                    // Vital to activate Anaconda
                    sw.WriteLine(@"C:\Users\pawel\Anaconda3\Scripts\activate.bat");
                    // Activate your environment
                    sw.WriteLine("activate test4");
                    // run your script. You can also pass in arguments
                    sw.WriteLine($@"redictNextMove.py {stringArray}");
                }
            }

            while (!process.StandardOutput.EndOfStream)
            {
                var line = process.StandardOutput.ReadLine();
                Console.WriteLine(line);
                if (line.Contains("BUY"))
                {
                    await _accountRepository.MakeTransactionBuyAsync(30, 8, (double)1, instrument, "M1");
                }
                else if (line.Contains("SELL"))
                {
                    await _accountRepository.MakeTransactionSellAsync(30, 8, (double)1, instrument, "M1");
                }
            }
            Console.ReadKey();
        }
예제 #5
0
        public async Task <ChartView> EmaView(string symbol, string interval, int candles, DateTime dateFrom, int ema)
        {
            var listModel = new List <ChartWithEma>();

            var instrument = await _instrumentRepository.GetInstrument(symbol);

            var chart = await _chartRepository.GetChartRangeTimeAsync(symbol, interval, dateFrom, candles, instrument.Precision);

            var timeArray  = chart.Quotations.Select(x => x.Time.ConvertDateTimeToTicks()).ToArray();
            var openArray  = chart.Quotations.Select(x => x.Open).ToArray();
            var highArray  = chart.Quotations.Select(x => x.High).ToArray();
            var lowArray   = chart.Quotations.Select(x => x.Low).ToArray();
            var closeArray = chart.Quotations.Select(x => x.Close).ToArray();

            var emasH = Indicators.EMA(closeArray, ema);

            listModel.AddRange(chart.Quotations.Select(
                                   x => new ChartWithEma
            {
                Time  = x.Time.ConvertDateTimeToTicks(),
                Open  = x.Open,
                High  = x.High,
                Low   = x.Low,
                Close = x.Close,
            }));

            var buyTrades  = listModel.Where(x => x.TypeAction == "B").ToList();
            var sellTrades = listModel.Where(x => x.TypeAction == "S").ToList();
            var c          = CombineArrays(timeArray, openArray, highArray, lowArray, closeArray);

            var series = new List <dynamic>()
            {
                CombineArrays(timeArray, openArray, highArray, lowArray, closeArray),
                CombineArrays(timeArray.Skip(ema).ToArray(), emasH.Skip(ema).ToArray()),
            };
            var chartView = new ChartView {
                Series = series
            };

            return(chartView);
        }
예제 #6
0
        public async Task <InsideBarView> GetInsideBar(string symbol)
        {
            var instrument = await _instrumentRepository.GetInstrument(symbol);

            var chart = await _chartRepository.GetChartAsync(symbol, "D1", 10, instrument.Precision);

            chart.SetInsideBar(DateTime.Now.AddDays(-1));
            if (chart.InsideBar != null)
            {
                return(new InsideBarView
                {
                    HighInsideBar = chart.InsideBar.HighInsideBar,
                    LowInsideBar = chart.InsideBar.LowInsideBar,
                    HighMotherInsideBar = chart.InsideBar.HighMotherInsideBar,
                    LowMotherInsideBar = chart.InsideBar.LowMotherInsideBar,
                    Symbol = chart.Symbol,
                    Side = chart.InsideBar.Side
                });
            }
            return(new InsideBarView());
        }
예제 #7
0
        public async Task GenerateClosePriceWithVolume(string symbol, string interval)
        {
            var instrument = await _instrumentRepository.GetInstrument(symbol);

            var chart = await _chartRepository.GetChartMonthlyAsync(symbol, interval, 6, instrument.Precision);

            var maxhour = chart.Quotations.Max(x => x.Time.Hour);
            var minhour = chart.Quotations.Min(x => x.Time.Hour);

            var maxMinute = chart.Quotations.Max(x => x.Time.Minute);
            var minMinute = chart.Quotations.Min(x => x.Time.Minute);

            var maxDay = chart.Quotations.Max(x => (int)x.Time.DayOfWeek);
            var minDay = chart.Quotations.Min(x => (int)x.Time.DayOfWeek);

            using (var textWriter = new StreamWriter(@"cloePriceOhlc.csv"))
            {
                var writer = new CsvWriter(textWriter, CultureInfo.CurrentCulture);
                writer.Configuration.Delimiter = ",";
                writer.WriteField("Hour");
                writer.WriteField("Minute");
                writer.WriteField("Day");
                writer.WriteField("Close");
                writer.WriteField("Open");
                writer.WriteField("Low");
                writer.WriteField("High");
                writer.WriteField("Volume");
                writer.WriteField("Time");
                writer.NextRecord();

                foreach (var item in chart.Quotations)
                {
                    var hourNormalization   = (item.Time.Hour - minhour) / (maxhour - minhour);
                    var minuteNormalization = (item.Time.Minute - minMinute) / (maxMinute - minMinute);
                    var dayNormalization    = ((int)item.Time.DayOfWeek - minDay) / (maxDay - minDay);

                    writer.WriteField(hourNormalization);
                    writer.WriteField(minuteNormalization);
                    writer.WriteField(dayNormalization);
                    writer.WriteField(item.Close.ToString().Replace(",", "."));
                    writer.WriteField(item.Open.ToString().Replace(",", "."));
                    writer.WriteField(item.Low.ToString().Replace(",", "."));
                    writer.WriteField(item.High.ToString().Replace(",", "."));
                    writer.WriteField(item.Volume);
                    writer.WriteField(item.Time);
                    writer.NextRecord();
                }
            }
            using (var textWriter = new StreamWriter(@"resultsOhlc.csv"))
            {
                var writer = new CsvWriter(textWriter, CultureInfo.CurrentCulture);
                writer.Configuration.Delimiter = ",";
                writer.WriteField("Buy");
                writer.WriteField("Sell");
                writer.WriteField("None");
                writer.WriteField("Time");
                writer.NextRecord();

                for (var i = 120; i < chart.Quotations.Count - 15; i++)
                {
                    var futurePrices = chart.Quotations.GetRange(i, 15).Select(x => new { x.Close, x.Low, x.High }).ToArray();
                    var futureFirst  = futurePrices.First();
                    var futureMin    = futurePrices.Min(x => x.Low);
                    var futureMax    = futurePrices.Max(x => x.High);


                    //bad signal high pin
                    var badSignal = false;
                    foreach (var item in futurePrices)
                    {
                        if (item.High - item.Low > 40)
                        {
                            badSignal = true;
                        }
                    }
                    for (int j = 0; j <= futurePrices.Count() - 2; j++)
                    {
                        if (Math.Abs(futurePrices[j].Close - futurePrices[j + 1].Close) > 40)
                        {
                            badSignal = true;
                        }
                    }


                    var time = chart.Quotations[i].Time;

                    if (badSignal)
                    {
                        writer.WriteField(false);
                        writer.WriteField(false);
                        writer.WriteField(true);
                        writer.WriteField(time);
                        writer.NextRecord();
                        continue;
                    }

                    if (futureMax - futureFirst.High > 20 && futureFirst.Low - futureMin < 10)
                    {
                        writer.WriteField(true);
                        writer.WriteField(false);
                        writer.WriteField(false);
                        writer.WriteField(time);
                        writer.NextRecord();
                    }
                    else if (futureFirst.Low - futureMin > 20 && futureMax - futureFirst.High < 10)
                    {
                        writer.WriteField(false);
                        writer.WriteField(true);
                        writer.WriteField(false);
                        writer.WriteField(time);
                        writer.NextRecord();
                    }
                    else
                    {
                        writer.WriteField(false);
                        writer.WriteField(false);
                        writer.WriteField(true);
                        writer.WriteField(time);
                        writer.NextRecord();
                    }
                }
            }
        }
예제 #8
0
        public async Task <Chart> GetChart(string symbol, string interval, int candles)
        {
            var instrument = await _instrumentRepository.GetInstrument(symbol);

            return(await _chartRepository.GetChartAsync(symbol, interval, candles, instrument.Precision));
        }