private void StartGetData() { ServerLog.ClearList(); for (int i = 0; i < SiArray.Count; i++) { if (!RunningST.ContainsKey(SiArray[i].Market)) { string market = SiArray[i].Market; string dllname = TradeSDK.getDllName(market); Assembly assembly = Assembly.Load(TradeSDK.getSDK(dllname)); Type ClassTradeAPI = assembly.GetType(string.Format("{0}.TradeAPI", dllname.Substring(0, dllname.Length - 4))); Object ObjectTradeAPI = assembly.CreateInstance(ClassTradeAPI.FullName, true, BindingFlags.CreateInstance, null, new object[] { }, null, null); BaseTradeAPI bta = ((BaseTradeAPI)ObjectTradeAPI); RunningST.Add(market, bta); TraderAccount sa = new TraderAccount(bta); bta.queryDataArrival += queryArrival; if (showTradeView) { CurrentBalances.Insert(market); Trader trader = Trader.CreateTrader(sa); traders.Add(market, trader); frm_TradeMonitor tradeform = new frm_TradeMonitor(trader); tradeform.tradePolicyResult_Arrival += PolicyResultArraival; tradeform.tradeFunPolicyResult_Arrival += PolicyFunArraival; tradeform.Left = 0; tradeform.Top = 3 * logform.Height; tradeform.Show(); tradeform.ConnectTrade(); } } foreach (var st in RunningST) { BaseTradeAPI bta = ((BaseTradeAPI)st.Value); if (bta.AbortedWs) { bta.InitWebSocket(); } if (bta.market == SiArray[i].Market) { if (!bta.DicSi.ContainsKey(SiArray[i].Code)) { bta.DicSi.Add(SiArray[i].Code, SiArray[i]); CurrentTicker.Insert(SiArray[i].Market + SiArray[i].Code); } bta.Subscribe(SiArray[i].Code, "marketDepth", SiArray[i].Type); bta.Subscribe(SiArray[i].Code, "trade", SiArray[i].Type); if (showTradeView) { bta.Subscribe(SiArray[i].Code, "order", SiArray[i].Type); bta.Subscribe(SiArray[i].Code, "account", SiArray[i].Type); if (SiArray[i].Type != "spot") { bta.Subscribe(SiArray[i].Code, "position", SiArray[i].Type); } } } } } }
void QueryZiJin(JObject jomsg) { JObject ZiJinInfo = jomsg; JArray zijins = (JArray)ZiJinInfo["data"]; List <CurrentBanalce> cbs = new List <CurrentBanalce>(); for (int i = 0; i < zijins.Count; i++) { if (System.Convert.ToDecimal(zijins[i]["balance"].ToString()) > 0) { StockZiJing zj = new StockZiJing(); zj.Equity = zijins[i]["available"].ToString().Substring(0, 10); zj.Instrument_id = zijins[i]["currency"].ToString(); zj.Frozen = zijins[i]["frozen"].ToString().Substring(0, 10); zj.Total_avail_balance = zijins[i]["balance"].ToString().Substring(0, 10); bool find = false; for (int m = 0; m < ZiJinList.Count; m++) { if (zj.Instrument_id == ZiJinList[m].Instrument_id) { find = true; ZiJinList[m] = zj; break; } } if (!find) { ZiJinList.Add(zj); } CurrentBanalce cb = new CurrentBanalce(); cb.Code = zj.Instrument_id; cb.Ava = System.Convert.ToDouble(zj.Equity); cb.Total = System.Convert.ToDouble(zj.Total_avail_balance); cb.Frz = System.Convert.ToDouble(zj.Frozen); cbs.Add(cb); } } CurrentBalances.Update(market, cbs); RaiseZiJin(ZiJinList); }
protected override void dataReceiver_Data_Arrival(object sender, StockData.TickData tickdata) { if (tickdata.Code == string.Empty) { IsSimulateFinished = true; HistoryFinished(); LiveDataUpdate(tickdata); } else { if (currentDay != tickdata.Time.Date) { loseArr.Add(loseCount); currentDay = tickdata.Time.Date; this.Reset(); } currentTick = tickdata; SecondTick = CurrentStockData.GetTick(SecondSi); liveDataProcessor.ReceiveTick(tickdata); if (this.SecInfo.isLive(tickdata.Time.TimeOfDay)) { if (IsSimulateFinished || (!IsSimulateFinished && !tickdata.IsReal)) { if (CanOpen()) { if (Math.Abs((tickdata.Time - SecondTick.Time).Seconds) <= 1) { double a = tickdata.Bid - SecondTick.Ask; double b = (tickdata.Bid * parameter.Fee + SecondTick.Ask * parameter.SecondFee + tickdata.Last * parameter.Lirun); double c = SecondTick.Bid - tickdata.Ask; double d = (tickdata.Ask * parameter.Fee + SecondTick.Bid * parameter.SecondFee + tickdata.Last * parameter.Lirun); List <CurrentBanalce> ACBS = CurrentBalances.getCurrentBalance(SecInfo.Market); List <CurrentBanalce> BCBS = CurrentBalances.getCurrentBalance(parameter.SecondMarket); foreach (CurrentBanalce aCBS in ACBS) { if (aCBS.Code.ToUpper() == parameter.Code.ToUpper() || aCBS.Code.ToUpper() == parameter.Code.ToUpper() + "-SPOT") { if (aCBS.Ava > parameter.Qty * 2) { Code1AtoB = true; } else { Code1AtoB = false; } } if (aCBS.Code.ToUpper() == parameter.Code2.ToUpper() || aCBS.Code.ToUpper() == parameter.Code2.ToUpper() + "-SPOT") { if (aCBS.Ava > parameter.Qty * tickdata.Last * 2) { Code2BtoA = true; } else { Code2BtoA = false; } } } foreach (CurrentBanalce bCBS in BCBS) { if (bCBS.Code.ToUpper() == parameter.Code.ToUpper() || bCBS.Code.ToUpper() == parameter.Code.ToUpper() + "-SPOT") { if (bCBS.Ava > parameter.Qty * 2) { Code1BtoA = true; } else { Code1BtoA = false; } } if (bCBS.Code.ToUpper() == parameter.Code2.ToUpper() || bCBS.Code.ToUpper() == parameter.Code2.ToUpper() + "-SPOT") { if (bCBS.Ava > parameter.Qty * tickdata.Last * 2) { Code2AtoB = true; } else { Code2AtoB = false; } } } if (a > b) { if (Code1AtoB && Code2AtoB) { firstDeal = false; secondDeal = false; string tr = DateTime.Now.ToString("yyyyMMddHHmmss") + Rand6Int().ToString(); OpenArgs oa = new OpenArgs( tickdata.Bid - parameter.HuaDian, parameter.qty, OpenType.Sell, SecInfo, tickdata, tr); OpenDelete od = new OpenDelete(OpenThread); od.BeginInvoke(oa, null, null); OpenArgs oa2 = new OpenArgs( SecondTick.Ask + parameter.HuaDian, parameter.qty, OpenType.Buy, SecondSi, SecondTick, tr); OpenDelete od2 = new OpenDelete(OpenThread); od2.BeginInvoke(oa2, null, null); } else { loseCount += 1; } } if (c > d) { if (Code1BtoA && Code2BtoA) { firstDeal = false; secondDeal = false; string tr = DateTime.Now.ToString("yyyyMMddHHmmss") + Rand6Int().ToString(); OpenArgs oa = new OpenArgs( tickdata.Ask + parameter.HuaDian, parameter.qty, OpenType.Buy, SecInfo, tickdata, tr); OpenDelete od = new OpenDelete(OpenThread); od.BeginInvoke(oa, null, null); OpenArgs oa2 = new OpenArgs( SecondTick.Bid - parameter.HuaDian, parameter.qty, OpenType.Sell, SecondSi, SecondTick, tr); OpenDelete od2 = new OpenDelete(OpenThread); od2.BeginInvoke(oa2, null, null); } else { loseCount += 1; } } } } } } LiveDataUpdate(tickdata); } }
void QueryZiJin(JObject jomsg) { JObject ZiJinInfo = jomsg; JArray ziJins = (JArray)ZiJinInfo["data"]; if (ziJins != null) { List <CurrentBanalce> cbs = new List <CurrentBanalce>(); for (int j = 0; j < ziJins.Count; j++) { if (ziJins[j]["type"].ToString() == "spot") { JArray zijins = (JArray)ziJins[j]["list"]; for (int i = 0; i < zijins.Count; i++) { bool find = false; int index = 0; for (int m = 0; m < cbs.Count; m++) { if (cbs[m].Code == zijins[i]["currency"].ToString()) { find = true; index = m; break; } } if (find) { if (zijins[i]["type"].ToString() == "trade") { cbs[index].Ava = System.Convert.ToDouble(zijins[i]["balance"].ToString()); } else { cbs[index].Frz = System.Convert.ToDouble(zijins[i]["balance"].ToString()); } cbs[index].Total = cbs[index].Ava + cbs[index].Frz; } else { CurrentBanalce cb = new CurrentBanalce(); if (zijins[i]["type"].ToString() == "trade") { cb.Ava = System.Convert.ToDouble(zijins[i]["balance"].ToString()); cb.Code = zijins[i]["currency"].ToString(); cb.Frz = 0; cb.Total = cb.Ava; } else { cb.Ava = 0; cb.Code = zijins[i]["currency"].ToString(); cb.Frz = System.Convert.ToDouble(zijins[i]["balance"].ToString()); cb.Total = cb.Frz; } cbs.Add(cb); } } } } for (int i = 0; i < cbs.Count(); i++) { if (cbs[i].Total == 0) { cbs.RemoveAt(i); i--; } } CurrentBalances.Update(market, cbs); List <StockZiJing> ZiJinList = new List <StockZiJing>(); for (int i = 0; i < cbs.Count; i++) { StockZiJing szj = new StockZiJing(); szj.Instrument_id = cbs[i].Code; szj.Total_avail_balance = cbs[i].Total.ToString(); szj.Frozen = cbs[i].Frz.ToString(); szj.Equity = cbs[i].Ava.ToString(); ZiJinList.Add(szj); } RaiseZiJin(ZiJinList); } }