Exemple #1
0
 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);
            }
        }
Exemple #4
0
        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);
            }
        }