Пример #1
0
        public static void RefreshTradePairsLocal()
        {
            ClearAllPairs();

            CurrencyPair[] newPairs = Data.Store.GetAvailableTickerPairs();

            if (tradePairs == null)
            {
                tradePairs = new Utility.TSList <TPManager>();
            }
            tradePairs.Clear();

            Utility.ThreadManager.ReportAlive("Trading.Manager");

            Console.WriteLine("Refreshing locally");
            Console.WriteLine(newPairs.Length);

            if (newPairs != null)
            {
                for (int i = 0; i < newPairs.Length; i++)
                {
                    AddPairLocal(newPairs[i]);
                }
            }
        }
Пример #2
0
 public static void NotifyTickerUpdate(CurrencyPair pair)
 {
     if (updatedPairs == null)
     {
         updatedPairs = new Utility.TSList <CurrencyPair>();
     }
     updatedPairs.Add(pair);
 }
Пример #3
0
        public static TPManager AddPair(CurrencyPair pair)
        {
            if (tradePairs == null)
            {
                tradePairs = new Utility.TSList <TPManager>();
            }

            TPManager tpMan = new TPManager(pair);

            tpMan.Setup();
            tpMan.RecalculateVolatility();
            tpMan.Start();
            tradePairs.Add(tpMan);

            return(tpMan);
        }
Пример #4
0
        public static void AddPairLocal(CurrencyPair pair)
        {
            // adds the pair without pulling any data, using only what's available from file

            if (tradePairs == null)
            {
                tradePairs = new Utility.TSList <TPManager>();
            }

            TPManager tpMan = new TPManager(pair);

            tpMan.Setup(false);
            tpMan.RecalculateVolatility();

            Console.WriteLine("Added Pair " + pair + " Locally.");

            tpMan.Start();
            tradePairs.Add(tpMan);
        }
Пример #5
0
        public static void RefreshTradePairs()
        {
            ClearAllPairs();

            GUI.GUIManager.ClearStrategyScreen();

            // -------------
            // Refresh market data
            // -------------

            List <KeyValuePair <CurrencyPair, PoloniexAPI.MarketTools.IMarketData> > allPairs =
                new List <KeyValuePair <CurrencyPair, PoloniexAPI.MarketTools.IMarketData> >(Data.Store.MarketData.ToArray());


            Thread.Sleep(1000);

            if (tradePairs == null)
            {
                tradePairs = new Utility.TSList <TPManager>();
            }
            tradePairs.Clear();

            List <CurrencyPair> pairsToAdd = new List <CurrencyPair>();

            // -------------
            // Add USDT/BTC
            // -------------

            pairsToAdd.Add(new CurrencyPair("USDT", "BTC"));

            // -------------
            // Add pairs with open positions
            // -------------

            for (int i = 0; i < allPairs.Count; i++)
            {
                if (Utility.TradeTracker.GetOpenPosition(allPairs[i].Key) > 0)
                {
                    pairsToAdd.Add(allPairs[i].Key);
                    allPairs.RemoveAt(i);
                    i--;
                }
            }

            // -------------
            // Filter BTC base and low price
            // -------------

            for (int i = 0; i < allPairs.Count; i++)
            {
                if (allPairs[i].Key.BaseCurrency != "BTC" || allPairs[i].Value.PriceLast < 0.000005)
                {
                    allPairs.RemoveAt(i);
                    i--;
                    continue;
                }
            }

            // -------------
            // Sort by volume
            // -------------

            allPairs.Sort(new Utility.MarketDataComparerVolume());
            allPairs.Reverse();

            // -------------
            // Of top X select by volatility
            // -------------

            List <KeyValuePair <CurrencyPair, double> > filteredPairs = new List <KeyValuePair <CurrencyPair, double> >();

            for (int i = 0; i < allPairs.Count; i++)
            {
                if (i >= 25)
                {
                    break;
                }
                Data.Store.PullTickerHistory(allPairs[i].Key, 1);
                double volatility = CalculateVolatility(allPairs[i].Key);
                filteredPairs.Add(new KeyValuePair <CurrencyPair, double>(allPairs[i].Key, volatility));
            }

            filteredPairs.Sort(new Utility.MarketDataComparerTrend());
            filteredPairs.Reverse();

            for (int i = 0; i < filteredPairs.Count; i++)
            {
                if (pairsToAdd.Count >= 21)
                {
                    break;
                }
                pairsToAdd.Add(filteredPairs[i].Key);
            }

            // -------------
            // Add N pairs
            // -------------

            // to clear data pulled for volatility analysis...
            Data.Store.ClearTickerData();

            for (int i = 0; i < pairsToAdd.Count; i++)
            {
                while (true)
                {
                    Utility.ThreadManager.ReportAlive("Trading.Manager");

                    try {
                        Console.WriteLine("Adding " + pairsToAdd[i] + " to traded pairs");
                        AddPair(pairsToAdd[i]);
                        break;
                    }
                    catch (Exception e) {
                        Console.WriteLine(e.Message + "\n" + e.StackTrace);
                        Thread.Sleep(1000);
                    }
                }
            }
        }
Пример #6
0
        // ----------------------

        public static void SimulateAll()
        {
            // -----------------------------
            // load trade data
            // -----------------------------

            Utility.TSList <Utility.TSList <TickerChangedEventArgs> > fullTickerList = Data.Store.LoadTradeData(false);
            if (fullTickerList == null)
            {
                throw new Exception("Data store loaded NULL tickers");
            }

            List <TickerChangedEventArgs> allTickers = new List <TickerChangedEventArgs>();

            for (int i = 0; i < fullTickerList.Count; i++)
            {
                for (int j = 0; j < fullTickerList[i].Count; j++)
                {
                    allTickers.Add(fullTickerList[i][j]);
                }
            }

            allTickers.Sort();

            // -----------------------------
            // setup optimizers
            // -----------------------------

            // todo: ...

            // -----------------------------
            // setup TPManagers
            // -----------------------------

            List <Trading.TPManager> tpManagers = new List <Trading.TPManager>();

            for (int i = 0; i < fullTickerList.Count; i++)
            {
                CurrencyPair pair = fullTickerList[i].First().CurrencyPair;

                Data.Store.allowUpdatePairs.Add(pair);
                Trading.TPManager currTPMan = new Trading.TPManager(pair);

                tpManagers.Add(currTPMan);
            }

            // -----------------------------
            // genetic loop
            // -----------------------------

            int    iterations = 0;
            double bestScore  = 0;

            bool lastImproved = false;

            while (true)
            {
                CLI.Manager.PrintNote("Starting Training Session (" + bestScore.ToString("F8") + ")");

                // reset the system

                wallet.Reset();
                Trading.Manager.UpdateWallet();

                Data.Store.ClearTickerData();
                Utility.TradeTracker.ClearAll();

                // add first 10000

                int  startIndex = 0;
                long endTime    = allTickers.First().Timestamp + 25200; // 7 hours

                for (int i = 0; i < allTickers.Count; i++)
                {
                    if (allTickers[i].Timestamp > endTime)
                    {
                        break;
                    }
                    AddTicker(allTickers[i], null, false);
                    startIndex = i;
                }

                // rebuild TPManagers

                for (int i = 0; i < tpManagers.Count; i++)
                {
                    tpManagers[i].Reset();
                }



                // add all tickers

                for (int i = startIndex; i < allTickers.Count; i++)
                {
                    AddTicker(allTickers[i], tpManagers, true);

                    if (i % 100 == 0)
                    {
                        float percent = (((float)i) / allTickers.Count) * 100;
                        Console.WriteLine("Progress: " + percent.ToString("F2") + "%");
                    }
                }

                // score performance, revert or save

                IDictionary <string, PoloniexAPI.WalletTools.IBalance>    balances      = wallet.GetBalancesAsync().Result;
                KeyValuePair <string, PoloniexAPI.WalletTools.IBalance>[] balancesArray = balances.ToArray();

                double btcValue = 0;
                for (int z = 0; z < balancesArray.Length; z++)
                {
                    btcValue += balancesArray[z].Value.BitcoinValue;
                }

                if (btcValue > bestScore)
                {
                    // save result (with optimizer values)

                    // todo:
                    // SaveResultsToFile(btcValue, optimizers);

                    bestScore = btcValue;

                    lastImproved = true;

                    CLI.Manager.PrintNote("New Best: " + bestScore.ToString("F8") + " BTC");
                    Console.WriteLine("Simulation Result: " + bestScore.ToString("F8") + " BTC");
                }
                else
                {
                    // todo: revert optimizers

                    /*
                     * for (int i = 0; i < optimizers.Length; i++) {
                     *  optimizers[i].Revert();
                     * }
                     */
                    lastImproved = false;
                }

                iterations++;

                return;
            }
        }