Beispiel #1
0
        /// <summary>
        /// 一定時間経過した注文を強制決済する
        /// </summary>
        /// <returns></returns>
        protected async Task OrderStopLoss(OrderSide trend)
        {
            try
            {
                var now = DateTime.Now;
                IEnumerable <Trap> list;

                //if (trend == OrderSide.BUYSELL)
                //{
                // トレンドなし
                list = trapList.Where(e => (now - e.Date).TotalMinutes > StopLossMinute && !e.IsStopLoss);
                //}
                //else
                //{
                //    // トレンドがある場合、反対の注文も損切りする
                //    list = trapList.Where(e => (now - e.Date).TotalMinutes > StopLossMinute && !e.IsStopLoss || e.Side != trend);
                //}
                double totalCancelSize = 0;
                foreach (var item in list)
                {
                    var cancelSize = item.ExecutedSize;
                    if (item.Side == OrderSide.SELL)
                    {
                        // 売りの時はマイナスする
                        cancelSize = cancelSize *= -1;
                    }
                    Console.WriteLine($"{StopLossMinute} 分経過のため決済:{item.OpenPrice}");
                    totalCancelSize += cancelSize;
                    item.IsStopLoss  = true;
                    Cancel(item.OrderId);
                }
                if (totalCancelSize != 0)
                {
                    totalCancelSize = NonApiUtility.ToRoundDown(totalCancelSize, OrderFigures);
                    Console.WriteLine("決済:" + totalCancelSize);
                    if (totalCancelSize > 0)
                    {
                        await client.Sell(totalCancelSize);
                    }
                    else
                    {
                        await client.Buy(-totalCancelSize);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                Logger.ErrorLog(ex.StackTrace);
            }
        }
Beispiel #2
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);
     }
 }