public static List <CoinConfig> Load() { try { string conFilePath = AppDomain.CurrentDomain.BaseDirectory + "CoinConfigs.json"; if (!File.Exists(conFilePath)) { throw (new Exception("CoinConfigs配置文件不存在")); } StreamReader sr = new StreamReader(conFilePath, Encoding.Default); string jsonStr = sr.ReadToEnd(); var list = JsonConvert.DeserializeObject <List <CoinConfig> >(jsonStr); if (list != null && list.Count > 0) { Log4NetUtility.Info("加载系统配置", "已成功加载系统配置CoinConfigs"); return(list); } else { throw (new Exception("CoinConfigs配置文件异常")); } } catch (Exception e) { Log4NetUtility.Error("加载系统配置CoinConfigs", "加载配置异常:" + Utils.Exception2String(e)); throw (e); } }
public Ticker GetTicker(string platform, string symbol) { try { switch (platform) { //case "OK": // return GetTicker_OK(symbol); //case "BA": // return GetDepth_BA(symbol, size); case "HB": //return GetTicker_OK(symbol); case "FC": return(GetTicker_FC(symbol)); default: return(null); } } catch (Exception e) { Log4NetUtility.Error("GetTicker", Utils.Exception2String(e)); DbHelper.CreateInstance().AddError("GetTicker", e); return(null); } }
public List <Kline> GetKline(string platform, string symbol, string resolution, int limit = 60) { try { switch (platform) { //case "OK": // return GetTicker_OK(symbol); //case "BA": // return GetDepth_BA(symbol, size); case "HB": //return GetTicker_OK(symbol); case "FC": return(GetKline_FC(symbol, resolution, limit)); default: return(null); } } catch (Exception e) { Log4NetUtility.Error("GetKline", Utils.Exception2String(e)); DbHelper.CreateInstance().AddError("GetKline", e); return(null); } }
public bool Connnet() { try { websocket = new WebSocketSharp.WebSocket(WEBSOCKET_API); websocket.OnError += (sender, e) => { Console.WriteLine("Error:" + e.Exception.Message.ToString()); Log4NetUtility.Debug("OnError", e.Exception.Message); }; websocket.OnOpen += OnOpened; websocket.OnClose += Websocket_Closed;; websocket.OnMessage += ReceviedMsg; websocket.ConnectAsync(); while (!websocket.IsAlive) { Console.WriteLine("Waiting WebSocket connnet......"); Thread.Sleep(1000); } heartBeatTimer.Elapsed += new System.Timers.ElapsedEventHandler(heatBeat); //heartBeatTimer.Start(); } catch (Exception ex) { Console.WriteLine("Exception:" + ex.Message); Log4NetUtility.Error("WebSocketApi_OK", Utils.Exception2String(ex)); } return(true); }
public string userinfo() { string result = ""; try { var method = "GET"; //string timeSpamt = GetDateTime(); //var sign = CreateSign(method, USERINFO_URL, secret_key, timeSpamt, null); //WebHeaderCollection header = new WebHeaderCollection(); //header.Add("FC-ACCESS-KEY", api_key); //header.Add("FC-ACCESS-SIGNATURE", sign); //header.Add("FC-ACCESS-TIMESTAMP", timeSpamt); Dictionary <string, object> paras = new Dictionary <string, object>(); paras.Add("AccessKey", api_key); paras.Add("SignatureMethod", "HmacSHA256"); paras.Add("SignatureVersion", "V1.0"); paras.Add("Timestamp", DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss")); paras.Add("Signature", null); int statusCode; result = RequestDataSync($"{url_prex}{USERINFO_URL}", method, paras, null, out statusCode); } catch (Exception e) { Log4NetUtility.Error("userinfo", Utils.Exception2String(e)); Log4NetUtility.Error("userinfo", result); DbHelper.CreateInstance().AddError("userinfo", e); } return(result); }
public string order_info(string order_id) { string result = ""; try { var method = "GET"; string timeSpamt = GetDateTime(); // 构造参数签名 //Dictionary<string, object> paras = new Dictionary<string, object>(); //if (!string.IsNullOrEmpty(order_id)) //{ // paras.Add("order_id", order_id); //} var sign = CreateSign(method, ORDERS_INFO_URL + "/" + order_id, secret_key, timeSpamt, null); WebHeaderCollection header = new WebHeaderCollection(); header.Add("FC-ACCESS-KEY", api_key); header.Add("FC-ACCESS-SIGNATURE", sign); header.Add("FC-ACCESS-TIMESTAMP", timeSpamt); int statusCode; result = RequestDataSync($"{url_prex}{ORDERS_INFO_URL}/{order_id}", method, null, header, out statusCode); return(result); } catch (Exception e) { Log4NetUtility.Error("order_info", result); throw e; } }
private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { string reportStr = ""; try { var account = robotTrade.CurrentAccount; var ticker = robotMarket.GetTicker(info.Symbol); if (DateTime.Now.Minute == 0) { //整点日志 reportStr = GetReport(info, account, ticker, true); } else { //分钟日志 reportStr = GetReport(info, account, ticker, false); } Log4NetUtility.Info("ReportDetail ", reportStr); } catch (Exception ex) { Log4NetUtility.Error("ReportTimer", Utils.Exception2String(ex)); } }
public int ClearCurrentOrders(string symbol) { try { switch (platform) { case "OK": //return GetTicker_OK(symbol); //case "BA": // return GetDepth_BA(symbol, size); case "HB": //return GetTicker_OK(symbol); case "FC": return(ClearCurrentOrders_FC(symbol)); default: return(-1); } } catch (Exception e) { Log4NetUtility.Error("ClearOrders", Utils.Exception2String(e)); DbHelper.CreateInstance().AddError("ClearOrders", e); return(-1); } }
public string trade(string symbol, string side, string type, string price, string amount) { string result = ""; try { var method = "POST"; string timeSpamt = GetDateTime(); // 构造参数签名 Dictionary <string, object> paras = new Dictionary <string, object>(); if (!string.IsNullOrEmpty(amount)) { paras.Add("amount", amount); } if (!string.IsNullOrEmpty(price)) { paras.Add("price", price); } if (!string.IsNullOrEmpty(side)) { paras.Add("side", side); } if (!string.IsNullOrEmpty(symbol)) { paras.Add("symbol", symbol); } if (!string.IsNullOrEmpty(type)) { paras.Add("type", type); } if (type == "market") { paras.Remove("price"); } var sign = CreateSign(method, TRADE_URL, secret_key, timeSpamt, paras); WebHeaderCollection header = new WebHeaderCollection(); header.Add("FC-ACCESS-KEY", api_key); header.Add("FC-ACCESS-SIGNATURE", sign); header.Add("FC-ACCESS-TIMESTAMP", timeSpamt); int statusCode; result = RequestDataSync($"{url_prex}{TRADE_URL}", method, paras, header, out statusCode); return(result); } catch (Exception e) { Log4NetUtility.Error("userinfo", Utils.Exception2String(e)); Log4NetUtility.Error("userinfo", result); DbHelper.CreateInstance().AddError("userinfo", e); } return(result); }
/// <summary> /// 全仓挂单 /// </summary> private void HangOrders() { try { #region 新缓存列表 newSessionOrders List <Order> newSessionOrders = new List <Order>(); decimal newFloatPrice = GetStandardPrice(GetTicker().last); info.floatPrice = newFloatPrice; info.buyOrderCount = info.sellOrderCount = info.OrderQty; //info.ShockCount_tmp = info.UpCount_tmp = info.DownCount_tmp = 0; for (int i = 1; i <= info.buyOrderCount; i++) { decimal orderprice = newFloatPrice - i * info.SpanPrice; Order order = new Order() { price = orderprice, amount = info.TradeQty, type = "buy" }; newSessionOrders.Add(order); } for (int i = 1; i <= info.sellOrderCount; i++) { decimal orderprice = newFloatPrice + i * info.SpanPrice; Order order = new Order() { price = orderprice, amount = info.TradeQty, type = "sell" }; newSessionOrders.Add(order); } #endregion #region 挂单、缓存 Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); robotSession.ClearSessionAllOrders(); foreach (var addOrder in newSessionOrders) { TradeOrder(addOrder); Thread.Sleep(250); } //Parallel.ForEach(newSessionOrders, addOrder => //{ // TradeOrder(addOrder); //}); stopwatch.Stop(); Log4NetUtility.Info("HangOrders", robotSession.LogSring()); Log4NetUtility.Info("HangOrders", $"Order中间价:{newFloatPrice}。交易总用时(毫秒):{stopwatch.ElapsedMilliseconds}"); #endregion } catch (Exception e) { Log4NetUtility.Error("HangOrders", Utils.Exception2String(e)); DbHelper.CreateInstance().AddError("HangOrders", e); } }
public static string Model2Json(T model) { try { return(JsonConvert.SerializeObject(model)); } catch (Exception e) { Log4NetUtility.Error("ModelHelper", Utils.Exception2String(e)); //Log4NetUtility.Error("ModelHelper", str); DbHelper.CreateInstance().AddError("ModelHelper", e); return(""); } }
/// <summary> /// 批量获取用户订单 /// </summary> /// <param name="type">查询类型 0:未成交,未成交 1:完全成交,已撤销</param> /// <param name="symbol">btc_usd: 比特币 ltc_usd: 莱特币</param> /// <param name="order_id">订单ID(多个订单ID中间以","分隔,一次最多允许查询50个订单)</param> /// limit=20&states=submitted,partial_filled&symbol=ethusdt /// <returns></returns> public string orders_info(string limit, string states, string symbol, string after, string before) { string result = ""; try { var method = "GET"; string timeSpamt = GetDateTime(); // 构造参数签名 Dictionary <string, object> paras = new Dictionary <string, object>(); if (!string.IsNullOrEmpty(after)) { paras.Add("after", after); } if (!string.IsNullOrEmpty(before)) { paras.Add("before", before); } if (!string.IsNullOrEmpty(limit)) { paras.Add("limit", limit); } if (!string.IsNullOrEmpty(states)) { paras.Add("states", states); } if (!string.IsNullOrEmpty(symbol)) { paras.Add("symbol", symbol); } var sign = CreateSign(method, ORDERS_INFO_URL, secret_key, timeSpamt, paras); //var sign = CreateSign(method, "/v2/orders?limit=20&states=submitted&symbol=ethusdt", secret_key, timeSpamt, null); WebHeaderCollection header = new WebHeaderCollection(); header.Add("FC-ACCESS-KEY", api_key); header.Add("FC-ACCESS-SIGNATURE", sign); header.Add("FC-ACCESS-TIMESTAMP", timeSpamt); int statusCode; result = RequestDataSync($"{url_prex}{ORDERS_INFO_URL}?{ConvertQueryString(paras, true)}", method, null, header, out statusCode); //result = RequestDataSync("https://api.fcoin.com/v2/orders?limit=20&states=submitted&symbol=ethusdt", method, null, header, out statusCode); return(result); } catch (Exception e) { Log4NetUtility.Error("orders_info", result); throw e; } }
public void AddDepth(depth depth) { try { using (var db = new MarkeDBEntities()) { db.depth.Add(depth); db.SaveChanges(); } } catch (Exception e) { Log4NetUtility.Error("AddDepth", e.Message); } }
private void AddOrUpdateOrders2DB(List <Order> orders) { try { List <order> list = new List <order>(); foreach (var order in orders) { AddOrUpdateOrder2DB(order); } } catch (Exception e) { Log4NetUtility.Error("AddOrUpdateOrders2DB", Utils.Exception2String(e)); DbHelper.CreateInstance().AddError("AddOrUpdateOrders2DB", e); } }
public Orders GetOrders_FC(string order_id) { try { string JsonStr = restApi_FC.order_info(order_id); var data = ModelHelper <API.Rest.FCoin.orderInfo> .Json2Model(JsonStr); Orders order = new Orders(data); return(order); } catch (Exception e) { Log4NetUtility.Error("GetOrderInfo_FC", Utils.Exception2String(e)); return(new Orders()); } }
private void DoPlan(long dotime) { #region ObjectLock if (planDoTime == -1) { lock (planObjectLock) { if (planDoTime == -1) { planDoTime = dotime; } } } #endregion if (planDoTime == dotime) { try { GetData(); // 当前订单不在缓存中 robotSession.CheckLostOrders(currentOrder); //遍历缓存订单对比当前订单,处理成交订单 if (filledOrders.Count != 0) { UpdateFilledSessionOrders(); robotSession.FilledSessionOrders(FilledSessionOrders, currentOrder); } if (CheckLittleTrade(info.ResetTimes, info.ShockTimes)) { CurrentEvent?.Invoke(null, new CurrentEventArgs(CurrentEventType.LittleTrade, null, null)); } LimitFilledSessionOrders(); } #region catch finally catch (Exception e) { ////DbHelper.CreateInstance().AddErrInfo("DoPlan", e); Log4NetUtility.Error("DoPlan", Utils.Exception2String(e)); DbHelper.CreateInstance().AddError("DoPlan", e); } finally { planDoTime = -1; } #endregion } }
public string candles(string symbol, string resolution, int limit) { string result = ""; try { HttpUtilManager httpUtil = HttpUtilManager.getInstance(); string url = $"{CANDLES_URL}/{resolution}/{symbol}"; result = httpUtil.requestHttpGet(url_prex, url, "limit = " + limit); } catch (Exception e) { Log4NetUtility.Error("RestApi_BC", result); throw e; } return(result); }
/// <summary> /// 行情 /// </summary> /// <param name="symbol">btc_usd:比特币 ltc_usd :莱特币</param> /// <returns></returns> public string ticker(string symbol) { string result = ""; try { HttpUtilManager httpUtil = HttpUtilManager.getInstance(); result = httpUtil.requestHttpGet(url_prex, TICKER_URL + symbol, ""); } catch (Exception e) { Log4NetUtility.Error("RestApi_BC", result); throw e; } return(result); }
public Orders GetOrders_FC(string limit, string states, string symbol, string after = null, string before = null) { try { string JsonStr = restApi_FC.orders_info(limit, states, symbol, after, before); var data = ModelHelper <API.Rest.FCoin.ordersInfo> .Json2Model(JsonStr); Orders order = new Orders(data); return(order); } catch (Exception e) { Log4NetUtility.Error("GetOrderInfo_FC", Utils.Exception2String(e)); DbHelper.CreateInstance().AddError("GetOrderInfo_FC", e); return(new Orders()); } }
/// <summary> /// 发送get请求得到响应内容 /// </summary> /// <param name="url_prex">url前缀</param> /// <param name="url">请求路径url</param> /// <param name="param">请求参数键值对</param> /// <returns>响应字符串</returns> public String requestHttpGet(String url_prex, String url, String param) { String responseContent = ""; HttpWebResponse httpWebResponse = null; StreamReader streamReader = null; try { url = url_prex + url; if (param != null && !param.Equals("")) { url = url + "?" + param; } HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url); httpWebRequest.Method = "GET"; httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); streamReader = new StreamReader(httpWebResponse.GetResponseStream()); if (streamReader == null) { return(""); } responseContent = streamReader.ReadToEnd(); if (responseContent == null || "".Equals(responseContent)) { return(""); } } catch (Exception e) { Log4NetUtility.Error("requestHttpGet", responseContent); throw e; } finally { if (httpWebResponse != null) { httpWebResponse.Close(); } if (streamReader != null) { streamReader.Close(); } } return(responseContent); }
public string depht(string symbol, string level = "full") { string result = ""; try { HttpUtilManager httpUtil = HttpUtilManager.getInstance(); string url = $"{DEPTH_URL}/{level}/{symbol}"; result = httpUtil.requestHttpGet(url_prex, url, ""); } catch (Exception e) { Log4NetUtility.Error("RestApi_FC", result); throw e; } return(result); }
public static T Json2Model(string str) { try { if (string.IsNullOrWhiteSpace(str) || str.Contains("html")) { return(default(T)); } return(JsonConvert.DeserializeObject <T>(str)); } catch (Exception e) { Log4NetUtility.Error("ModelHelper", Utils.Exception2String(e)); Log4NetUtility.Error("ModelHelper", str); DbHelper.CreateInstance().AddError("ModelHelper", e); return(default(T)); } }
private void RobotHFT_CurrentEvent(object sender, CurrentEventArgs e) { try { //Log4NetUtility.Debug($"CurrentEvent:{e.EventType} {e.OrderList?.FirstOrDefault()?.type} {e.OrderList?.FirstOrDefault()?.price.ToString("0.0000")}"); switch (e.EventType) { case CurrentEventType.OrderFilled: var filledorder = (Order)sender; var neworder = e.OrderList.FirstOrDefault(); if (filledorder != null && neworder != null) { CurrentOrderFilled(filledorder, neworder); } break; case CurrentEventType.LostOrders: var lostOrders = e.OrderList; if (lostOrders != null) { CurrentLostOrders(lostOrders); } break; case CurrentEventType.DirtyOrders: var dirtyOrders = e.OrderList; if (dirtyOrders != null) { CurrentDirtyOrders(dirtyOrders); } break; case CurrentEventType.LittleTrade: ReSetOrder(true); break; } } catch (Exception ex) { Log4NetUtility.Error("CurrentEvent", Utils.Exception2String(ex)); } }
//private void AddOrder2DB(Order order) //{ // try // { // order orderdb = new order(); // orderdb.amount = Math.Round(order.amount, 4); // orderdb.createdate = order.create_date; // orderdb.fees = order.fill_fees; // orderdb.orderid = order.order_id; // orderdb.platform = platform; // orderdb.price = Math.Round(order.price, 4); // orderdb.side = order.type; // orderdb.status = order.status; // orderdb.symbol = order.symbol; // orderdb.date = DateTime.Now.ToString("yyyyMMddHHmmss"); // using (var db = new CoinTradeDBEntities()) // { // db.order.Add(orderdb); // db.SaveChanges(); // } // } // catch (Exception e) // { // Log4NetUtility.Error("AddOrder2DB", Utils.Exception2String(e)); // } //} private void AddOrders2DB(List <Order> orders, string symbol) { try { List <order> list = new List <order>(); var filledlist = filledOrdersDic[symbol]; foreach (var order in orders) { if (!filledlist.Exists(a => a.order_id == order.order_id)) { AddOrder2DB(order); } } } catch (Exception e) { Log4NetUtility.Error("AddOrders2DB", Utils.Exception2String(e)); DbHelper.CreateInstance().AddError("AddOrders2DB", e); } }
private void RobotHFT_SessionEvent(object sender, SessionEventArgs e) { try { Log4NetUtility.Debug($"SessionEvent:{e.EventType} {e.OrderList?.FirstOrDefault()?.type} {e.OrderList?.FirstOrDefault()?.price.ToString("0.0000")}"); switch (e.EventType) { case SessionEventType.Normal: break; case SessionEventType.DoubleOrder: CancelOrders(e.OrderList); break; case SessionEventType.ErrPrice: CancelOrders(e.OrderList); break; case SessionEventType.MoreOrder: CancelOrders(e.OrderList); break; case SessionEventType.LessOrder: TradeOrder(CreateLessOrder()); break; case SessionEventType.LostOrder: TradeOrder(e.OrderList?.FirstOrDefault()); break; case SessionEventType.Reset: ReSetOrder(); break; } } catch (Exception ex) { Log4NetUtility.Error("SessionEvent", Utils.Exception2String(ex)); } }
public bool ReConnnet() { try { isConnning = true; heartBeatTimer.Close(); Console.WriteLine($"Websocket_Closed"); //OnClosed?.Invoke(null, null); ResetSocket(); countConnect++; reConnnetCount = 0; while (!websocket.IsAlive) { Thread.Sleep(1000); reConnnetCount++; if (reConnnetCount < 60 && websocket.ReadyState == WebSocketState.Connecting) { Console.WriteLine($"Waiting WebSocket ReConnnet..{reConnnetCount}...."); continue; } if (reConnnetCount > 60 || websocket.ReadyState == WebSocketState.Closed || websocket.ReadyState == WebSocketState.Closing) { ResetSocket(); reConnnetCount = 0; Console.WriteLine($"websocket.ReadyState: {websocket.ReadyState}"); Console.WriteLine($"Waiting WebSocket ReConnnet..{reConnnetCount}...."); } } heartBeatTimer.Elapsed += new System.Timers.ElapsedEventHandler(heatBeat); } catch (Exception ex) { Console.WriteLine("Exception:" + ex.Message); Log4NetUtility.Error("WebSocketApi_FC", Utils.Exception2String(ex)); } isConnning = false; return(true); }
public Account GetAccount(string platform) { try { switch (platform) { case "HB": case "FC": return(GetAccount_FC()); default: return(null); } } catch (Exception e) { Log4NetUtility.Error("GetAccount", Utils.Exception2String(e)); DbHelper.CreateInstance().AddError("GetAccount", e); return(null); } }
public static Config LoadConfig() { try { Log4NetUtility.Info("加载系统配置", "开始加载系统配置"); string conFilePath = AppDomain.CurrentDomain.BaseDirectory + "config.json"; if (!File.Exists(conFilePath)) { throw (new Exception("配置文件不存在")); } StreamReader sr = new StreamReader(conFilePath, Encoding.Default); string jsonStr = sr.ReadToEnd(); Config SysConfig = JsonConvert.DeserializeObject <Config>(jsonStr); Log4NetUtility.Info("加载系统配置", "已成功加载系统配置"); return(SysConfig); } catch (Exception e) { Log4NetUtility.Error("加载系统配置", "加载配置异常:" + Utils.Exception2String(e)); throw (e); } }
public string userinfo() { string result = ""; try { var method = "GET"; string timeSpamt = GetDateTime(); var sign = CreateSign(method, USERINFO_URL, secret_key, timeSpamt, null); WebHeaderCollection header = new WebHeaderCollection(); header.Add("FC-ACCESS-KEY", api_key); header.Add("FC-ACCESS-SIGNATURE", sign); header.Add("FC-ACCESS-TIMESTAMP", timeSpamt); int statusCode; result = RequestDataSync($"{url_prex}{USERINFO_URL}", method, null, header, out statusCode); } catch (Exception e) { Log4NetUtility.Error("userinfo", result); throw e; } return(result); }
private void AddOrUpdateOrder2DB(Order order) { try { order orderdb = new order(); orderdb.orderid = order.order_id; orderdb.amount = Math.Round(order.amount, 4); orderdb.createdate = order.create_date; orderdb.fees = order.fill_fees; orderdb.platform = platform; orderdb.price = Math.Round(order.price, 4); orderdb.side = order.type; orderdb.status = order.status; orderdb.symbol = order.symbol; orderdb.date = DateTime.Now.ToString("yyyyMMddHHmmss"); DbHelper.CreateInstance().AddUpdateOrder(orderdb); } catch (Exception e) { Log4NetUtility.Error("AddOrUpdateOrder2DB", Utils.Exception2String(e)); DbHelper.CreateInstance().AddError("AddOrUpdateOrder2DB", e); } }