コード例 #1
0
        public override CheDanArgs PolicyCheDan(KeCheDetail kcd)
        {
            CheDanArgs cda = new CheDanArgs();

            cda.Tsopt = TradeSendOrderPriceType.Limit;
            TickData tick = CurrentStockData.GetTick(kcd.Si);

            if (kcd.UnDealQty >= kcd.Si.MinQty)
            {
                if (kcd.OverTime())
                {
                    if (kcd.OpenType == OpenType.Buy)
                    {
                        decimal newPrice = (decimal)(Math.Floor(tick.Ask / SecInfo.PriceJingDu) * SecInfo.PriceJingDu) + (decimal)parameter.HuaDian;
                        if ((decimal)kcd.OrderPrice < newPrice)
                        {
                            cda.Cancel        = true;
                            cda.ZhuiDan       = true;
                            cda.NewOrderPrice = (double)newPrice;
                        }
                    }
                    else if (kcd.OpenType == OpenType.Sell)
                    {
                        decimal newPrice = (decimal)(Math.Floor(tick.Bid / SecInfo.PriceJingDu) * SecInfo.PriceJingDu) - (decimal)parameter.HuaDian;
                        if ((decimal)kcd.OrderPrice > newPrice)
                        {
                            cda.Cancel        = true;
                            cda.ZhuiDan       = true;
                            cda.NewOrderPrice = (double)newPrice;
                        }
                    }
                }
            }
            else
            {
                if (kcd.Si.Key == SecInfo.Key)
                {
                    firstDeal = true;
                }
                if (kcd.Si.Key == SecondSi.Key)
                {
                    secondDeal = true;
                }
            }

            return(cda);
        }
コード例 #2
0
 private void ProcessSaveData(TickData td)
 {
     CurrentStockData.Update(td.SecInfo, td);
     da.SendTick(td);
     if (LastStockTime.ContainsKey(td.SecInfo.Key))
     {
         LastStockTime[td.SecInfo.Key] = td.Time.TimeOfDay.ToString();
     }
     else
     {
         LastStockTime.Add(td.SecInfo.Key, td.Time.TimeOfDay.ToString());
     }
     if (SaveData)
     {
         _dataQueue.Enqueue(td);
     }
     ReceiveTickCount += 1;
 }
コード例 #3
0
        public virtual CheDanArgs PolicyCheDan(KeCheDetail kcd)
        {
            CheDanArgs cda  = new CheDanArgs();
            TickData   tick = CurrentStockData.GetTick(kcd.Si);

            if (kcd.OverTime())
            {
                if (kcd.TradeType == PolicyTradeType.Open) //入场单
                {
                    cda.Cancel  = true;
                    cda.ZhuiDan = false;
                }
                else//出场单
                {
                    cda.Cancel        = true;
                    cda.ZhuiDan       = true;
                    cda.NewOrderPrice = tick.Last;
                }
            }
            return(cda);
        }
コード例 #4
0
        public override CheDanArgs PolicyCheDan(KeCheDetail kcd)
        {
            CheDanArgs cda  = new CheDanArgs();
            TickData   tick = CurrentStockData.GetTick(kcd.Si);

            if (kcd.OverTime())
            {
                if (kcd.OpenType == OpenType.Buy)
                {
                    cda.Cancel        = true;
                    cda.ZhuiDan       = true;
                    cda.NewOrderPrice = tick.Ask;
                }
                else
                {
                    cda.Cancel        = true;
                    cda.ZhuiDan       = true;
                    cda.NewOrderPrice = tick.Bid;
                }
            }
            return(cda);
        }
コード例 #5
0
        public override CheDanArgs PolicyCheDan(KeCheDetail kcd)
        {
            CheDanArgs cda = new CheDanArgs();

            cda.Tsopt = TradeSendOrderPriceType.Limit;
            TickData tick = CurrentStockData.GetTick(kcd.Si);

            if (kcd.OverTime())
            {
                if ((kcd.OpenType == OpenType.KaiDuo || kcd.OpenType == OpenType.PingKong) && kcd.OrderPrice != tick.Ask)
                {
                    cda.Cancel        = true;
                    cda.ZhuiDan       = true;
                    cda.NewOrderPrice = tick.Ask;
                }
                else if ((kcd.OpenType == OpenType.KaiKong || kcd.OpenType == OpenType.PingDuo) && kcd.OrderPrice != tick.Bid)
                {
                    cda.Cancel        = true;
                    cda.ZhuiDan       = true;
                    cda.NewOrderPrice = tick.Bid;
                }
            }
            return(cda);
        }
コード例 #6
0
        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)
                {
                    currentDay = tickdata.Time.Date;
                    this.Reset();
                }
                if (tickdata.Last == 0)
                {
                    return;
                }

                currentTick = tickdata;
                eosusdt     = CurrentStockData.GetTick(eosusdtsi);
                eosbtc      = CurrentStockData.GetTick(eosbtcsi);

                liveDataProcessor.ReceiveTick(tickdata);
                if (this.SecInfo.isLive(tickdata.Time.TimeOfDay))
                {
                    if (IsSimulateFinished || (!IsSimulateFinished && !tickdata.IsReal))
                    {
                        if (Math.Abs((tickdata.Time - eosbtc.Time).Seconds) <= 1 && Math.Abs((tickdata.Time - eosusdt.Time).Seconds) <= 1 && Math.Abs((eosusdt.Time - eosbtc.Time).Seconds) <= 1)
                        {
                            if (CanOpen())
                            {
                                double a = eosusdt.Bid - tickdata.Ask * eosbtc.Ask;
                                double b = tickdata.Bid * eosbtc.Bid - eosusdt.Ask;
                                double ChengBenAndLiRun = (eosusdt.Last) * (0.0006 + 0.0002);
                                if (a > ChengBenAndLiRun)
                                {
                                    Console.WriteLine(string.Format("{3}-a开仓,时间:{0},价格A:{1},成本C:{2}", DateTime.Now.ToLongTimeString(), a, ChengBenAndLiRun, SecInfo.Code + "%" + eosusdtsi.Code + "%" + eosbtc.Code));
                                    //EosBtcStatus = false;
                                    //OpenArgs oa = new OpenArgs(
                                    //            eosbtc.Ask,
                                    //            parameter.qty,
                                    //            OpenType.Buy,
                                    //            eosbtcsi,
                                    //            eosbtc,
                                    //            "");
                                    //OpenDelete od = new OpenDelete(OpenThread);
                                    //od.BeginInvoke(oa, null, null);
                                }
                                if (b > ChengBenAndLiRun)
                                {
                                    Console.WriteLine(string.Format("{3}-b开仓,时间:{0},价格B:{1},成本C:{2}", DateTime.Now.ToLongTimeString(), b, ChengBenAndLiRun, SecInfo.Code + "%" + eosusdtsi.Code + "%" + eosbtc.Code));
                                    //EosBtcStatus = false;
                                    //OpenArgs oa = new OpenArgs(
                                    //            eosbtc.Bid,
                                    //            parameter.qty,
                                    //            OpenType.Sell,
                                    //            eosbtcsi,
                                    //            eosbtc,
                                    //            "");
                                    //OpenDelete od = new OpenDelete(OpenThread);
                                    //od.BeginInvoke(oa, null, null);
                                }
                            }
                        }
                    }
                }
                LiveDataUpdate(tickdata);
                if (parameter.IsReal)
                {
                    try
                    {
                        UpdateChart();
                    }
                    catch { }
                }
            }
        }
コード例 #7
0
        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);
            }
        }