Example #1
0
 // Parent orders
 public void Insert(BfProductCode productCode, BfParentOrderRequest req, BfParentOrderResponse resp)
 {
     ParentOrders.Add(new DbParentOrder(productCode, req, resp));
     for (int childOrderIndex = 0; childOrderIndex < req.Parameters.Count; childOrderIndex++)
     {
         ChildOrders.Add(new DbChildOrder(req, resp, childOrderIndex));
     }
 }
Example #2
0
 /// <summary>
 /// 指定範囲の未消化の注文をキャンセルする
 /// </summary>
 /// <param name="minPrice"></param>
 /// <param name="maxPrice"></param>
 protected void CancelOrderAsync(double minPrice, double maxPrice)
 {
     if (ParentOrders != null)
     {
         var list = ParentOrders.Where(e => e.Price > minPrice && e.Price < maxPrice && e.Size == e.OutstandingSize);
         foreach (var item in list)
         {
             Client.AddCancelParentOrderList(item);
         }
     }
     else
     {
         Console.WriteLine("注文情報取得失敗のため、注文のキャンセルをしません");
     }
 }
Example #3
0
 /// <summary>
 /// 一定時間経過した注文を強制決済する
 /// </summary>
 /// <returns></returns>
 protected async Task OrderStopLoss(int stopLossMinute, OrderSide side)
 {
     try
     {
         if (ParentOrders != null)
         {
             var    now             = DateTime.Now;
             var    list            = ParentOrders.Where(e => (now - e.Date).TotalMinutes > stopLossMinute && e.Side == side);
             double totalCancelSize = 0;
             foreach (var item in list)
             {
                 var cancelSize = item.Size - item.OutstandingSize;
                 if (!IsBuyOrder(item))
                 {
                     // 売りの時はマイナスする
                     cancelSize = cancelSize *= -1;
                 }
                 Console.WriteLine(stopLossMinute + "分経過のため決済:" + item.Price + ":" + cancelSize);
                 totalCancelSize += cancelSize;
             }
             if (totalCancelSize != 0)
             {
                 totalCancelSize = NonApiUtility.ToRoundDown(totalCancelSize, OrderFigures);
                 Console.WriteLine("決済:" + totalCancelSize);
                 if (totalCancelSize > 0)
                 {
                     await Client.Sell(totalCancelSize);
                 }
                 else
                 {
                     await Client.Buy(-totalCancelSize);
                 }
             }
             foreach (var item in list)
             {
                 Client.AddCancelParentOrderList(item);
             }
         }
         else
         {
             Console.WriteLine("注文情報取得失敗のため、強制決済をしません");
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.StackTrace);
     }
 }
Example #4
0
 /// <summary>
 /// IFDで買い建ての注文を削除する
 /// 決済はしないので注意
 /// 値段でのフィルタもしていないので注意
 /// </summary>
 /// <returns></returns>
 protected void BuyOrderForceCancel(double minPrice)
 {
     if (ParentOrders != null)
     {
         var list = ParentOrders.Where(e => e.Price > minPrice && e.Side == OrderSide.BUYSELL);
         foreach (var item in list)
         {
             Console.WriteLine("買い建て注文を強制キャンセル:" + item.Price);
             Client.AddCancelParentOrderList(item);
         }
     }
     else
     {
         Console.WriteLine("注文情報取得失敗のため、注文のキャンセルをしません");
     }
 }
Example #5
0
 /// <summary>
 /// 一定時間経過した注文の取消を行う
 /// </summary>
 /// <returns></returns>
 protected void OrderCancel(int cancelMinute, OrderSide side)
 {
     if (ParentOrders != null)
     {
         var now  = DateTime.Now;
         var list = ParentOrders.Where(e => (now - e.Date).TotalMinutes > cancelMinute && e.Side == side);
         foreach (var item in list)
         {
             if (item.Size == item.OutstandingSize)
             {
                 Console.WriteLine(cancelMinute + "分経過のためキャンセル:" + item.Price);
                 Client.AddCancelParentOrderList(item);
             }
         }
     }
     else
     {
         Console.WriteLine("注文情報取得失敗のため、注文のキャンセルをしません");
     }
 }
Example #6
0
 public DbParentOrder FindParentOrder(BfProductCode productCode, string acceptanceId) => ParentOrders.Find(productCode, acceptanceId);
Example #7
0
 // EF Core 3.0 bugs cause conflicts System.Linq.Async
 public IQueryable <DbParentOrder> GetParentOrders() => ParentOrders.AsQueryable();