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