Untitled
unknown
csharp
a year ago
5.7 kB
1
Indexable
Never
5759 line private int GetRandomNumber(int maxValue) { int randomNumber = 0; if (maxValue == 1) { randomNumber = maxValue; } else if (maxValue > 0) { int minValue = (int)maxValue / 2; // half number to create range Random random = new Random(); randomNumber = random.Next(minValue, maxValue + 1); } return randomNumber; } &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 5686 line private bool FlattenEverything(string signalName, bool continueTillZeroRemainingQuantity, Instrument limitToSingleInstrument) { bool positionFound = false; if (!HasActiveMarketOrders() && !RealOrderService.InFlightOrderCache.HasElements()) { CloseAllAccountPendingOrders(signalName, limitToSingleInstrument); if (!IsAccountFlat()) { double unrealizedProfitLoss = 0; OrderAction orderAction = OrderAction.Buy; int positionsCount = RealPositionService.PositionsCount; for (int index = 0; index < positionsCount; index++) { RealPosition position = null; if (RealPositionService.TryGetByIndex(index, out position)) { positionFound = true; if (limitToSingleInstrument == null || position.Instrument == limitToSingleInstrument) { position.StoreState(); unrealizedProfitLoss = GetPositionProfit(position); if (position.MarketPosition == MarketPosition.Long) orderAction = OrderAction.Sell; else if (position.MarketPosition == MarketPosition.Short) orderAction = OrderAction.Buy; if (position.Quantity > 0 && !position.HasStateChanged() && !position.IsFlat()) { if (DebugLogLevel > 0) RealLogger.PrintOutput(signalName + " closing " + position.MarketPosition.ToString() + " " + position.Instrument.FullName + " Quantity=" + position.Quantity + " Profit=" + Convert.ToString(unrealizedProfitLoss), PrintTo.OutputTab1); SubmitMarketOrderChunked(position.Instrument, orderAction, OrderEntry.Automated, position.Quantity, continueTillZeroRemainingQuantity); } if (!continueTillZeroRemainingQuantity) break; } } } } } return positionFound; } &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 5801 line private void SubmitMarketOrderChunked(Instrument instrument, OrderAction orderAction, OrderEntry orderEntry, int quantity, bool continueTillZeroRemainingQuantity = true) { int quantityRemaining = quantity; int chunkedQuantity = 0; int cycleCount = 1; lock (MarketOrderLock) { if (quantityRemaining > 0) { lock (MarketOrderLock) { while (quantityRemaining > 0) { if (quantityRemaining > this.SingleOrderChunkMaxQuantity) { int randomQuantity = GetRandomNumber(this.SingleOrderChunkMaxQuantity); chunkedQuantity = randomQuantity; } else if (quantityRemaining > this.SingleOrderChunkMinQuantity) { int randomQuantity = GetRandomNumber(this.SingleOrderChunkMinQuantity); chunkedQuantity = randomQuantity; } else { chunkedQuantity = quantityRemaining; } quantityRemaining -= chunkedQuantity; if (cycleCount > 1 && SingleOrderChunkDelayMilliseconds > 0) Thread.Sleep(SingleOrderChunkDelayMilliseconds); string orderName = RealOrderService.BuildExitOrderName(); try { Order exitOrder = account.CreateOrder(instrument, orderAction, OrderType.Market, orderEntry, TimeInForce.Day, chunkedQuantity, 0, 0, "", orderName, Core.Globals.MaxDate, null); account.Submit(new[] { exitOrder }); } catch (Exception ex) { RealLogger.PrintOutput("Exception in SubmitMarketOrder:" + ex.Message + " " + ex.StackTrace); //log and ignore exception } cycleCount++; if (!continueTillZeroRemainingQuantity) break; } } } } }