Beispiel #1
0
        /// <summary>
        /// Returns candlestick chart data filtered by url parameters.
        /// </summary>
        /// <param name="pair"></param>
        /// <param name="startTime">Start of time range for data in epoch seconds</param>
        /// <param name="endTime">End of time range for data in epoch seconds</param>
        /// <param name="interval">Candlestick period in minutes Possible values are: 1, 5, 30, 60, 360, 1440</param>
        /// <returns></returns>
        public async Task <List <CandleStick> > GetCandleSticksAsync(string pair, int startTime, int endTime, int interval)
        {
            if (string.IsNullOrEmpty(pair))
            {
                throw new ArgumentNullException(nameof(pair));
            }
            if (startTime <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(startTime));
            }
            if (endTime <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(endTime));
            }
            if (interval <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(interval));
            }

            var query = HttpUtility.ParseQueryString(string.Empty);

            query["pair"]       = pair;
            query["interval"]   = interval.ToString();
            query["start_time"] = startTime.ToString();
            query["end_time"]   = endTime.ToString();
            string queryString = query.ToString().Insert(0, "?");
            var    result      = await ExecuteCall(Utils.ComposeUrl(getCandleSticks, queryString));

            return(CandleStick.FromJson(result));
        }
        public async Task <IEnumerable <CandleStick> > GetCandlesAtOrAfter(GetAfterCandleStickQuery query, CancellationToken cancellationToken)
        {
            var command = CreateCommand();

            command.CommandText = $"SELECT * FROM CandleSticks WHERE Date >= @Date";

            command.Parameters.Add(new SqlParameter("@Date", query.Date));

            var queryResult = new List <CandleStick>();

            using (var reader = await ExecuteReaderAsync(command, cancellationToken)){
                while (reader.Read())
                {
                    var candleStick = CandleStick.Create(
                        reader.GetInt32(1),
                        reader.GetInt64(2),
                        reader.GetInt64(3),
                        reader.GetInt64(4),
                        reader.GetInt64(5),
                        reader.GetDateTime(6)
                        );
                    candleStick.Id = reader.GetInt16(0);

                    queryResult.Add(candleStick);
                }
            }

            return(queryResult);
        }
        public override bool StartCSV(string aCsvString)
        {
            string[] nRows = aCsvString.Replace("\r", "").Split('\n');
            for (int i = nRows.Length - 1; i > 0; i--)
            {
                if (String.IsNullOrEmpty(nRows[i]))
                {
                    continue;
                }

                Regex    CSVParser  = new Regex(",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");
                string[] nDataArray = CSVParser.Split(nRows[i]);

                CandleStick nData = new CandleStick();
                nData.Date     = DateTime.Parse(nDataArray[0]);
                nData.Open     = double.Parse(nDataArray[1]);
                nData.High     = double.Parse(nDataArray[2]);
                nData.Low      = double.Parse(nDataArray[3]);
                nData.Close    = double.Parse(nDataArray[4]);
                nData.Volume   = long.Parse(nDataArray[5]);
                nData.AdjClose = double.Parse(nDataArray[6]);

                if (this.mStockData.StartDate == default(DateTime) || this.mStockData.StartDate.Date.CompareTo(nData.Date.Date) > 0)
                {
                    this.mStockData.StartDate = nData.Date;
                }

                if (this.mStockData.LastDate == default(DateTime) || this.mStockData.LastDate.Date.CompareTo(nData.Date.Date) < 0)
                {
                    this.mStockData.DataPoints.Add(nData);
                    this.mStockData.LastDate = nData.Date;
                }
            }
            return(true);
        }
        public async Task <CandleStick> GetById(int entityId, CancellationToken cancellationToken)
        {
            var command = CreateCommand();

            command.CommandText = $"SELECT * FROM CandleSticks WHERE Id = @Id";

            command.Parameters.Add(new SqlParameter("@Id", entityId));

            CandleStick entity;

            using (var reader = await ExecuteReaderAsync(command, cancellationToken)){
                if (!reader.Read())
                {
                    return(default(CandleStick));
                }

                var candleStick = CandleStick.Create(
                    reader.GetInt32(1),
                    reader.GetInt64(2),
                    reader.GetInt64(3),
                    reader.GetInt64(4),
                    reader.GetInt64(5),
                    reader.GetDateTime(6)
                    );
                candleStick.Id = reader.GetInt16(0);

                entity = candleStick;
            }

            return(entity);
        }
        public async Task <IEnumerable <CandleStick> > GetAll(CancellationToken cancellationToken)
        {
            var command = CreateCommand();

            command.CommandText = $"SELECT * FROM CandleSticks";

            var queryResult = new List <CandleStick>();

            using (var reader = await ExecuteReaderAsync(command, cancellationToken)){
                while (reader.Read())
                {
                    var candleStick = CandleStick.Create(
                        reader.GetInt32(1),
                        reader.GetInt64(2),
                        reader.GetInt64(3),
                        reader.GetInt64(4),
                        reader.GetInt64(5),
                        reader.GetDateTime(6)
                        );
                    candleStick.Id = reader.GetInt16(0);

                    queryResult.Add(candleStick);
                }
            }

            return(queryResult);
        }
Beispiel #6
0
        public ChartingForm(StockData aStock)
        {
            this.Stock    = aStock;
            this.SPList   = new StockPointList();
            this.MACDList = new List <MacdPoint>();

            for (int i = 0; i < this.Stock.DataPoints.Count; i++)
            {
                CandleStick nCandleStick = this.Stock.DataPoints[i];
                XDate       xDate        = new XDate(nCandleStick.Date);
                StockPt     nPoint       = new StockPt(xDate.XLDate, nCandleStick.High, nCandleStick.Low, nCandleStick.Open, nCandleStick.Close, nCandleStick.Volume);
                this.SPList.Add(nPoint);
            }

            InitializeComponent();

            this.ZedGraphControl.MasterPane = new MasterPane();
            this.mCandleStickPane           = new GraphPane();
            this.mMacdPane       = new GraphPane();
            this.mStochasticPane = new GraphPane();

            InitializeZedGraph();
            DrawSmaGraph(this.mCandleStickPane, 20, Color.Red);
            DrawSmaGraph(this.mCandleStickPane, 50, Color.Blue);
            DrawCandleStickGraph(this.mCandleStickPane);
            DrawMacdGraph(this.mMacdPane, 12, 26, 9, Color.Blue, Color.Red);
            DrawStochPane(this.mStochasticPane, 14, 3, 3, Color.Blue, Color.Red);

            this.ZedGraphControl.AxisChange();
            this.ZedGraphControl.Dock = DockStyle.Fill;
            this.ZedGraphControl.Refresh();
        }
        private async Task <string> OutputFileContentAsJSONString(string ticker)
        {
            string contentRootPath = _env.ContentRootPath;
            var    csvDataFromDisk = System.IO.File.ReadLines(contentRootPath + $"/MarketData/Daily/{ticker}.csv");
            var    i = 0;

            List <CandleStick> candleSticks = new List <CandleStick>();

            foreach (var each in csvDataFromDisk)
            {
                if (i == 0)
                {
                    i++;
                    continue;
                }

                try
                {
                    var candleStickObj = CandleStick.FromCsv(each.ToString());

                    if (candleStickObj != null)
                    {
                        candleSticks.Add(candleStickObj);
                    }
                }
                catch (Exception ex)
                {
                }

                i++;
            }

            return(JsonConvert.SerializeObject(candleSticks.OrderBy(x => x.DateTime)));
        }
Beispiel #8
0
        /// <summary>
        /// Primary constructor
        /// </summary>
        public CandlePriceSaver(string u, string p)
        {
            m_username = u;
            m_password = p;

            instrumentList = ContractUtilities.ContractMetaInfo.cmeFuturesTickerheadList.Union(ContractUtilities.ContractMetaInfo.iceFuturesTickerheadList).ToArray();

            liquidContractList = new ContractUtilities.ContractList(instrumentList);

            DateTime referanceDate = DateTime.Today;

            int minInterval = 10;   //30

            startTime = new DateTime(referanceDate.Year, referanceDate.Month, referanceDate.Day, 1, 0, 0);
            endTime   = new DateTime(referanceDate.Year, referanceDate.Month, referanceDate.Day, 9, 0, 0);  //900

            candleObj = new DataAnalysis.CandleStick(startTime, endTime, liquidContractList.dbTickerList.ToArray(), minInterval);

            OutputFolder = TA.DirectoryNames.GetDirectoryName(ext: "overnightCandlestick") +
                           TA.DirectoryNames.GetDirectoryExtension(DateTime.Now.Date);
            System.IO.Directory.CreateDirectory(OutputFolder);

            ttapiSubs = new ttapiUtils.Subscription(m_username, m_password);
            ttapiSubs.dbTickerList  = liquidContractList.dbTickerList;
            ttapiSubs.ilsUpdateList = new List <EventHandler <InstrumentLookupSubscriptionEventArgs> > {
                ttapiSubs.startPriceSubscriptions
            };
            ttapiSubs.asu_update = ttapiSubs.startInstrumentLookupSubscriptions;
            ttapiSubs.priceUpdatedEventHandler = m_ps_FieldsUpdated;
        }
        public List <CandleStick> GetHistory(string symbol, DateTime startTime, DateTime endTime, Frequency frequency)
        {
            //Create the target URL
            string targetUrl = _BaseApiUrl + $"/{symbol}/pricehistory";

            //Convert the start and end times to UTC
            startTime = startTime.ToUniversalTime();
            endTime   = endTime.ToUniversalTime();

            //Convert the start and endtimes to unix epoch milliseconds
            long startDateMilliseconds = ((DateTimeOffset)startTime).ToUnixTimeMilliseconds();
            long endDateMilliseconds   = ((DateTimeOffset)endTime).ToUnixTimeMilliseconds();

            //Add the parameters to the URL
            targetUrl += $"?startDate={startDateMilliseconds}&";
            targetUrl += $"endDate={endDateMilliseconds}&";
            targetUrl += $"frequencyType={frequency.ToString().ToLower()}&";
            targetUrl += $"frequency=1";

            //Send the HTTP Request
            var result = _HttpClient.GetAsync(targetUrl).Result;

            //Read the result string
            var response = result.Content.ReadAsStringAsync().Result;

            //Parse the main part of the response
            var responseJson = JsonConvert.DeserializeObject <JSON.Ticker.PriceHistory>(response);

            //Create a list of candlesticks to send back
            var candlesticks = new List <CandleStick>();

            //Loop through all JSON and parse it to the universal candlestick type
            foreach (var candlestick in responseJson.candles)
            {
                //Create a new candlestick struct
                var finalCandlestick = new CandleStick
                {
                    Symbol = symbol,
                    Time   = DateTimeOffset.FromUnixTimeMilliseconds(candlestick.datetime).UtcDateTime,
                    Open   = (Decimal)candlestick.open,
                    Close  = (Decimal)candlestick.close,
                    High   = (Decimal)candlestick.high,
                    Low    = (Decimal)candlestick.low,
                    Volume = candlestick.volume
                };

                //Check that the candlestick is in the specified bounds
                if (finalCandlestick.Time < startTime || finalCandlestick.Time > endTime)
                {
                    continue;
                }

                //Add the candlestick to the candlestick list
                candlesticks.Add(finalCandlestick);
            }

            //Return the candlesticks
            return(candlesticks);
        }
Beispiel #10
0
        public void Add(CandleStick candleStick)
        {
            new Validations.FrameAddValidation(this, candleStick).Validate();

            _candleSticks.Add(candleStick);
            _lastCandleStick = candleStick;
            _count++;
        }
Beispiel #11
0
        public CandleData GetCandleData()
        {
            var data = new CandleData()
            {
                ResultSet = new Dictionary <int, IList <CandleStick> >()
            };

            var candleSet = new List <CandleStick>();

            var candle1 = new CandleStick()
            {
                CloseTime  = 1505599920,
                OpenPrice  = 0.014018m,
                HighPrice  = 0.014018m,
                LowPrice   = 0.014018m,
                ClosePrice = 0.014018m,
                Volume     = 41.618446m
            };

            var candle2 = new CandleStick()
            {
                CloseTime  = 1505599860m,
                OpenPrice  = 0.014158m,
                HighPrice  = 0.014158m,
                LowPrice   = 0.014011m,
                ClosePrice = 0.014143m,
                Volume     = 300.7724m
            };

            var candle3 = new CandleStick()
            {
                CloseTime  = 1505599800,
                OpenPrice  = 0.014158m,
                HighPrice  = 0.014158m,
                LowPrice   = 0.014158m,
                ClosePrice = 0.014158m,
                Volume     = 11.847191m
            };

            var candle4 = new CandleStick()
            {
                CloseTime  = 1505599740,
                OpenPrice  = 0.014158m,
                HighPrice  = 0.014158m,
                LowPrice   = 0.014158m,
                ClosePrice = 0.014158m,
                Volume     = 1.9391322m
            };

            candleSet.Add(candle1);
            candleSet.Add(candle2);
            candleSet.Add(candle3);
            candleSet.Add(candle4);

            data.ResultSet.Add(60, candleSet);
            return(data);
        }
        public void AppendCandleStick(CandleStick candleStick)
        {
            if (HasMaxCandleSticks())
            {
                throw CandleStickExceptions.MaxNumberOfCandleSticks(this.GetType(), _MaxNumberOfCandleSticks);
            }

            _CandleSticks.Add(candleStick);
        }
Beispiel #13
0
        public void AddRange(IEnumerable <CandleStick> candleSticks)
        {
            candleSticks.ToList().Sort(new CandleStickComparer());

            new Validations.FrameAddRangeValidation(this, candleSticks).Validate();

            _candleSticks.AddRange(candleSticks);
            _lastCandleStick = candleSticks.Last();
            _count          += candleSticks.Count();
        }
Beispiel #14
0
 private bool TrendIsUpOnlyCheckHigh(CandleStick First, CandleStick Second)
 {
     //1 => upward
     // -1 => downward
     if (Second.High >= First.High)
     {
         return(true); //going upward
     }
     return(false);    // going downward
 }
 private static void FillVTrendLines(CandleStick candle)
 {
     candle.VTrendLines.Add(new DoubleLineElement
     {
         StartValue   = 10,
         EndValue     = 13,
         Color        = "#FF5904".FromHtml(),
         DisplayValue = "Result Impact",
         IsTrendZone  = true,
         Alpha        = 10
     });
 }
 private static void FillTrendset(CandleStick candle, string name, double minX, double maxX)
 {
     candle.Trendset.Name = name;
     for (int x = (int)minX; x < (int)maxX; x++)
     {
         var data = candle.Dataset.ElementAtOrDefault(x);
         if (data != null && data.High.HasValue && data.Low.HasValue)
         {
             candle.Trendset.AddSet(x, (data.High.Value + data.Low.Value) / 2.0);
         }
     }
 }
        public CandleStick GetCandleStick(ChartHistory history, int index)
        {
            var candleStick = new CandleStick
            {
                Open  = history.Opens[index],
                Low   = history.Lows[index],
                High  = history.Highs[index],
                Close = history.Closes[index]
            };

            return(candleStick);
        }
Beispiel #18
0
 private int Trend(CandleStick First, CandleStick Second)
 {
     //1 => upward
     // -1 => downward
     // 0
     if (Second.High > First.High && Second.Low > First.Low)
     {
         return(1);                                                    //going upward
     }
     if (Second.High < First.High && Second.Low < First.Low)
     {
         return(-1);                                                   // going downward
     }
     return(0);
 }
        public async Task Update(CandleStick entity, CancellationToken cancellationToken)
        {
            var command = CreateCommand();

            command.CommandText = $"UPDATE CandleSticks SET High = @High, Open = @Open, Close = @Close, Low = @Low, Volume = @Volume, Date = @Date);";

            command.Parameters.Add(new SqlParameter("@Id", entity.Id));
            command.Parameters.Add(new SqlParameter("@High", entity.High));
            command.Parameters.Add(new SqlParameter("@Open", entity.Open));
            command.Parameters.Add(new SqlParameter("@Close", entity.Close));
            command.Parameters.Add(new SqlParameter("@Low", entity.Low));
            command.Parameters.Add(new SqlParameter("@Volume", entity.Volume));
            command.Parameters.Add(new SqlParameter("@Date", entity.Date));

            await ExecuteNonQueryAsync(command, cancellationToken);
        }
        private static void FillData(CandleStick candle, double minX, double maxX)
        {
            for (double x = minX; x < maxX; x += 1)
            {
                var open = rnd.Next(30, 60) * rnd.Next(90, 111) * (x / 10.0) / 2000.0;
                // var high = rnd.Next(22, 28) * rnd.Next(90, 110) * 1.1 * x / 50.0;
                var high   = open + rnd.Next(-120, 120) * 0.01;
                var volume = rnd.Next(20, 100) * 1000000.0;

                candle.AddSet(x,
                              open,
                              open - rnd.Next(-50, 100) * 0.01,
                              high,
                              high - rnd.Next(-50, 100) * 0.01,
                              volume);
            }
        }
Beispiel #21
0
 private CandleStick Combine(bool IsUpward, CandleStick _SecondCS, CandleStick _ThirdCS)
 {
     if (IsUpward)
     {
         var NewHigh = Math.Max(_SecondCS.High, _ThirdCS.High);
         var NewLow  = Math.Max(_SecondCS.Low, _ThirdCS.Low);
         //when growing trend, open = newLow, close = newHigh, green stick increasing
         return(new CandleStick(_SecondCS.Date + "," + NewLow + "," + NewHigh + "," + NewLow + "," + NewHigh));
     }
     else
     {
         var NewHigh = Math.Min(_SecondCS.High, _ThirdCS.High);
         var NewLow  = Math.Min(_SecondCS.Low, _ThirdCS.Low);
         //when growing trend, open = newLow, close = newHigh, green stick increasing
         return(new CandleStick(_SecondCS.Date + "," + NewHigh + "," + NewHigh + "," + NewLow + "," + NewLow));
     }
 }
 private static void FillTrendLines(CandleStick candle)
 {
     // displayvalue='S1' thickness='0' dashed='1' dashLen='2' dashGap='2'
     candle.TrendLines.Add(new DoubleLineElement
     {
         StartValue   = 4.2,
         Color        = "#0382AB".FromHtml(),
         DisplayValue = "S1",
         Thickness    = 0,
         IsDashed     = true,
         DashLen      = 2,
         DashGap      = 2
     });
     candle.TrendLines.Add(new DoubleLineElement
     {
         StartValue   = 4.8,
         Color        = "#0382AB".FromHtml(),
         DisplayValue = "S2",
         Thickness    = 0,
         IsDashed     = true,
         DashLen      = 2,
         DashGap      = 2
     });
     candle.TrendLines.Add(new DoubleLineElement
     {
         StartValue   = 15.5,
         Color        = "#0382AB".FromHtml(),
         DisplayValue = "R1",
         Thickness    = 0,
         IsDashed     = true,
         DashLen      = 2,
         DashGap      = 2
     });
     candle.TrendLines.Add(new DoubleLineElement
     {
         StartValue   = 14.2,
         Color        = "#0382AB".FromHtml(),
         DisplayValue = "R2",
         Thickness    = 0,
         IsDashed     = true,
         DashLen      = 2,
         DashGap      = 2
     });
 }
        private static CandleStick CreateSimpleCandleStick(string caption)
        {
            var candle = new CandleStick
            {
                Caption             = caption,
                Palette             = rnd.Next(1, 6),
                BearBorderColor     = "#E33C3C".FromHtml(),
                BearFillColor       = "#E33C3C".FromHtml(),
                BullBorderColor     = "#1F3165".FromHtml(),
                PYAxisName          = "Price",
                VYAxisName          = "Volume (In Millions)",
                NumPDivLines        = 5,
                ShowVolumeChart     = true,
                VolumeHeightPercent = 30,
                NumberAttr          = { NumberPrefix = "$" }
            };

            return(candle);
        }
        public async Task Add(CandleStick entity, CancellationToken cancellationToken)
        {
            var command = CreateCommand();

            command.CommandText = $"INSERT INTO CandleSticks VALUES(@High, @Open, @Close, @Low, @Volume, @Date);";

            command.Parameters.Add(new SqlParameter("@High", entity.High));
            command.Parameters.Add(new SqlParameter("@Open", entity.Open));
            command.Parameters.Add(new SqlParameter("@Close", entity.Close));
            command.Parameters.Add(new SqlParameter("@Low", entity.Low));
            command.Parameters.Add(new SqlParameter("@Volume", entity.Volume));
            command.Parameters.Add(new SqlParameter("@Date", entity.Date));

            var id = await ExecuteScalarAsync(command, cancellationToken);

            if (id != null)
            {
                entity.Id = (int)id;
            }
        }
 public static PatternScanResults Create(CandleStick candle, bool patternTriggered)
 => new PatternScanResults
 {
     CandleStick = candle, IsPatternTriggered = patternTriggered
 };
        public async Task Handle(CreateCandleStickCommand command, CancellationToken cancellationToken)
        {
            var candleStick = CandleStick.Create(command.High, command.Open, command.Close, command.Low, command.Volume, command.Date);

            await _repository.Add(candleStick, cancellationToken);
        }
Beispiel #27
0
        /// <summary>
        /// Returns 24-hour data for all pairs and markets.
        /// </summary>
        /// <returns></returns>
        public async Task <List <CandleStick> > Get24HourDataAsync()
        {
            var result = await ExecuteCall(get24HourData);

            return(CandleStick.FromJson(result));
        }
Beispiel #28
0
 public FrameAddValidation(IFrame frame, CandleStick candleStick)
 {
     _frame       = frame;
     _candleStick = candleStick;
 }
Beispiel #29
0
 public void Publish(string currency, CandleStick kline)
 {
     Console.WriteLine($"publishing on {currency}");
     Clients.Group(currency).SendAsync(currency, kline);
 }
Beispiel #30
0
    private void instantiateChartObject(double[][] ohlcDatas)
    {
        double[][] ohlc72  = new double[72][];
        int        counter = 71;

        for (int i = ohlcDatas.Length - 1; i >= 0; i--)
        {
            if (ohlcDatas[i] == null)
            {
                continue;
            }
            ohlc72[counter] = ohlcDatas[i];
            counter--;
            if (counter == -1)
            {
                break;
            }
        }

        ohlcDatas = ohlc72;

        double highest = 0.0;
        double lowest  = 114514191981.0;

        double highestTotal = 0.0;
        double lowestTotal  = 114514191981.0;

        int correctCount = 1;

        foreach (double[] ohlc in ohlcDatas)
        {
            if (ohlc == null)
            {
                break;
            }
            if (ohlc[2] > highest)
            {
                highest = ohlc[2];
            }
            if (ohlc[3] < lowest)
            {
                lowest = ohlc[3];
            }

            if (ohlc[5] > highestTotal)
            {
                highestTotal = ohlc[5];
            }
            else if (ohlc[5] < lowestTotal)
            {
                lowestTotal = ohlc[5];
            }
            correctCount++;
        }

        double diff = (highest - lowest) * 0.05;

        highest += diff;
        lowest  -= diff;

        GameObject candle = null;

        Vector3 pos = transform.position;

        foreach (double[] ohlc in ohlcDatas)
        {
            if (ohlc == null)
            {
                break;
            }
            candle      = Instantiate(candlePrefab, pos, transform.rotation);
            candle.name = ohlc[0].ToString();
//			candle.transform.parent = transform;
            candle.transform.SetParent(transform, false);
            //candle.transform.localScale = new Vector3(50, 50, 50);
            CandleStick candleComponent = candle.GetComponent <CandleStick>();
            candleComponent.highest      = highest;
            candleComponent.lowest       = lowest;
            candleComponent.open         = ohlc[1];
            candleComponent.high         = ohlc[2];
            candleComponent.low          = ohlc[3];
            candleComponent.close        = ohlc[4];
            candleComponent.highestTotal = highestTotal;
            candleComponent.lowestTotal  = lowestTotal;
            candleComponent.total        = ohlc[5];
            pos.x += 0.3f;
        }
        this.transform.localScale = new Vector3(size, size * 1.3f, size);
        Vector3 parentPos = this.transform.position;

        parentPos.y -= 1;
        parentPos.x -= (pos.x / 2) * size;
        this.transform.position  = parentPos;
    }