static void Main(string[] args) { var factory = new RealtimeSourceFactory(); factory.ErrorHandlers += (error) => { Console.WriteLine("Error: {0} Socket Error = {1}", error.Message, error.SocketError); }; Console.WriteLine("1) RealtimeExecution sample"); Console.WriteLine("2) RealtimeTicker sample"); Console.WriteLine("3) RealtimeOrderBook sample"); switch (GetCh()) { case '1': RealtimeExecutionSample(factory); break; case '2': RealtimeTickerSample(factory); break; case '3': RealtimeOrderBookSample(factory); break; } Console.ReadLine(); _disposables.Dispose(); Console.ReadLine(); }
static IDisposable SubscribeExecutionSource(RealtimeSourceFactory factory, BfProductCode productCode) { var source = factory.GetExecutionSource(productCode); return(source.Subscribe(exec => { Console.WriteLine($"{exec.ExecutedTime} P:{exec.Price} A:{exec.Side} B:{exec.Size}"); })); }
static IDisposable SubscribeTickerSource(RealtimeSourceFactory factory, BfProductCode productCode) { var source = factory.GetTickerSource(productCode); return(source.Subscribe(ticker => { Console.WriteLine($"{ticker.Timestamp} P:{ticker.LastTradedPrice} A:{ticker.BestAsk} B:{ticker.BestBid}"); })); }
private static void Main(string[] args) { var factory = new RealtimeSourceFactory(); //var disp = SubscribeTickerSource(factory, ProductCode.BTCUSD); var disp = SubscribeExecutionSource(factory, ProductCode.FXBTCJPY); Console.ReadLine(); disp.Dispose(); }
private static async Task RealtimeTickerSample(RealtimeSourceFactory factory) { var tickerSource = await factory.GetTickerSource(ProductCode.BTCJPY); tickerSource.Subscribe(ticker => { Console.WriteLine($"{ticker.ProductCode} {ticker.Timestamp.ToLocalTime()} {ticker.BestBid} {ticker.BestAsk} {ticker.LastTradedPrice}"); }); }
static void Main(string[] args) { var factory = new RealtimeSourceFactory(); //SubscribeTickerSource(factory, BfProductCode.BTCUSD).AddTo(_disposables); //SubscribeExecutionSource(factory, BfProductCode.FXBTCJPY).AddTo(_disposables); SubscribeOrderbookSource(factory, BfProductCode.FXBTCJPY).AddTo(_disposables); Console.ReadLine(); _disposables.Dispose(); }
static void RealtimeExecutionSample(RealtimeSourceFactory factory) { factory.GetExecutionSource(BfProductCode.FXBTCJPY).Subscribe(tick => { Console.WriteLine("{0} {1} {2} {3} {4} {5}", tick.ExecutionId, tick.Side, tick.Price, tick.Size, tick.ExecutedTime.ToLocalTime(), tick.ChildOrderAcceptanceId); }).AddTo(_disposables); }
public void Initialize() { if (Client == null) { Client = new BitFlyerClient(); } if (RealtimeSource == null) { RealtimeSource = new RealtimeSourceFactory(Client); } RealtimeSource.AvailableMarkets.ForEach(productCode => { _markets.Add(productCode, new BfTradingMarket(this, productCode)); }); }
private static async Task Main(string[] args) { var factory = new RealtimeSourceFactory(); factory.ErrorHandlers += (error) => { Console.WriteLine("Error: {0} Socket Error = {1}", error.Message, error.SocketError); }; await RealtimeTickerSample(factory); Console.ReadLine(); }
static void Main(string[] args) { // ログファイル出力設定 // Time / JSON LoadRunsettings(args[0]); var key = Properties["ApiKey"]; var secret = Properties["ApiSecret"]; _client = new BitFlyerClient(key, secret); _factory = new RealtimeSourceFactory(key, secret); _factory.MessageReceived += OnRealtimeMessageReceived; _factory.Error += (error) => Console.WriteLine("Error: {0} Socket Error = {1}", error.Message, error.SocketError); _factory.GetTickerSource(ProductCode).Subscribe(ticker => { _ticker = ticker; //Console.WriteLine($"Ask:{_ticker.BestAsk} Bid:{_ticker.BestBid}"); }).AddTo(_disposables); _factory.GetChildOrderEventsSource().Subscribe(OnChildOrderEvent).AddTo(_disposables); _factory.GetParentOrderEventsSource().Subscribe(OnParentOrderEvent).AddTo(_disposables); while (true) { Console.WriteLine("========================================================================"); Console.WriteLine("C)hild order >"); Console.WriteLine("P)arent order >"); Console.WriteLine(""); Console.WriteLine("Q)uit"); Console.WriteLine("========================================================================"); switch (GetCh()) { case 'C': ChildOrderMain(); break; case 'P': ParentOrderMain(); break; case 'Q': _disposables.Dispose(); return; } } }
static IDisposable SubscribeOrderbookSource(RealtimeSourceFactory factory, BfProductCode productCode) { var source = factory.GetOrderBookSource(productCode); return(source.Select(orderBook => orderBook.GetSnapshot(15)).Subscribe(obs => { foreach (var ask in obs.Asks.Reverse()) { Console.WriteLine($"Ask: P:{ask.Price} S:{ask.Size}"); } Console.WriteLine($"Mid: P:{obs.MidPrice}"); foreach (var bid in obs.Bids.Reverse()) { Console.WriteLine($"Bid: P:{bid.Price} S:{bid.Size}"); } })); }
static void RealtimeTickerSample(RealtimeSourceFactory factory) { factory.GetTickerSource(BfProductCode.FXBTCJPY).Subscribe(ticker => { Console.WriteLine("{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11}", ticker.ProductCode, ticker.Timestamp.ToLocalTime(), ticker.TickId, ticker.BestBid, ticker.BestAsk, ticker.BestBidSize, ticker.BestAskSize, ticker.TotalBidDepth, ticker.TotalAskDepth, ticker.LastTradedPrice, ticker.Last24HoursVolume, ticker.VolumeByProduct); }).AddTo(_disposables); }
static void RealtimeOrderBookSample(RealtimeSourceFactory factory) { var left = Console.CursorLeft; var top = Console.CursorTop; factory.GetOrderBookSource(BfProductCode.FXBTCJPY) .Select(orderBook => orderBook.GetSnapshot(15)) // Take 15 orders from 300 orders .Subscribe(obs => { Console.SetCursorPosition(left, top); foreach (var ask in obs.Asks.Reverse()) { Console.WriteLine($"{ask.Size.ToString("##0.00000000#")} {ask.Price} "); } Console.WriteLine($"Mid: {obs.MidPrice}"); foreach (var bid in obs.Bids.Reverse()) { Console.WriteLine($" {bid.Price} {bid.Size.ToString("##0.00000000#")}"); } }).AddTo(_disposables); }
public RealtimeOhlcSourceFactory(RealtimeSourceFactory realtimeFactory, ExecutionCachedSourceFactory historicalFactory) { _realtimeFactory = realtimeFactory; _historicalFactory = historicalFactory; }
public BfTradingAccount(BitFlyerClient client, RealtimeSourceFactory realtimeSource) { Client = client; RealtimeSource = realtimeSource; }