// where exchange like "BINANCE" // where symbol like "ETHUSDT" private void BuySellIndicatorTask(string exchange, string symbol) { //Console.WriteLine("DateTime,Exchange,Symbol,C60,C30,C15,C5,C1,Indicators,Bid,Ask"); Console.WriteLine("DateTime,Exchange,Symbol,C60,C30,C5,C1,Indicators,Bid,Ask"); string prevIndicators = "........."; string prevSignal = ""; while (true) { var now = DateTime.Now; var timeString = now.ToString("yyyy-MM-dd HH:mm:ss"); var c60 = CandlesMACD(exchange, symbol, 60); var c30 = CandlesMACD(exchange, symbol, 30); //var c15 = CandlesMACD(exchange, symbol, 15); var c5 = CandlesMACD(exchange, symbol, 5); var c1 = CandlesMACD(exchange, symbol, 1); // TODO: Also use spikes in "bar volume" to indicate significant bars (i.e. beginning/end of longer trends) //var indicators = GetIndicators(c1.Last(), c5.Last(), c15.Last(), c30.Last(), c60.Last()); var indicators = GetIndicators(c1.Last(), c5.Last(), c30.Last(), c60.Last()); var signal = GetSignal(indicators); var ticker = m_api[exchange].GetTicker(symbol); //Console.WriteLine("{0} [{1,-8} {2}] |{3,6:0.00} |{4,6:0.00} |{5,6:0.00} |{6,6:0.00} |{7,6:0.00} | {8} {9} b:{10} a:{11}", timeString, exchange, symbol, c60.Last(), c30.Last(), c15.Last(), c5.Last(), c1.Last(), indicators, signal, ticker.Bid, ticker.Ask); //Console.WriteLine("{0},{1},{2},{3:0.00},{4:0.00},{5:0.00},{6:0.00},{7:0.00},{8},{9},{10}", timeString, exchange, symbol, c60.Last(), c30.Last(), c15.Last(), c5.Last(), c1.Last(), indicators, ticker.Bid, ticker.Ask); Console.WriteLine("{0},{1},{2},{3:0.000},{4:0.000},{5:0.000},{6:0.000},{7},{8},{9},{10}", timeString, exchange, symbol, c60.Last(), c30.Last(), c5.Last(), c1.Last(), indicators, ticker.Bid, ticker.Ask, signal); // If the indicators have changed, publish a Prowl message if (signal != prevSignal && signal != "(no bias)") { var shortTimeString = now.ToString("MMM-dd HH:mm:ss"); if (m_notify) m_prowl.Send(signal, string.Format("{0} {1}:{2}", shortTimeString, ticker.Bid, ticker.Ask)); } prevIndicators = indicators; prevSignal = signal; Thread.Sleep(20000); } }
private void ScalperTask(XSymbol xs, OrderSide initSide, decimal initPrice, decimal amount, decimal scalp) { Console.WriteLine("\n===== Starting Scalper {0} init_price:{1:0.00000000} amount:{2} scalp:{3:0.00000000} =====", xs, initPrice, amount, scalp); var api = m_api[xs.Exchange]; string strategyId = "scalper"; ExchangeOrderResult working; if (initSide == OrderSide.Sell) { working = m_om.PlaceOrder(api, xs.Symbol, initSide, initPrice + scalp, amount, strategyId); } else { working = m_om.PlaceOrder(api, xs.Symbol, initSide, initPrice - scalp, amount, strategyId); } Console.WriteLine("\n NEW working order >>> {0} ", working.ToStr()); int count = 0; while (true) { Thread.Sleep(m_testOnly ? 25000 : 15000); var t = api.GetTicker(xs.Symbol); //if (working.Result == ExchangeAPIOrderResult.Filled) // If our working order has been filled if (m_orders.Where(o => o.OrderId == working.OrderId).Count() == 0) { var buySell = working.IsBuy ? "BOT" : "SOLD"; var prowlEvt = string.Format("Fill {0} {1} {2:0.00000000}", working.Symbol, buySell, working.Price); if (working.IsBuy) { working = m_om.PlaceOrder(api, xs.Symbol, OrderSide.Sell, initPrice + scalp, amount, strategyId); } else { working = m_om.PlaceOrder(api, xs.Symbol, OrderSide.Buy, initPrice - scalp, amount, strategyId); } Console.WriteLine("\n*** {0} ***\n NEW working order >>> {1}", prowlEvt, working.ToStr()); m_prowl.Send(prowlEvt, working.ToMsgStr()); } else if (Math.Abs(t.Last - initPrice) > 2 * scalp) // if price breakout of range { string dir = "up"; if (t.Last < initPrice) { dir = "down"; } if (working.Side() == initSide) { m_om.Cancel(working); } initPrice = t.Last; if (initSide == OrderSide.Sell) { working = m_om.PlaceOrder(api, xs.Symbol, initSide, initPrice + scalp, amount, strategyId); } else { working = m_om.PlaceOrder(api, xs.Symbol, initSide, initPrice - scalp, amount, strategyId); } Console.WriteLine("\n*** Price Breakout {0} {1} ***\n NEW working order >>> {2} ", xs.Symbol, dir, working.ToStr()); //m_prowl.Send(string.Format("Breakout {0} {1}", working.Symbol, dir), working.ToMsgStr()); } if (count % 4 == 0) { Console.Write("."); } //if (count % 10 == 0) Console.WriteLine("{0}", working.ToStr()); } }