Ejemplo n.º 1
0
        private void LimitFilledSessionOrders()
        {
            FilledSessionOrders.RemoveAll(a => a == null);
            int filledSessionOrdersCount = FilledSessionOrders.Count;

            if (filledSessionOrdersCount > 2000)
            {
                FilledSessionOrders.RemoveRange(0, filledSessionOrdersCount - 2000);
            }
        }
Ejemplo n.º 2
0
 private void UpdateFilledSessionOrders()
 {
     Parallel.ForEach(filledOrders, (order, loop) =>
     {
         if (order == null)
         {
             return;
         }
         if (!FilledSessionOrders.Exists(a => a != null && a.order_id == order.order_id))
         {
             if (order == null)
             {
                 return;
             }
             FilledSessionOrders.Add(order);
             decimal fee = order.fill_fees;
             if (order.type == "buy")
             {
                 fee = fee * order.price;
             }
             info.total_fees += fee;
         }
     });
 }
Ejemplo n.º 3
0
 /// <summary>
 /// 是否调参(交易过少)
 /// </summary>
 /// <param name="ResetTimes"></param>
 /// <param name="ShockTimes"></param>
 /// <returns></returns>
 private bool CheckLittleTrade(List <decimal> ResetTimes, List <decimal> ShockTimes)
 {
     try
     {
         ResetTimes = ResetTimes ?? new List <decimal>();
         ShockTimes = ShockTimes ?? new List <decimal>();
         //已为最低配置,不可调0.25 10
         #region 获取统计数据 resetcount、shockcount
         //默认统计时间5分钟 1->0.5
         int minutes = 5;
         //0.5振幅时统计10钟 0.5->0.25
         if (info.SpanPrice <= info.Open_SpanPrice / 2)
         {
             minutes = 10;
         }
         //小于0.5振幅统计时间15分钟 10P->5P
         if (info.SpanPrice < info.Open_SpanPrice / 3)
         {
             minutes = 15;
         }
         //时间点minu
         decimal minu       = Utils.GetUtcTimeDec(-minutes * 60);
         int     resetcount = ResetTimes.Count(a => a > minu);
         int     shockcount = ShockTimes.Count(a => a > minu);
         #endregion
         //1、若有平仓。不调参
         if (resetcount > 0)
         {
             return(false);
         }
         //2、刚开始运行时间不足
         if (ShockTimes.Count == 0 || ShockTimes.Min() > minu)
         {
             return(false);
         }
         //3、若震荡大于阈值,不算过小。不调参
         if (minutes == 5 && shockcount >= 2)
         {
             return(false);
         }
         if (minutes == 10 && shockcount >= 5)
         {
             return(false);
         }
         if (minutes == 15 && shockcount >= 7)
         {
             return(false);
         }
         #region 获取行情数据 maxPrice、minPrice、diff、pdiff
         decimal      diff    = 0;
         decimal      time    = Utils.GetUtcTimeDec(-minutes * 60);
         List <Order> oreders = FilledSessionOrders.Where(a => a.create_date >= time).ToList();
         if (oreders == null || oreders.Count == 0)
         {
             diff = 0;
             Log4NetUtility.Info("行情平缓", $"{minutes}分钟内,{resetcount}次平仓,{shockcount}次震荡,SpanPrice:{info.SpanPrice}");
             return(true);
         }
         else
         {
             decimal maxPrice = oreders.Max(a => a.price);
             decimal minPrice = oreders.Min(a => a.price);
             diff = maxPrice - minPrice;                     //价差
         }
         decimal pdiff = info.SpanPrice * info.OrderQty * 2; //包差
         #endregion
         //4、行情价差小于等于包范围的1/3时。调参
         if (diff <= pdiff / 3)
         {
             if (info.SpanPrice >= 0.25m)//非最小振幅
             {
                 //降振幅
                 //info.SpanPrice = info.SpanPrice / 2;
                 //if (info.SpanPrice == 0.5m)//0.5->0.25时先增加包数
                 //{
                 //    result.PacketNumResult = AnalyzePropertyResultEnum.Up;
                 //    result.TradeQTYResult = AnalyzePropertyResultEnum.Down;
                 //}
                 Log4NetUtility.Info("行情平缓", string.Format("{0}分钟内,{1}次平仓,{2}次震荡,行情价差{3},包差{4},SpanPrice:{5}", minutes, resetcount, shockcount, diff, pdiff, info.SpanPrice));
                 return(true);
             }
             //else//最小振幅0.25.降包、增量
             //{
             //result.PacketNumResult = AnalyzePropertyResultEnum.Down;
             //result.TradeQTYResult = AnalyzePropertyResultEnum.Up;
             //}
             //Log4NetUtility.Info("行情平缓", string.Format("{0}分钟内,{1}次平仓,{2}次震荡,行情价差{3},包差{4},SpanPrice:{5}", minutes, resetcount, shockcount, diff, pdiff, info.SpanPrice));
         }
     }
     catch (Exception e)
     {
         Log4NetUtility.Error("行情平缓", Utils.Exception2String(e));
         DbHelper.CreateInstance().AddError("CheckLittleTrade", e);
     }
     return(false);
 }