private void CleanDupOrderAndPending() { try { //Print(">>>CleanDupOrderAndPending<<<<"); var pes = PendingOrders.GroupBy(s => s).SelectMany(grp => grp.Skip(0)); foreach (var pe in pes) { NotiSound(); Print(pe.Label + " " + pe.TradeType + pe.OrderType); //CancelPendingOrderAsync(pe); } var pos = Positions.GroupBy(s => s).SelectMany(grp => grp.Skip(0)); foreach (var po in pos) { NotiSound(); Print("มี PO เกิน>>" + po.Label + " " + po.TradeType); //ClosePositionAsync(po); } //foreach (var po in Positions.Where(x => x.SymbolCode == Symbol.Code && x.Comment == CommentSytem)) //{ // var countPo = Positions.Where(x => x.SymbolCode == Symbol.Code && x.Label.ToLower() == po.Label.ToLower() && x.TradeType == po.TradeType).Count(); // //มี po เกินก็เคลียก่อนเลย // if (countPo > 1) // { // Print("มี position เกิน คือ " + po.Label); // //ClosePosition(po); // } //} //foreach (var pe in PendingOrders.Where(x => x.SymbolCode == Symbol.Code && x.Comment == CommentSytem)) //{ // var Pos = Positions.Where(x => x.SymbolCode == Symbol.Code && x.Label == pe.Label && x.TradeType == pe.TradeType); // var Pes = PendingOrders.Where(x => x.SymbolCode == Symbol.Code && x.Label == pe.Label && x.TradeType == pe.TradeType); // if (Pes.Count() > 1) // { // Print("มี pending เกิน คือ " + pe.Label); // //Notifications.PlaySound("C:\\Windows\\Media\\Alarm10.wav"); // CancelPendingOrder(pe); // } // ////มี po เกินก็เคลียก่อนเลย // //if (Pes.Count() == 1) // //{ // // //มี po แล้ว ก็เคลีย pe นั้นทิ้ง // // if (Pos.Count() >= 1) // // { // // //Print("มี pending เกิน คือ " + pe.Label); // // CancelPendingOrder(pe); // // } // //} //} ////ปิดpending ที่ไม่อยู่ในระยะปัจจุบัน //var lsLess = lsPrice.Where(a => a.Value <= Symbol.Ask).OrderByDescending(o => o.Key).Take(CountPending).ToList(); //var lsMore = lsPrice.Where(a => a.Value >= Symbol.Ask).OrderBy(o => o.Key).Take(CountPending).ToList(); //List<int> lsTrade = new List<int>(); //foreach (var kk in lsLess.OrderBy(o => o.Key)) //{ // lsTrade.Add(kk.Key); //} //foreach (var kk in lsMore.OrderBy(o => o.Key)) //{ // lsTrade.Add(kk.Key); //} ////หา pending ที่ถูกตั้งที่ไม่อยู่ในระยะ //foreach (var pe in PendingOrders.Where(x => x.SymbolCode == Symbol.Code && x.Comment.ToLower() == "cb")) //{ // if (!lsTrade.Contains(Convert.ToInt32(pe.Label))) // { // //Print("มี pending เกินหลุดขอบ คือ " + pe.Label); // CancelPendingOrder(pe); // } //} ////ถ้าไม่มีอะไรซ้ำก็อัพเดต haveDup ว่าไม่มีแล้ว ก็จะหลุด lopp while //haveDup = false; //Print("------------CleanDupOrderAndPending-------------"); } catch (Exception ex) { Print("Error in CleanDupOrderAndPending."); Print(ex.Message); } }