コード例 #1
0
 /// <summary>
 /// attiva la vendita del ordine di acquisto effettuato
 /// </summary>
 /// <param name="regola"></param>
 /// <param name="order"></param>
 /// <param name="token"></param>
 /// <returns></returns>
 public async void  VerificaVenditaTask(RulesBuySell regola, CompletedOrder order, CancellationToken token = default(CancellationToken))
 {
     while (!token.IsCancellationRequested)
     {
         if (this.VerificaVendita(regola, order))
         {
             try
             {
                 using (UnitOfWork unitOfWork = new UnitOfWork())
                 {
                     var item = unitOfWork.OrdiniDelBotRepository.Find(a => a.Exchange == order.Exchange).FirstOrDefault();
                     unitOfWork.OrdiniDelBotRepository.Delete(item);
                     unitOfWork.Commit();
                 }
             }
             catch (Exception ex)
             {
                 Log(ex);
             }
             //se ha venduto termina il task
             break;
         }
         try
         {
             await Task.Delay(TimeSpan.FromSeconds(10), token);
         }
         catch (TaskCanceledException)
         {
             break;
         }
     }
 }
コード例 #2
0
            private bool VerificaVendita(RulesBuySell regola, CompletedOrder order)
            {
                try
                {
                    var valoreAttuale = Manager.Exchange.GetTicker(order.Exchange).Ask;

                    Log("Il valore attuale moneta " + order.Exchange + " è di " + valoreAttuale + " BTC", LogType.ReadDataFromInternet);

                    if (regola.VendiSeAumentaDiXPercento > 0)
                    {
                        if (order.PricePerUnit == 0)
                        {
                            order.PricePerUnit = order.Price / order.Quantity;
                        }
                        if (valoreAttuale > order.PricePerUnit * (regola.VendiSeAumentaDiXPercento + 100) / 100)
                        {
                            Log("Raggiunto aumento percentuale di " + regola.VendiSeAumentaDiXPercento
                                + " per moneta " + order.Exchange, LogType.Sell);

                            var orderSell = Manager.Exchange.PlaceSellOrder(order.Exchange, order.Quantity, valoreAttuale);

                            var OrderSelList = Manager.Exchange.GetOrderHistory(order.Exchange);
                            var orderFound   = OrderSelList.Where(a => a.OrderUuid == orderSell.uuid).FirstOrDefault();
                            if (orderFound != null)
                            {
                                Log("Vendita completata dell'ordine " + orderFound.OrderUuid + " per moneta " + order.Exchange, LogType.Sell);
                                return(true);
                            }
                            else
                            {
                                Manager.Exchange.CancelOrder(orderSell.uuid);
                                return(false);
                            }
                        }
                    }
                    if (regola.VendiSeScendeDiXPercento > 0)
                    {
                        if (valoreAttuale > order.PricePerUnit * (100 - regola.VendiSeScendeDiXPercento) / 100)
                        {
                            Log("Raggiunto aumento percentuale di " + regola.VendiSeScendeDiXPercento
                                + " per moneta " + order.Exchange, LogType.Sell);

                            var orderSell = Manager.Exchange.PlaceSellOrder(order.Exchange, order.Quantity, valoreAttuale);

                            var OrderSelList = Manager.Exchange.GetOrderHistory(order.Exchange);
                            var orderFound   = OrderSelList.Where(a => a.OrderUuid == orderSell.uuid).FirstOrDefault();
                            if (orderFound != null)
                            {
                                Log("Vendita completata dell'ordine " + orderFound.OrderUuid + " per moneta " + order.Exchange, LogType.Sell);
                                return(true);
                            }
                            else
                            {
                                Manager.Exchange.CancelOrder(orderSell.uuid);
                                return(false);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Log(ex);
                }
                return(false);
            }
コード例 #3
0
            private bool FaiOrdineAcqusto(string moneta, RulesBuySell regola)
            {
                try
                {
                    Log("Tentativo di acquisto " + moneta, LogType.Affermation);

                    var btcAvaliable = Manager.Exchange.GetBalance("BTC").Available;
                    if (btcAvaliable < 0.0005m)
                    {
                        Log("Fondi insufficienti per comprare " + moneta, LogType.Warning);
                        return(false);
                    }
                    Log(string.Format("Disponibili {0} BTC", btcAvaliable)
                        , LogType.Information);

                    var valoreAttuale = Manager.Exchange.GetTicker(moneta).Last;
                    Log("Il valore attuale moneta " + moneta + " è di " + valoreAttuale + " BTC", LogType.ReadDataFromInternet);

                    var importobtcAcq = btcAvaliable;
                    if (regola.AcquistaImportoMaxBtc != 0)
                    {
                        if (btcAvaliable > regola.AcquistaImportoMaxBtc)
                        {
                            importobtcAcq = regola.AcquistaImportoMaxBtc;
                            Log(string.Format("Verrà acquistata la moneta " + moneta + " per una spesa massima di {0} BTC", importobtcAcq)
                                , LogType.ReadDataFromInternet);
                        }
                    }


                    var qta    = Math.Round(importobtcAcq / valoreAttuale, 4);
                    var prezzo = valoreAttuale;
                    if (regola.AcquistaAlValoreDiLastPiuPercentuale == 0)
                    {
                        prezzo = prezzo * (100 + regola.AcquistaAlValoreDiLastPiuPercentuale) / 100;
                    }

                    Log(string.Format("Emissione ordine acquisto di moneta {0} al varore {1} rispetto all'attuale di {2} per la qta di {3}",
                                      moneta, valoreAttuale, qta, prezzo), LogType.Buy);

                    var ordine = Manager.Exchange.PlaceBuyOrder(moneta, qta, prezzo);
                    if (ordine.uuid != null)
                    {
                        Log("Ordine creato con successo " + ordine.uuid.ToString(), LogType.Buy);

                        using (UnitOfWork unitOfWork = new UnitOfWork())
                        {
                            unitOfWork.OrdiniDelBotRepository.Add(new OrdiniDelBot()
                            {
                                Uuid = ordine.uuid, Exchange = moneta
                            });
                            unitOfWork.Commit();

                            Manager.AggiornaOrdini();
                            var ordineChiuso = Manager.Db.OrderHistory.Where(a => a.OrderUuid == ordine.uuid).ToList();
                            if (ordineChiuso != null)
                            {
                                //se è stata acquistato va alla vendita
                                Vendita.Instance.Attiva(false);
                                return(true);
                            }
                            else
                            {
                                Manager.Exchange.CancelOrder(ordine.uuid);
                                return(false);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Log(ex);
                }

                return(false);
            }