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); }
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; }
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); }
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); }
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); }
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 { } } } }
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); } }