Example #1
0
        public void Publish(MarketTickData marketTickData)
        {
            var serialize  = new BinarySerializer();
            var msgInBytes = serialize.Serialize(marketTickData);

            base.Publish(msgInBytes);
        }
Example #2
0
        void OnRealTimeTickDataUpdate(string sender, MarketTickData message)
        {
            //TODO: This depends on the mode of when the trade signal should be run

            if (m_TradingModel.IsDaily && !m_IsDailyTradeSignalRan)
            {
                m_IsDailyTradeSignalRan = true;
                RunTradeSignal();
            }

            if (m_SignalState != TradingModelSignalState.TradeSignal)
            {
                //signal is already generated, Run Entry/Exit
                if (m_SignalState == TradingModelSignalState.TradeEntry)
                {
                    m_TradeEntryInstruction = m_TradingModel.TradeEntry();

                    if (m_TradeEntryInstruction != null)
                    {
                        //add the bar index for entry position
                        m_TradeEntryInstruction.BarIndex = m_CurrentBarIndex;
                        m_SignalState = TradingModelSignalState.TradeExit;

                        //add Trade entry to the money manager
                        m_moneyMgr.AddTradeEntry(m_TradeEntryInstruction);
                    }
                }

                if (m_SignalState == TradingModelSignalState.TradeExit)
                {
                    m_TradeExitInstruction = m_TradingModel.TradeExit(m_TradeEntryInstruction);


                    if (m_TradeExitInstruction != null)
                    {
                        //log the bar index for exit signal
                        m_TradeExitInstruction.BarIndex = m_CurrentBarIndex;

                        //add Trade exit to the money manager
                        m_moneyMgr.AddTradeExit(m_TradeExitInstruction);

                        //unsubscribe from all events
                        m_BarDataHandler.BarDataCreatedCompleted       -= OnBarDataCreatedCompleted;
                        m_TickDataHandler.OnRealTimeTickDataUpdate     -= OnRealTimeTickDataUpdate;
                        m_TickDataHandler.OnRealTimeTickDataDateChange -= OnRealTimeTickDataDateChange;

                        if (CallbackTradePositionCloseReceived != null)
                        {
                            CallbackTradePositionCloseReceived.Invoke(m_ref, m_TradeEntryInstruction, m_TradeExitInstruction);
                        }
                    }
                }
            }

            if (CallbackTickDataUpdateReceived != null)
            {
                CallbackTickDataUpdateReceived.Invoke(m_jobId, message, m_CurrentBarIndex);
            }
        }
Example #3
0
        private static void Trade2()
        {
            // get BTC balance

            // higest growth rate curr buys lowest growth rate
            MarketTickData mdBTC_AUD = BTCMarketsHelper.GetMarketTick($"BTC/AUD");
            MarketTickData mdETH_AUD = BTCMarketsHelper.GetMarketTick($"ETH/AUD");
            MarketTickData mdETH_BTC = BTCMarketsHelper.GetMarketTick($"ETH/BTC");

            BotLogger.WriteLine($",{mdBTC_AUD.bestAsk}, {mdETH_AUD.bestAsk}, {mdETH_BTC.bestAsk}");
        }
Example #4
0
 public void AddRegressionJobTickData(int regressionJobId, int barIndex, MarketTickData tickData)
 {
     datsys.RegressionJobTickDatas.Add(new RegressionJobTickData
     {
         RegressionJobId = regressionJobId,
         BarIndex        = barIndex,
         Ask             = (float?)(tickData.Ask),
         AskQty          = (float?)(tickData.AskQty),
         Bid             = (float?)tickData.Bid,
         BidQty          = (float?)tickData.BidQty
     });
     datsys.SaveChanges();
 }
Example #5
0
        private void RunReceive(MarketTickData tickData)
        {
            try
            {
                m_currentTickIndex++;
                m_TickDatas.TryAdd(m_currentTickIndex, tickData);


                TickDataUpdateType tickDataUpdateType = GetUpdateType(tickData);
                if (tickDataUpdateType.HasFlag(TickDataUpdateType.Ask))
                {
                    m_TickDataHandlers[TickDataUpdateType.Ask].Add(tickData.Ask);
                    m_TickDataHandlers[TickDataUpdateType.AskQty].Add(tickData.AskQty);
                }
                if (tickDataUpdateType.HasFlag(TickDataUpdateType.Bid))
                {
                    m_TickDataHandlers[TickDataUpdateType.Bid].Add(tickData.Bid);
                    m_TickDataHandlers[TickDataUpdateType.BidQty].Add(tickData.BidQty);
                }
                if (tickDataUpdateType.HasFlag(TickDataUpdateType.SettlementPrice))
                {
                    m_TickDataHandlers[TickDataUpdateType.SettlementPrice].Add(tickData.SettlementPrice);
                    m_TickDataHandlers[TickDataUpdateType.SettlementQty].Add(tickData.SettlementQty);
                }

                if (OnRealTimeTickDataUpdate != null)
                {
                    OnRealTimeTickDataUpdate.Invoke("realtimetickdatahandler", tickData);
                }

                if (m_PreviousTickData == null)
                {
                    m_PreviousTickData = tickData;
                }

                if (tickData.DataDate != m_PreviousTickData.DataDate)
                //change of date
                {
                    if (OnRealTimeTickDataDateChange != null)
                    {
                        OnRealTimeTickDataDateChange.Invoke("realtimetickdatahandler", m_PreviousTickData.DataDate,
                                                            tickData.DataDate);
                    }
                }

                m_PreviousTickData = tickData;    //set the prev tick data from the current
            }
            catch (Exception ex)
            {
            }
        }
Example #6
0
        private TickDataUpdateType GetUpdateType(MarketTickData tickData)
        {
            TickDataUpdateType tickDataUpdateType = TickDataUpdateType.None;

            if (tickData.Ask > 0 && tickData.Ask < 2000000)
            {
                tickDataUpdateType = TickDataUpdateType.Ask | TickDataUpdateType.AskQty;
            }

            if (tickData.Bid > 0 && tickData.Bid < 2000000)
            {
                tickDataUpdateType = tickDataUpdateType | TickDataUpdateType.Bid | TickDataUpdateType.BidQty;
            }

            if (tickData.SettlementPrice > 0 && tickData.SettlementPrice < 2000000)
            {
                tickDataUpdateType = tickDataUpdateType | TickDataUpdateType.SettlementPrice | TickDataUpdateType.SettlementQty;
            }

            return(tickDataUpdateType);
        }
Example #7
0
        void m_TickDataHandler_OnRealTimeTickDataUpdate(string sender, MarketTickData tickData)
        {
            lock (m_lock)
            {
                m_TickDataHandler.PauseReceive();

                if (tickData.Ask > 0 && tickData.Ask < 2147483648)
                {
                    m_SimpleBarDataHandlers[BarDataType.Ask].Add(tickData.Timestamp, tickData.Ask, tickData.DataDateTime);
                }

                if (tickData.AskQty > 0 && tickData.AskQty < 2147483648)
                {
                    m_SimpleBarDataHandlers[BarDataType.AskQty].Add(tickData.Timestamp, tickData.AskQty, tickData.DataDateTime);
                }

                if (tickData.Bid > 0 && tickData.Bid < 2147483648)
                {
                    m_SimpleBarDataHandlers[BarDataType.Bid].Add(tickData.Timestamp, tickData.Bid, tickData.DataDateTime);
                }

                if (tickData.BidQty > 0 && tickData.BidQty < 2147483648)
                {
                    m_SimpleBarDataHandlers[BarDataType.BidQty].Add(tickData.Timestamp, tickData.BidQty, tickData.DataDateTime);
                }

                if (tickData.SettlementPrice > 0 && tickData.SettlementPrice < 2147483648)
                {
                    m_SimpleBarDataHandlers[BarDataType.SettlementPrice].Add(tickData.Timestamp,
                                                                             tickData.SettlementPrice, tickData.DataDateTime);
                }

                if (tickData.SettlementQty > 0 && tickData.SettlementQty < 2147483648)
                {
                    m_SimpleBarDataHandlers[BarDataType.SettlementQty].Add(tickData.Timestamp, tickData.SettlementQty, tickData.DataDateTime);
                }

                m_TickDataHandler.ResumeReceive();
            }
        }
Example #8
0
        private static void Trade3()
        {
            // Settings
            BTCMarketsHelper.ProfitMargin = 0;

            // Get number of Open Orders
            OpenOrdersHistory = BTCMarketsHelper.OrderOpen(CURRENCY, INSTRUMENT, 10, "1");

            if (OpenOrdersHistory.success && OpenOrdersHistory.orders != null)
            {
                if (OpenOrdersHistory.orders.Length > 1)
                {
                    Console.WriteLine("Open orders are still active...");
                }
                else
                {
                    // get ETH/BTC market data i.e. instrument/currency
                    Console.WriteLine($"Previous Ask Price: {lastETH_BTC}");
                    MarketTickData marketData = BTCMarketsHelper.GetMarketTick($"{INSTRUMENT}/{CURRENCY}");
                    Console.WriteLine($"Current Ask Price: {marketData.bestAsk}");
                    lastETH_BTC = marketData.bestAsk;

                    // get trading data
                    TradingData tradingData = TradingHelper.GetTradingData(marketData);

                    if (lastETH_BTC > 0) // ensure first round is skipped when there is no history
                    {
                        if (marketData.bestAsk > lastETH_BTC)
                        {
                            Console.WriteLine($"Previous Volume (BTC): {lastBTC_Volume}");
                            if (tradingData.BuyVolume > lastBTC_Volume)
                            {
                                Console.WriteLine("ETH has gone stronger. Sell ETH.");
                            }
                        }
                        else if (marketData.bestAsk < lastETH_BTC)
                        {
                            Console.WriteLine("BTC has gone stronger. Buy ETH.");
                            Console.WriteLine($"Previous Buy Volume (ETH): {lastETH_Volume}");
                            Console.WriteLine($"Current Buy volume ({marketData.instrument}): {tradingData.BuyVolume}");
                        }
                    }

                    Console.WriteLine($"Buy price ({marketData.currency}): {tradingData.BuyPrice}");
                    Console.WriteLine($"Sell volume ({marketData.instrument}): {tradingData.SellVolume}");
                    Console.WriteLine($"Sell price ({marketData.currency}): {tradingData.SellPrice}");
                    Console.WriteLine($"Spend total ({marketData.currency}): {tradingData.SpendTotal}");

                    /*
                     * // create orders
                     * CreateOrderData buyOrder = BTCMarketsHelper.CreateNewOrder(marketData.currency, marketData.instrument,
                     *  (long)(tradingData.BuyPrice * ApplicationConstants.NUMERIC_MULTIPLIER),
                     *  (int)(tradingData.BuyVolume * ApplicationConstants.NUMERIC_MULTIPLIER),
                     *  "Bid", "Limit");
                     *
                     * if (buyOrder.success)
                     * {
                     *  CreateOrderData sellOrder = BTCMarketsHelper.CreateNewOrder(marketData.currency, marketData.instrument,
                     *   (long)(tradingData.SellPrice * ApplicationConstants.NUMERIC_MULTIPLIER),
                     *  (int)(tradingData.SellVolume * ApplicationConstants.NUMERIC_MULTIPLIER),
                     *   "Ask", "Limit");
                     *
                     *  if (sellOrder.success)
                     *  {
                     *      // append csv line
                     *      BotLogger.WriteLine($",{tradingData.BuyVolume.ToDecimalString(8)}, {marketData.instrument}, Balance (Unit 2), " +
                     *          $"{tradingData.BuyPrice.ToDecimalString(8)}, {marketData.currency}, {tradingData.SpendTotal.ToDecimalString(8)}, {BTCMarketsHelper.ProfitMargin}%, " +
                     *          $"{tradingData.SellVolume.ToDecimalString(8)}, {tradingData.SellPrice.ToDecimalString(8)}");
                     *  }
                     *  else
                     *  {
                     *      Console.WriteLine(sellOrder.errorMessage);
                     *  }
                     * }
                     * else
                     * {
                     *  Console.WriteLine(buyOrder.errorMessage);
                     * }
                     */
                }
            }
            else
            {
                Console.WriteLine(OpenOrdersHistory.errorMessage);
            }

            Console.WriteLine(CONSOLE_WAITING);
            Console.WriteLine();
        }
Example #9
0
        private static void Trade1()
        {
            // Settings
            BTCMarketsHelper.ProfitMargin = 2;

            // Get number of Open Orders
            OpenOrdersHistory = BTCMarketsHelper.OrderOpen(CURRENCY, INSTRUMENT, 10, "1");

            if (OpenOrdersHistory.success && OpenOrdersHistory.orders != null)
            {
                if (OpenOrdersHistory.orders.Length > 1)
                {
                    Console.WriteLine("Open orders are still active...");
                }
                else
                {
                    // get ETH/BTC market data i.e. instrument/currency
                    MarketTickData marketData = BTCMarketsHelper.GetMarketTick($"{INSTRUMENT}/{CURRENCY}");

                    // get trading data
                    TradingData tradingData = TradingHelper.GetTradingData(marketData, splitProfitMargin: true);

                    Console.WriteLine($"Buy volume ({marketData.instrument}): {tradingData.BuyVolume}");
                    Console.WriteLine($"Buy price ({marketData.currency}): {tradingData.BuyPrice}");
                    Console.WriteLine($"Sell volume ({marketData.instrument}): {tradingData.SellVolume}");
                    Console.WriteLine($"Sell price ({marketData.currency}): {tradingData.SellPrice}");
                    Console.WriteLine($"Spend total ({marketData.currency}): {tradingData.SpendTotal}");

                    // create orders
                    CreateOrderData buyOrder = BTCMarketsHelper.CreateNewOrder(marketData.currency, marketData.instrument,
                                                                               (long)(tradingData.BuyPrice * ApplicationConstants.NUMERIC_MULTIPLIER),
                                                                               (long)(tradingData.BuyVolume * ApplicationConstants.NUMERIC_MULTIPLIER),
                                                                               "Bid", "Limit");

                    if (buyOrder.success)
                    {
                        System.Threading.Thread.Sleep(rnd.Next(1, 10) * 1000);
                        CreateOrderData sellOrder = BTCMarketsHelper.CreateNewOrder(marketData.currency, marketData.instrument,
                                                                                    (long)(tradingData.SellPrice * ApplicationConstants.NUMERIC_MULTIPLIER),
                                                                                    (long)(tradingData.SellVolume * ApplicationConstants.NUMERIC_MULTIPLIER),
                                                                                    "Ask", "Limit");

                        if (sellOrder.success)
                        {
                            // append csv line
                            BotLogger.WriteLine($",{tradingData.BuyVolume}, {marketData.instrument}, Balance (Unit 2), " +
                                                $"{tradingData.BuyPrice}, {marketData.currency}, {tradingData.SpendTotal}, {BTCMarketsHelper.ProfitMargin}%, " +
                                                $"{tradingData.SellVolume}, {tradingData.SellPrice}");
                        }
                        else
                        {
                            Console.WriteLine(sellOrder.errorMessage);
                        }
                    }
                    else
                    {
                        Console.WriteLine(buyOrder.errorMessage);
                    }
                }
            }
            else
            {
                Console.WriteLine(OpenOrdersHistory.errorMessage);
            }

            Console.WriteLine(CONSOLE_WAITING);
            Console.WriteLine();
        }
Example #10
0
 void TickDataSubscriber_OnTickDataReceived(MarketTickData tickData)
 {
     RunReceive(tickData);
 }
Example #11
0
 private static void OnTickDataUpdateReceived(int jobid, MarketTickData tickData, int barIndex)
 {
     m_JobStat.AddMarketTickData(barIndex, tickData);
 }
 public void AddMarketTickData(int barIndex, MarketTickData tickData)
 {
     m_tickDatas.Add(new Tuple <int, MarketTickData>(barIndex, tickData));
 }