public void Start() { m_setting = Setting.GetInstance(); if (m_setting.Exchange == null || string.IsNullOrEmpty(m_setting.Parameter.Symbol)) { Console.WriteLine("Does not find setting.xml file. Type any key to exist ..."); Console.Read(); return; } m_mockTrade = m_setting.IsMockTrade; m_exchange = m_setting.Exchange; m_account = new StockAccount(); m_fairValueMgr = FairValueMgr.GetInstance(); m_quoteMgr = QuoteMgr.GetInstance(); m_hedgeMgr = AutoHedgeMgr.GetInstance(); m_quoteParameter = m_setting.Parameter; //Test ExchangeOKDEX okdex = m_exchange as ExchangeOKDEX; string privateKey = m_setting.ExchangeSettingMap["PrivateKey"]; string key = okdex.GetPublicKey(privateKey); //quote logic m_quoteThread = new Thread(() => m_quoteMgr.Start()); m_quoteThread.Start(); //Update fair value logic m_marketDataThread = new Thread(() => m_fairValueMgr.Start(m_setting.Parameter.Symbol)); m_marketDataThread.Start(); //Hedge logic m_hedgeThread = new Thread(() => m_hedgeMgr.Start()); m_hedgeThread.Start(); }
public void Start(string symbol) { MyMarketData = new MarketData(symbol); ExchangeOKEX okexExchange = new ExchangeOKEX(); ExchangeBinance binanceExchange = new ExchangeBinance(); while (!m_marketMaker.Stop()) { ExchangeBase exchange = m_marketMaker.GetExchange(); QuoteMgr quoteMgr = m_marketMaker.GetQuoteMgr(); AutoResetEvent quoteEventObj = quoteMgr.GetQuoteEventObject(); //Get reference price MarketData okexMarketData = new MarketData(symbol); okexExchange.UpdateMarketData(okexMarketData); MarketData binanceMarketData = new MarketData(symbol); binanceExchange.UpdateMarketData(binanceMarketData); if (okexMarketData.DepthData.Mid > 0 && binanceMarketData.DepthData.Mid > 0) { //calculate fair value and market state double avgMidPrice = (okexMarketData.DepthData.Mid + binanceMarketData.DepthData.Mid) / 2; MyMarketData.FairValue = avgMidPrice; if (Math.Abs(okexMarketData.DepthData.Mid / binanceMarketData.DepthData.Mid - 1) >= 0.01) { MyMarketData.IsNormal = false; } else { MyMarketData.IsNormal = true; } //Get current price exchange.UpdateMarketData(MyMarketData); //If not mock trade. Execute anti-arbitrage check if (exchange.GetType() != typeof(ExchangeMock)) { } MyMarketData.DepthData.UpdateTime = DateTime.Now; quoteEventObj.Set(); } Thread.Sleep(50); } }