Esempio n. 1
0
        public async Task <List <BaseTypes.CurrencyBalance> > GetAllBalances(InvokePrint Print)
        {
            try
            {
                var ainfo = await binanceClient.GetAccountInfo();

                var balances = new List <BaseTypes.CurrencyBalance>();
                foreach (var t in ainfo.Balances)
                {
                    balances.Add(new BaseTypes.CurrencyBalance
                    {
                        Currency  = t.Asset,
                        Balance   = t.Free + t.Locked,
                        Available = t.Free
                    });
                }

                return(balances);
            }
            catch (Exception ex)
            {
                System.Media.SystemSounds.Beep.Play();
                Print("Ошибка BinanceApi GetAllBalances: " + ex.Message);
                return(null);
            }
        }
Esempio n. 2
0
        private async Task <List <Trade> > GetMarketHistory(BaseTypes.Market Market, InvokePrint Print)
        {
            try
            {
                var tmp = await bittrex.GetMarketHistory(Market.MarketName);

                List <Trade> result = new List <Trade>();
                foreach (var t in tmp)
                {
                    result.Add(new Trade
                    {
                        FillType   = t.FillType,
                        Id         = t.Id,
                        MarketName = t.MarketName,
                        OrderType  = t.OrderType,
                        Price      = t.Price,
                        Quantity   = t.Quantity,
                        Timestamp  = t.Timestamp,
                        Total      = t.Total
                    });
                }
                return(result);
            }
            catch (Exception ex)
            {
                System.Media.SystemSounds.Beep.Play();
                Print("Ошибка BittrexApi GetMarketHistory: " + ex.Message);
                return(null);
            }
        }
Esempio n. 3
0
        public async Task <List <BaseTypes.CurrencyBalance> > GetAllBalances(InvokePrint Print)
        {
            try
            {
                var bal = await bittrex.GetBalances();

                List <BaseTypes.CurrencyBalance> balances = new List <BaseTypes.CurrencyBalance>();
                foreach (var t in bal)
                {
                    balances.Add(new BaseTypes.CurrencyBalance
                    {
                        Currency  = t.Currency,
                        Balance   = t.Balance,
                        Available = t.Available
                    });
                }
                return(balances);
            }
            catch (Exception ex)
            {
                System.Media.SystemSounds.Beep.Play();
                Print("Ошибка BittrexApi GetAllBalances: " + ex.Message);
                return(null);
            }
        }
Esempio n. 4
0
        public async Task <BaseTypes.Ticker> GetMarketPrice(BaseTypes.Market Market, InvokePrint Print)
        {
            try
            {
                Ticker tmp = await bittrex.GetTicker(Market.MarketName);

                if (tmp.Ask == null || tmp.Bid == null)
                {
                    Print("Ask or Bid is null!");
                    return(null);
                }
                return(new BaseTypes.Ticker
                {
                    Ask = tmp.Ask.Value,
                    Bid = tmp.Bid.Value,
                });
            }
            catch (Exception ex)
            {
                System.Media.SystemSounds.Beep.Play();
                Print(String.Format("Ошибка BitrexApi GetMarketPrice: {0}.\r\nMarket: {1}.",
                                    ex.Message, Market.ToString()));
                return(null);
            }
        }
Esempio n. 5
0
        public async Task <BaseTypes.TradeResult> GetOrderAmount(string OrderID, InvokePrint Print)
        {
            try
            {
                string[] arrtmp  = OrderID.Split(new char[] { '*' }, StringSplitOptions.RemoveEmptyEntries);
                long     orderID = Convert.ToInt64(arrtmp[1]);

                var ResOrder = await binanceClient.GetOrder(arrtmp[0], orderID);

                var tresult = new BaseTypes.TradeResult
                {
                    IsFilled = ResOrder.Status == "FILLED"
                };
                tresult.BaseQty   = ResOrder.ExecutedQty;
                tresult.MarketQty = ResOrder.СummulativeQuoteQty;

                tresult.AveragePrice = ResOrder.Price;
                return(tresult);
            }
            catch (Exception ex)
            {
                System.Media.SystemSounds.Beep.Play();
                Print("Ошибка BinanceApi OrderAmount: " + ex.Message);
                return(null);
            }
        }
Esempio n. 6
0
        public async Task <BaseTypes.Ticker> GetMarketPrice(BaseTypes.Market Market, InvokePrint Print)
        {
            try
            {
                var asdf = await binanceClient.GetPriceChange24H(Market.MarketName.Replace("-", ""));

                BaseTypes.Ticker ticker = null;
                foreach (var tmp in asdf)
                {
                    if (tmp.Symbol == Market.MarketName.Replace("-", ""))
                    {
                        ticker = new BaseTypes.Ticker
                        {
                            Ask = tmp.AskPrice,
                            Bid = tmp.BidPrice,
                        };
                        break;
                    }
                }
                return(ticker);
            }
            catch (Exception ex)
            {
                System.Media.SystemSounds.Beep.Play();
                Print(String.Format("Ошибка BinanceApi GetMarketPrice: {0}.\r\nMarket: {1}.",
                                    ex.Message, Market.ToString()));
                return(null);
            }
        }
Esempio n. 7
0
        public async Task <List <BaseTypes.Market> > GetMarkets(InvokePrint Print)
        {
            try
            {
                var tmp = await bittrex.GetMarkets();

                List <BittrexSharp.Domain.Market> MarketsBitttrex = tmp.ToList();
                MarketsBitttrex.RemoveAll((x) => x.IsActive == false);

                List <BaseTypes.Market> resMarkets = new List <BaseTypes.Market>();
                foreach (var t in MarketsBitttrex)
                {
                    resMarkets.Add(new BaseTypes.Market
                    {
                        MarketName     = t.MarketName,
                        BaseCurrency   = t.BaseCurrency,
                        MarketCurrency = t.MarketCurrency
                    });
                }
                return(resMarkets);
            }
            catch (Exception ex)
            {
                System.Media.SystemSounds.Beep.Play();
                Print("Ошибка BittrexApi GetMarkets: " + ex.Message);
                return(null);
            }
        }
Esempio n. 8
0
        //private void ShowOrderInfo(HistoricOrder order, StringBuilder sb = null)
        //{
        //    if (sb == null)
        //        sb = new StringBuilder();
        //    string direct = order.OrderType;
        //    sb.AppendFormat("{0} {1} {2} по цене {3}. {4} {5} {6}. Время: {7}\r\n",
        //       direct, order.Quantity, Param.Market.MarketCurrency, order.PricePerUnit,
        //       direct.Contains("BUY") ? "Потрачено" : "Получено", order.Price, Param.Market.BaseCurrency, order.Timestamp);
        //    Print(sb.ToString(), true);
        //}

        private async Task <decimal> GetMinTradeSize(Market Market, InvokePrint Print)
        {
            try
            {
                var tmp = await bittrex.GetMarkets();

                List <BittrexSharp.Domain.Market> MarketsBitttrex = tmp.ToList();
                MarketsBitttrex.RemoveAll((x) => x.IsActive == false);

                foreach (var t in MarketsBitttrex)
                {
                    if (t.MarketName == Market.MarketName)
                    {
                        return(t.MinTradeSize);
                    }
                }
                throw new Exception("Не удалось получить MinTradeSize для " + Market.MarketName);
            }
            catch (Exception ex)
            {
                System.Media.SystemSounds.Beep.Play();
                Print("Ошибка GetMinTradeSize: " + ex.Message);
                return(0);
            }
        }
Esempio n. 9
0
 public MiniLLStrategy(bool isDirectionBuy, StrategyTrade curStrategyTrade, Action gSave, InvokePrint print, Action onStop)
 {
     IsDirectionBuy   = isDirectionBuy;
     CurStrategyTrade = curStrategyTrade;
     GSave            = gSave;
     Print            = print;
     OnStop           = onStop;
 }
Esempio n. 10
0
        public async Task ShowAccountRest(InvokePrint Print)
        {
            var sinfo = await binanceClient.GetServerTime();

            Print(String.Format("ServerTime: {0} - {1}", sinfo.ServerTime, TimeFromUTC(sinfo.ServerTime)), false);
            var ainfo = await binanceClient.GetAccountInfo();

            Print(String.Format("CanTrade: {0}\r\nCanWithdraw: {1}\r\nCanDeposit: {2}",
                                ainfo.CanTrade, ainfo.CanWithdraw, ainfo.CanDeposit), false);
        }
Esempio n. 11
0
        public async Task <BaseTypes.TradeResult> GetOrderAmount(string OrderID, InvokePrint Print)
        {
            try
            {
                string[]         arrtmp = OrderID.Split(new char[] { '*' }, StringSplitOptions.RemoveEmptyEntries);
                BaseTypes.Market market = BaseTypes.Market.LoadFromString(arrtmp[0]);
                string           Uuid   = arrtmp[1];

                decimal amount                = -1;
                int     MaxRepeat             = 10;
                int     CurRepeat             = 0;
                BaseTypes.TradeResult tresult = new BaseTypes.TradeResult();
                while (amount == -1 && CurRepeat < MaxRepeat)
                {
                    try
                    {
                        List <HistoricOrder> OrderHistory = await GetOrderHistory(market, Print);

                        HistoricOrder needOrder = OrderHistory.Find(x => x.OrderUuid == Uuid);
                        if (needOrder != null)
                        {
                            tresult.BaseQty      = needOrder.Quantity;
                            tresult.AveragePrice = needOrder.Price;
                            tresult.IsFilled     = true;
                            amount = 2;
                        }
                        else
                        {
                            amount = 0;
                        }
                    }
                    catch
                    {
                        CurRepeat++;
                        Thread.Sleep(500); //что бы обновилась история ордеров на сервере
                    }
                }
                if (amount == -1)
                {
                    throw new Exception("Не удалось получить информацию про ордер!");
                }
                if (amount == 0)
                {
                    throw new Exception("Не удалось получить информацию про ордер, ордер не найдено!");
                }
                return(tresult);
            }
            catch (Exception ex)
            {
                System.Media.SystemSounds.Beep.Play();
                Print("Ошибка BittrexApi OrderAmount: " + ex.Message);
                return(null);
            }
        }
        public Form1()
        {
            InitializeComponent();

            Print    = new InvokePrint(MPrint);
            SManager = new StrategyManager(Print, OnActiveStartegyChangeState);
            foreach (var strat in AllStrategies)
            {
                strategyType.Items.Add(strat.Key);
            }
            strategyType.SelectedIndex     = 0;
            strategyInterval.SelectedIndex = 0;
            Languages.SelectedIndex        = 0;

            ReadFormSettings();
            ChangeSetting(FSetting);

            foreach (var StockKeys in FSetting.AllApiKeys)
            {
                var StockObject = ExTool.StockByName(StockKeys.StockName);
                if (StockObject != null)
                {
                    var stocktype = StockObject.GetType();
                    var MInfo     = stocktype.GetMethod("SetApiKeys", BindingFlags.Public | BindingFlags.Static);
                    MInfo.Invoke(null, new object[] { StockKeys.Public, StockKeys.Secret });

                    AllStocks.Add(StockObject);
                }
                else
                {
                    System.Media.SystemSounds.Beep.Play();
                    Print("Ошибка: тип биржи " + StockKeys.StockName + " не найдено!");
                }
            }
            foreach (var stock in AllStocks)
            {
                comboBox1.Items.Add(stock.GetStockName());
            }
            comboBox1.SelectedIndex = 0;

            SManager.ReadStrategies();
            foreach (string item in SManager.StrategiesList.Keys)
            {
                listBox2.Items.Add(item);
            }
            if (listBox2.Items.Count > 0)
            {
                listBox2.SelectedIndex = listBox2.Items.Count - 1;
            }
        }
Esempio n. 13
0
        public virtual event EventHandler <ActiveOrdersGridEventArgs> ChangeActiveOrders; //изменение ордеров в позиции стратегии

        public Strategy(string uniqueID)
        {
            if (uniqueID == "")
            {
                var    rand = new Random();
                string stmp = "";
                for (int i = 0; i < 10; i++)
                {
                    stmp += rand.Next(1, Int32.MaxValue);
                }

                uniqueID = IniTool.ConvertName(stmp);
            }
            UniqueID = uniqueID;
            Print    = new InvokePrint(PrintMethod);
        }
        public Settings(FormSettings settings, Action <FormSettings> onChangeSettings)
        {
            InitializeComponent();

            this.Print            = Form1.Print;
            this.OnChangeSettings = onChangeSettings;
            this.FSettings        = settings;
            foreach (var sname in FSettings.AllStocks)
            {
                comboBox1.Items.Add(sname);
            }
            if (comboBox1.Items.Count > 0)
            {
                comboBox1.SelectedIndex = 0;
            }
            textBox1.Text = settings.FormName;
        }
Esempio n. 15
0
 public void ListenPrice(Action <BaseTypes.Ticker> handler, InvokePrint Print)
 {
     try
     {
         lock (LocalLockWebSocket)
         {
             CurPriceActions.Add(handler);
             if (WebSocketID == "")
             {
                 WebSocketID = binanceClient.ListenDepthEndpoint(StrMarket, (x) => { }, depthHandler);
             }
         }
     }
     catch (Exception ex)
     {
         System.Media.SystemSounds.Beep.Play();
         Print("Ошибка LBinanceApi ListenPrice: " + ex.Message);
     }
 }
Esempio n. 16
0
 public void CloseListenPrice(Action <BaseTypes.Ticker> priceHandler, InvokePrint Print)
 {
     try
     {
         lock (LocalLockWebSocket)
         {
             CurPriceActions.Remove(priceHandler);
             if (CurPriceActions.Count == 0)
             {
                 binanceClient._apiClient.CloseWebSocket(WebSocketID);
                 WebSocketID = "";
             }
         }
     }
     catch (Exception ex)
     {
         System.Media.SystemSounds.Beep.Play();
         Print("Ошибка LBinanceApi CloseListenPrice: " + ex.Message);
     }
 }
Esempio n. 17
0
        public async Task <List <BaseTypes.Market> > GetMarkets(InvokePrint Print)
        {
            try
            {
                var wer = await binanceClient.GetAllPairs();

                var resMarkets = new List <BaseTypes.Market>();
                foreach (string ms in wer)
                {
                    resMarkets.Add(new BaseTypes.Market(ms));
                }
                return(resMarkets);
            }
            catch (Exception ex)
            {
                System.Media.SystemSounds.Beep.Play();
                Print("Ошибка BinanceApi GetMarkets: " + ex.Message);
                return(null);
            }
        }
Esempio n. 18
0
        public async Task <BaseTypes.CurrencyBalance> GetBalance(string Currency, InvokePrint Print)
        {
            try
            {
                var cbal = await bittrex.GetBalance(Currency);

                BaseTypes.CurrencyBalance balance = new BaseTypes.CurrencyBalance
                {
                    Currency  = cbal.Currency,
                    Balance   = cbal.Balance,
                    Available = cbal.Available
                };
                return(balance);
            }
            catch (Exception ex)
            {
                System.Media.SystemSounds.Beep.Play();
                Print(String.Format("Ошибка BittrexApi GetBalance: {0}\r\nCurrency: {1}.", ex.Message, Currency));
                return(null);
            }
        }
Esempio n. 19
0
        public async Task <BaseTypes.CurrencyBalance> GetBalance(string Currency, InvokePrint Print)
        {
            try
            {
                var ainfo = await binanceClient.GetAccountInfo();

                var Bbalance = ainfo.Balances.First(x => x.Asset == Currency);

                var balance = new BaseTypes.CurrencyBalance
                {
                    Currency  = Bbalance.Asset,
                    Balance   = Bbalance.Free + Bbalance.Locked,
                    Available = Bbalance.Free
                };
                return(balance);
            }
            catch (Exception ex)
            {
                System.Media.SystemSounds.Beep.Play();
                Print(String.Format("Ошибка BinanceApi GetBalance: {0}\r\nCurrency: {1}.", ex.Message, Currency));
                return(null);
            }
        }
Esempio n. 20
0
        /// <summary>
        /// Количество секунд до первого запуска таймера Update
        /// </summary>
        /// <returns></returns>
        public static TimeSpan NextTimerTick(Candle_Interval Interval, InvokePrint Print)
        {
            int      TimeShift    = rand.Next(1, 10);
            DateTime NextTickTime = DateTime.Now;   //ближайшее подходящее время для запуска
            TimeSpan resspan      = new TimeSpan(); //осталось до NextTickTime

            switch (Interval)
            {
            case Candle_Interval.oneMin:
            {
                TimeSpan tspan = new TimeSpan(NextTickTime.Hour, NextTickTime.Minute, TimeShift);
                tspan        = tspan.Add(TimeSpan.FromMinutes(1));
                NextTickTime = NextTickTime.Date + tspan;
                resspan      = NextTickTime - DateTime.Now;
            }
            break;

            case Candle_Interval.fiveMin:
            {
                TimeSpan tspan = new TimeSpan(NextTickTime.Hour,
                                              5 * (int)Math.Truncate((double)NextTickTime.Minute / 5), TimeShift);
                tspan        = tspan.Add(TimeSpan.FromMinutes(5));
                NextTickTime = NextTickTime.Date + tspan;
                resspan      = NextTickTime - DateTime.Now;
            }
            break;

            case Candle_Interval.thirtyMin:
            {
                TimeSpan tspan = new TimeSpan(NextTickTime.Hour,
                                              30 * (int)Math.Truncate((double)NextTickTime.Minute / 30), TimeShift);
                tspan        = tspan.Add(TimeSpan.FromMinutes(30));
                NextTickTime = NextTickTime.Date + tspan;
                resspan      = NextTickTime - DateTime.Now;
            }
            break;

            case Candle_Interval.hour:
            {
                TimeSpan tspan = new TimeSpan(NextTickTime.Hour, 0, TimeShift);
                tspan        = tspan.Add(TimeSpan.FromHours(1));
                NextTickTime = NextTickTime.Date + tspan;
                resspan      = NextTickTime - DateTime.Now;
            }
            break;

            case Candle_Interval.day:
            {
                TimeSpan tspan = new TimeSpan(0, 0, TimeShift);
                tspan        = tspan.Add(TimeSpan.FromDays(1));
                NextTickTime = NextTickTime.Date + tspan;
                resspan      = NextTickTime - DateTime.Now;
            }
            break;

            default: return(TimeSpan.FromMinutes(1));
            }
            if (resspan < TimeSpan.FromSeconds(5))
            {
                resspan.Add(TimerPeriod(Interval)); //уже здесь, вызов на следующий раз
            }
            Print("Следущее обновление через: " + resspan.ToString(@"hh\:mm\:ss"));
            return(resspan);
        }
 public StrategyPrices(Strategy strategy, InvokePrint Print)
 {
     MainStrategy   = strategy;
     this.Print     = Print;
     LastCandleTime = DateTime.MinValue;
 }
Esempio n. 22
0
 public void CloseListenPrice(BaseTypes.Market market, Action <BaseTypes.Ticker> priceHandler, InvokePrint Print)
 {
 }
Esempio n. 23
0
        public async Task <BaseTypes.TradeResult> ExecuteMarket(BaseTypes.Market Market, double Amount, bool DirectionBuy, InvokePrint Print)
        {
            decimal rate   = 0;
            decimal amount = 0;

            try
            {
                BaseTypes.Ticker ticker = await GetMarketPrice(Market, Print);

                if (DirectionBuy)
                {
                    rate = (decimal)ticker.Ask;
                    if (rate < 0.00001M)
                    {
                        rate += (decimal)((double)rate * 0.1);
                    }
                    else
                    {
                        rate += (decimal)((double)rate * 0.01);
                    }
                }
                else
                {
                    rate  = (decimal)ticker.Bid;
                    rate -= (decimal)((double)rate * 0.25);
                }
                rate = Math.Round(rate, 8);

                if (DirectionBuy)
                {
                    amount = (decimal)Amount;
                }
                else
                {
                    amount = Math.Round((decimal)Amount * (decimal)ticker.Bid, 8);
                }
                string uuid = await ExecuteOrder(Market, amount, rate, DirectionBuy, Print);

                BaseTypes.TradeResult tresult = new BaseTypes.TradeResult()
                {
                    Symbol  = Market.MarketName,
                    OrderId = uuid,

                    IsFilled = false
                };
                return(tresult);
            }
            catch (Exception ex)
            {
                System.Media.SystemSounds.Beep.Play();
                Print(String.Format("Ошибка BittrexApi ExecuteMarket: {0}.\r\nMarket: {1}, Amount: {2}, DirectionBuy: {3}.\r\nrate: {4}, amount: {5}.",
                                    ex.Message, Market.ToString(), Amount, DirectionBuy, rate, amount));
                return(null);
            }
        }
Esempio n. 24
0
        private async Task <List <HistoricOrder> > GetOrderHistory(BaseTypes.Market Market, InvokePrint Print)
        {
            try
            {
                var tmp = await bittrex.GetOrderHistory(Market.MarketName);

                List <HistoricOrder> result = new List <HistoricOrder>();
                foreach (var t in tmp)
                {
                    result.Add(new HistoricOrder
                    {
                        Commission        = t.Commission,
                        Condition         = t.Condition,
                        ConditionTarget   = t.ConditionTarget,
                        Exchange          = t.Exchange,
                        ImmediateOrCancel = t.ImmediateOrCancel,
                        IsConditional     = t.IsConditional,
                        Limit             = t.Limit,
                        OrderType         = t.OrderType,
                        OrderUuid         = t.OrderUuid,
                        Price             = t.Price,
                        PricePerUnit      = t.PricePerUnit,
                        Quantity          = t.Quantity,
                        QuantityRemaining = t.QuantityRemaining,
                        Timestamp         = t.Timestamp
                    });
                }
                return(result);
            }
            catch (Exception ex)
            {
                System.Media.SystemSounds.Beep.Play();
                Print("Ошибка GetOrderHistory: " + ex.Message);
                return(null);
            }
        }
Esempio n. 25
0
 public void ListenPrice(BaseTypes.Market market, Action <BaseTypes.Ticker> handler, InvokePrint Print)
 {
     try
     {
     }
     catch (Exception ex)
     {
         System.Media.SystemSounds.Beep.Play();
         Print("Ошибка BittrexApi ListenPrice: " + ex.Message);
     }
 }
Esempio n. 26
0
        public async Task <List <BaseTypes.Candle> > GetCandles(BaseTypes.Market Market, Candle_Interval Interval, int Limit, InvokePrint Print)
        {
            try
            {
                var tmp = await bittrex.GetCandles(Market.MarketName, Interval.ToString());

                List <Candle>           BCandles      = tmp.ToList();
                List <BaseTypes.Candle> lastByHistory = await CandleByMarketHistory(Market, Interval, Print);

                List <BaseTypes.Candle> Candles = new List <BaseTypes.Candle>(BCandles.Count);
                foreach (var t in BCandles)
                {
                    Candles.Add(new BaseTypes.Candle
                    {
                        Open  = t.Open,
                        Hight = t.Hight,
                        Low   = t.Low,
                        Close = t.Close,
                        Time  = t.Time
                    });
                }

                if (lastByHistory != null)
                {
                    Candles.AddRange(lastByHistory);
                }
                return(Candles);
            }
            catch (Exception ex)
            {
                System.Media.SystemSounds.Beep.Play();
                Print(String.Format("Ошибка BittrexApi GetCandles: {0}.\r\nMarket: {1}, Interval: {2}",
                                    ex.Message, Market.ToString(), Interval.ToString()));
                return(null);
            }
        }
Esempio n. 27
0
        private async Task <Candle> GetLastCandle(BaseTypes.Market Market, Candle_Interval Interval, InvokePrint Print)
        {
            try
            {
                var tmp = await bittrex.GetLastCandle(Market.MarketName, Interval.ToString());

                Candle result = new Candle
                {
                    Open  = tmp.Open,
                    Hight = tmp.Hight,
                    Low   = tmp.Low,
                    Close = tmp.Close,
                    Time  = tmp.Time
                };
                return(result);
            }
            catch (Exception ex)
            {
                System.Media.SystemSounds.Beep.Play();
                Print("Ошибка BittrexApi GetLastCandle: " + ex.Message);
                return(null);
            }
        }
Esempio n. 28
0
        /// <summary>
        /// Формирование последней свечи по MarketHistory
        /// </summary>
        /// <returns></returns>
        private async Task <List <BaseTypes.Candle> > CandleByMarketHistory(BaseTypes.Market Market, Candle_Interval Interval, InvokePrint Print)
        {
            try
            {
                List <Trade> mhist = await GetMarketHistory(Market, Print);

                Candle lastCandle = await GetLastCandle(Market, Interval, Print);

                List <BaseTypes.Candle> resCandles = new List <BaseTypes.Candle>();
                DateTime NTime = StrategyTool.AddPeriod(lastCandle.Time, Interval);
                if (mhist[0].Timestamp > NTime && ConvertTime(mhist[0].Timestamp) != ConvertTime(NTime))
                {
                    resCandles.Add(new BaseTypes.Candle
                    {
                        Open  = mhist[0].Price,
                        Low   = mhist[0].Price,
                        Hight = mhist[0].Price,
                        Close = mhist[0].Price,
                        Time  = NTime
                    });
                }
                else
                {
                    return(null);
                }

                List <DateTime> times = new List <DateTime>();
                times.Add(NTime);
                while (times.Last() < mhist[0].Timestamp)
                {
                    times.Add(StrategyTool.AddPeriod(times.Last(), Interval));
                }
                times.RemoveAt(times.Count - 1);
                int Cpos = times.Count - 1;

                decimal Hval = mhist[0].Price;
                decimal Lval = mhist[0].Price;
                for (int i = 1; i < mhist.Count - 1; i++)
                {
                    if (mhist[i].Timestamp < times[Cpos]) //оформление свечи
                    {
                        resCandles.Last().Hight = Hval;
                        resCandles.Last().Low   = Lval;
                        resCandles.Last().Open  = mhist[i - 1].Price;

                        Hval = mhist[i].Price;
                        Lval = mhist[i].Price;

                        Cpos = Cpos - 1;
                        if (Cpos < 0)
                        {
                            break;
                        }
                        resCandles.Add(new BaseTypes.Candle
                        {
                            Open  = mhist[i].Price,
                            Low   = mhist[i].Price,
                            Hight = mhist[i].Price,
                            Close = mhist[i].Price,
                            Time  = times[Cpos]
                        });
                    }
                    else //обновление max/min текущей свечи
                    {
                        if (Hval < mhist[i].Price)
                        {
                            Hval = mhist[i].Price;
                        }
                        if (Lval > mhist[i].Price)
                        {
                            Lval = mhist[i].Price;
                        }
                    }
                }
                if (Cpos >= 0)
                {
                    resCandles.Last().Hight = Hval;
                    resCandles.Last().Low   = Lval;
                    resCandles.Last().Open  = mhist[mhist.Count - 1].Price;
                }
                resCandles.Reverse();
                if (resCandles.Count > 0)
                {
                    var tmp = await bittrex.GetTicker(Market.MarketName);

                    decimal lastValue = tmp.Last.Value;

                    if (lastValue > resCandles.Last().Hight)
                    {
                        resCandles.Last().Hight = lastValue;
                    }
                    else
                    if (lastValue < resCandles.Last().Low)
                    {
                        resCandles.Last().Low = lastValue;
                    }
                    else
                    {
                        resCandles.Last().Close = lastValue;
                    }
                }

                return(resCandles);
            }
            catch (Exception ex)
            {
                System.Media.SystemSounds.Beep.Play();
                Print("Ошибка BittrexApi CandleByMarketHistory: " + ex.Message);
                return(null);
            }
        }
Esempio n. 29
0
        private async Task <string> ExecuteOrder(BaseTypes.Market Market, decimal Amount, decimal Rate, bool DirectionBuy, InvokePrint Print)
        {
            try
            {
                if (DirectionBuy)
                {
                    var accepted = await bittrex.BuyLimit(Market.MarketName, Amount, Rate);

                    return(accepted.Uuid);
                }
                else
                {
                    var accepted = await bittrex.SellLimit(Market.MarketName, Amount, Rate);

                    return(accepted.Uuid);
                }
            }
            catch (Exception ex)
            {
                System.Media.SystemSounds.Beep.Play();
                Print("Ошибка BittrexApi ExecuteOrder: " + ex.Message);
                return("");
            }
        }
Esempio n. 30
0
 private Task CancelOrderAsync(string Uuid, InvokePrint Print)
 {
     return(null);
 }