Example #1
0
 public override List<ApiTicker> getTicker(List<string> pair)
 {
     List<ApiTicker> ret = new List<ApiTicker>();
     ApiTicker demotick = new ApiTicker();
     demotick.Ask = 202;
     demotick.Bid = 200;
     demotick.High = 204;
     demotick.Last = 201;
     demotick.Low = 199;
     demotick.NumberOfTrades = 1000;
     demotick.Volume = 10;
     demotick.VolumeWeight = 100;
     demotick.CorrectData = true;
     ret.Add(demotick);
     return ret;
 }
Example #2
0
 public void addToAllNewTicker(ApiTicker tick, DateTime dt) {
     Lib.Performance.setWatch("addallticks", true);
     if (dt < Lib.Const.NULL_DATE) {
         Logging.log("Skip addToAllNewTicker because Date < NULL_DATE", LogPrior.Warning);
         Lib.Performance.setWatch("addallticks", false);
         return;
     } else if (!tick.CorrectData) {
         Logging.log("Skip tick because correctData is not set true! " + tick.ToString(), LogPrior.Warning);
         Lib.Performance.setWatch("addallticks", false);
         return;
     }
     Logging.log("AddTickToAll: bid=" + tick.Bid + " ask=" + tick.Ask, LogPrior.Debug);
     foreach (KeyValuePair<int, CandleList> entry in candllist) {
         entry.Value.AddTick(tick, dt);
     }
     Lib.Performance.setWatch("addallticks", false);
 }
Example #3
0
        private void TickTimer_Tick(object sender, EventArgs e)
        {
            try {
                if (timercounter % 60 == 0 || timercounter % 60 == tryagain) {
                    try {
                        ApiTicker tp = kh.getTicker("XXBTZEUR");
                        if (tp == null) {
                            List<ApiTrade> trds = kh.getRecentTrades("XXBTZEUR");
                            if (trds != null) {
                                foreach (ApiTrade tr in trds) {
                                    ApiTicker tick = new ApiTicker();
                                    tick.Last = (double)tr.price;
                                    tick.Volume = (double)tr.vol;
                                    tick.NumberOfTrades = 1;
                                    cm.archiveTick(tick);
                                    cm.addToAllNewTicker(tick, DateTime.Now);
                                }
                            }
                        } else {
                            cm.archiveTick(tp);
                            cm.addToAllNewTicker(tp, DateTime.Now);
                        }
                        tryagain = -1;
                    } catch (Exception ex) {
                        Logging.logException("Failed to getTicker:", ex);
                        if (tryagain == -1) tryagain = 5;
                    }
                    refreshTraderStatus();
                }
                if (timercounter % 120 == 2) {
                    kh.refreshPortfolio();
                }
                if (timercounter % 600 == 5) {
                    cm.saveToFile(Settings.getString(SettKeys.DATA_FILE));
                }
                if (timercounter % 900 == 30) {
                    ApiTradeHistory trd = kh.getTrades();
                    dgvTradeHistory.DataSource = trd.getDataTable();
                    dgvTradeHistory.Refresh();
                }

                if (tabControl1.SelectedTab == tabDebug) {
                    dgvDebugWatch.DataSource = Lib.Performance.getTable();
                } else if (tabControl1.SelectedTab == tabHelp) {
                    refreshMemoryStats();
                } else if (tabControl1.SelectedTab == tabStats) {
                    refreshPortfolio();
                }
                if (Settings.HasChange) Settings.save();

            } catch (Exception ex) {
                Logging.logException("Failed at Timercounter: " + timercounter, ex);
            } finally {
                timercounter++;
            }
        }
Example #4
0
        public void mergeNewTick(ApiTicker newapi)
        {
            this.Ask = mergeDoubleAvarage(this.Ask, newapi.Ask);
            this.Bid = mergeDoubleAvarage(this.Bid, newapi.Bid);
            this.Last = mergeDoubleAvarage(this.Last, newapi.Last);
            this.Volume = mergeDoubleAvarage(this.Volume, newapi.Volume);
            this.VolumeWeight = mergeDoubleAvarage(this.VolumeWeight, newapi.VolumeWeight);
            this.NumberOfTrades = (int)mergeDoubleAvarage(this.NumberOfTrades, newapi.NumberOfTrades);
            this.Low = mergeDoubleMin(this.Low, newapi.Low);
            this.High = mergeDoubleMax(this.High, newapi.High);

            if(newapi.Last > 0){
                if (this.Low > newapi.Last || this.Low < 0) this.Low = newapi.Last;
                if (this.High < newapi.Last) this.High = newapi.Last;
            }

            if (this.Open < 0) this.Open = newapi.Last;
            this.Close = newapi.Last;
            _countMerged++;
        }
Example #5
0
        public ApiTicker clone()
        {
            ApiTicker ret = new ApiTicker();

            ret.Ask = this.Ask;
            ret.Bid = this.Bid;
            ret.last = this.last;
            ret.Volume = this.Volume;
            ret.VolumeWeight = this.VolumeWeight;
            ret.NumberOfTrades = this.NumberOfTrades;
            ret.Low = this.Low;
            ret.High = this.High;
            ret._countMerged = this._countMerged;
            ret.Open = this.Open;
            ret.Close = this.Close;

            return ret;
        }
Example #6
0
 public Candle(DateTime dt, ApiTicker tick) {
     this.dt = new DateTime(dt.Ticks);
     this.value = tick.clone();
 }
Example #7
0
 public Candle() {
     this.dt = DateTime.MinValue;
     this.value = null;
 }
Example #8
0
 public void AddTick(ApiTicker tick, DateTime dt) {
     if (dt < Lib.Const.NULL_DATE) {
         Logging.log("Skip addToAllNewTicker because dt < NULL_DATE", LogPrior.Warning);
         return;
     }
     DateTime normDate = getIntDate(dt);
     _lastTick = new Candle(dt, tick.clone());
     for (int i = 0; i < _candls.Count; i++) {
         if (_candls[i].dt < normDate) {
             onNewCandle(_lastCandle);
             _lastCandle = new Candle(normDate, tick.clone());
             _candls.Insert(i, _lastCandle);
             checkCandleCount();
             return;
         }
         if (_candls[i].dt.Equals(normDate)) {
             _candls[i].value.mergeNewTick(tick);
             return;
         }
     }
     if (MaxCandels - 1 > _candls.Count) {
         _lastCandle = new Candle(normDate, tick.clone());
         _candls.Add(_lastCandle);
     }
 }
Example #9
0
        public void archiveTick(ApiTicker tick) {
            string filename = string.Format("archiv\\ticks_{0:yyyyMM}.csv", DateTime.Now);
            string folder = Path.GetDirectoryName(filename);
            if (!Directory.Exists(folder)) {
                Directory.CreateDirectory(folder);
            }
            StreamWriter fout = new StreamWriter(filename, true);

            Candle c = new Candle(DateTime.Now, tick);
            fout.WriteLine(c.getCSVLine(1));

            fout.Close();
        }
Example #10
0
        public bool loadFromBitcoinChart(string filename, bool merge) {
            if (!File.Exists(filename)) return false;
            Logging.log("Start importing Bitcoinchart candledata from: " + filename, LogPrior.Debug);
            int countcandles = 0;
            StreamReader fin = new StreamReader(filename);
            if (!merge || candllist.Count <= 0) {
                this.generateNew();
            }
            Logging.setForceLogPrior(LogPrior.Warning);
            while (!fin.EndOfStream) {
                countcandles++;
                string line = fin.ReadLine();
                if (countcandles <= 1) continue;
                string[] csvs = line.Split(',');
                DateTime dt = Lib.Converter.toDateTime(csvs[0], DateTime.MinValue, "1970");
                ApiTicker tick = new ApiTicker();

                tick.Last = Lib.Converter.toDouble(csvs[1]);
                tick.Volume = Lib.Converter.toDouble(csvs[2]);

                tick.CorrectData = true;
                this.addToAllNewTicker(tick, dt);
            }
            Logging.releaseForceLogPrior();
            fin.Close();
            Logging.log(String.Format("Import Bitcoinchart Candledata finished ({0} candleListes and {1} candles)", candllist.Count, countcandles), LogPrior.Info);
            return true;
        }
Example #11
0
 public bool loadFromFile(string filename, bool merge) {
     if (!File.Exists(filename)) {
         Logging.log("loadFromFile, File not exist:" + filename, LogPrior.Warning);
         return false;
     }
     Lib.Performance.setWatch("loadFormFile", true);
     Logging.log("Start importing candledata from: " + filename, LogPrior.Info);
     int countcandles = 0;
     if (!merge || candllist.Count <= 0) {
         this.generateNew();
     }
     StreamReader fin = new StreamReader(filename);
     Logging.setForceLogPrior(LogPrior.Warning);
     while (!fin.EndOfStream) {
         string line = fin.ReadLine();
         string[] csvs = line.Split(Lib.Const.CSV_DEL);
         if (csvs.Length <= 3) continue;
         int key = Lib.Converter.toInt(csvs[1]);
         switch (csvs[0]) {
             case Lib.Const.IDS.CANDLE_LIST:
                 if (candllist.ContainsKey(key)) continue;
                 TimeSpan ts = new TimeSpan(Lib.Converter.toLong(csvs[2]));
                 DateTime dt = new DateTime(Lib.Converter.toLong(csvs[3]));
                 candllist.Add(key, new CandleList(ts, dt));
                 break;
             case Lib.Const.IDS.CANDLE_ITEM:
                 dt = Lib.Converter.toDateTime(csvs[2]);
                 if (dt < Lib.Const.NULL_DATE) continue;
                 if (!candllist.ContainsKey(key)) {
                     ts = new TimeSpan(0, 0, key);
                     candllist.Add(key, new CandleList(ts, dt));
                 }
                 ApiTicker tick = new ApiTicker();
                 tick.Ask = Lib.Converter.toDouble(csvs[3]);
                 tick.Bid = Lib.Converter.toDouble(csvs[4]);
                 tick.Last = Lib.Converter.toDouble(csvs[5]);
                 tick.Volume = Lib.Converter.toDouble(csvs[6]);
                 tick.VolumeWeight = Lib.Converter.toDouble(csvs[7]);
                 tick.NumberOfTrades = Lib.Converter.toInt(csvs[8]);
                 tick.Low = Lib.Converter.toDouble(csvs[9]);
                 tick.High = Lib.Converter.toDouble(csvs[10]);
                 tick.CountMerged = Lib.Converter.toInt(csvs[11]);
                 if (csvs.Length > 13) {
                     tick.Open = Lib.Converter.toDouble(csvs[12]);
                     tick.Close = Lib.Converter.toDouble(csvs[13]);
                 } else {
                     tick.Close = tick.Open = tick.Last;
                 }
                 tick.CorrectData = true;
                 candllist[key].AddTick(tick, dt);
                 countcandles++;
                 break;
         }
     }
     Logging.releaseForceLogPrior();
     fin.Close();
     Logging.log(String.Format("Import Candledata finished ({0} candleListes and {1} candles)", candllist.Count, countcandles), LogPrior.Info);
     Lib.Performance.setWatch("loadFormFile", false);
     return true;
 }