Example #1
0
        private void OpenDeal(float price, int dealSide)
        {
            var dealVolumeDepo = CalculateVolume(ticker);

            if (dealVolumeDepo == 0)
            {
                return;
            }

            // Посчитать stopLoss и takeProfit
            stopLoss = StopLossPoints == 0
                ? dealSide > 0 ? extremumQueue.Min(q => q.a) : extremumQueue.Max(q => q.a)
                : price - dealSide * DalSpot.Instance.GetAbsValue(ticker, (float)StopLossPoints);
            takeProfit = TakeProfitPoints == 0
                                ? extremumQueue.First.a
                                : price + dealSide * DalSpot.Instance.GetAbsValue(ticker, (float)TakeProfitPoints);

            // очистить очередь экстремумов
            extremumQueue.Clear();

            // открыть сделку
            robotContext.SendNewOrderRequest(
                protectedContext.MakeProtectedContext(),
                RequestUniqueId.Next(),
                new MarketOrder
            {
                AccountID     = robotContext.AccountInfo.ID,
                Magic         = Magic,
                Symbol        = ticker,
                Volume        = dealVolumeDepo,
                Side          = dealSide,
                StopLoss      = stopLoss,
                TakeProfit    = takeProfit * TakeRange / 100,
                ExpertComment = "DoubleTopRobot"
            },
                OrderType.Market, 0, 0);
        }