Пример #1
0
        // логика

        void _tab_PositionOpeningFailEvent(Position position)
        {
            if (!string.IsNullOrWhiteSpace(position.Comment))
            {
                return;
            }

            if (position.OpenVolume != 0)
            {
                return;
            }

            if (StartProgram == StartProgram.IsTester)
            {
                return;
            }

            if (position.OpenOrders.Count > 1 ||
                position.Comment == "Second")
            {
                return;
            }

            List <Position> openPos = _tab.PositionsOpenAll;

            if (openPos != null && openPos.Count > 1 ||
                openPos != null && openPos.Count == 1 &&
                openPos[0].Direction == position.Direction)
            {
                return;
            }

            _tab.BuyAtStopCancel();
            _tab.SellAtStopCancel();

            if (position.Direction == Side.Buy)
            {
                decimal price = _tab.PriceBestBid + SlipageOpenSecond * _tab.Securiti.PriceStep;

                Position pos = _tab.BuyAtLimit(position.OpenOrders[0].Volume, price);
                pos.Comment = "Second";
            }
            else if (position.Direction == Side.Sell)
            {
                decimal price = _tab.PriceBestAsk - SlipageOpenSecond * _tab.Securiti.PriceStep;

                Position pos = _tab.SellAtLimit(position.OpenOrders[0].Volume, price);
                pos.Comment = "Second";
            }
        }
Пример #2
0
    /// <summary>
    /// logic open position
    /// логика открытия первой позиции и дополнительного входа
    /// </summary>
    private void LogicOpenPosition(List <Candle> candles)
    {
        List <Position> openPositions = _tab.PositionsOpenAll;

        if (openPositions == null || openPositions.Count == 0)
        {
            _tab.BuyAtStopCancel();
            _tab.SellAtStopCancel();
            // long
            if (Regime.ValueString != "OnlyShort")
            {
                decimal priceEnter = _lastPcUp;
                _tab.BuyAtStop(VolumeFix1.ValueDecimal,
                               priceEnter + Slippage.ValueInt * _tab.Securiti.PriceStep,
                               priceEnter, StopActivateType.HigherOrEqual);
            }

            // Short
            if (Regime.ValueString != "OnlyLong")
            {
                decimal priceEnter = _lastPcDown;
                _tab.SellAtStop(VolumeFix1.ValueDecimal,
                                priceEnter - Slippage.ValueInt * _tab.Securiti.PriceStep,
                                priceEnter, StopActivateType.LowerOrEqyal);
            }
            return;
        }

        if (openPositions.Count == 1)
        {
            _tab.BuyAtStopCancel();
            _tab.SellAtStopCancel();
            if (openPositions[0].Direction == Side.Buy)
            {
                decimal priceEnter = _lastPcUp + (_lastAtr * KofAtr.ValueDecimal);
                _tab.BuyAtStop(VolumeFix2.ValueDecimal,
                               priceEnter + Slippage.ValueInt * _tab.Securiti.PriceStep,
                               priceEnter, StopActivateType.HigherOrEqual);
            }
            else
            {
                decimal priceEnter = _lastPcDown - (_lastAtr * KofAtr.ValueDecimal);
                _tab.SellAtStop(VolumeFix2.ValueDecimal,
                                priceEnter - Slippage.ValueInt * _tab.Securiti.PriceStep,
                                priceEnter, StopActivateType.LowerOrEqyal);
            }
        }
    }
Пример #3
0
        /// <summary>
        /// logic open position
        /// логика открытия первой позиции и дополнительного входа
        /// </summary>
        private void LogicOpenPosition(List <Candle> candles)
        {
            _tab.SellAtStopCancel();
            _tab.BuyAtStopCancel();
            if (_LastCandleTime != candles[candles.Count - 1].TimeStart)
            {
                _LastCandleTime = candles[candles.Count - 1].TimeStart;
            }
            else
            {
                return;
            }
            List <Position> openPositions = _tab.PositionsOpenAll;

            if (openPositions == null || openPositions.Count == 0)
            {
                // long
                if (Regime.ValueString != "OnlyShort")
                {
                    if (FastMA.Values[FastMA.Values.Count - 1] > SlowMA.Values[SlowMA.Values.Count - 1]

                        )
                    {
                        decimal priceEnter = _lastPcUp + (_lastAtr * KofAtr);
                        //   priceEnter = GetLastFractail(Fractail.ValuesUp);
                        //_tab.BuyAtStop(VolumeFix1.ValueDecimal, priceEnter + Slipage.ValueDecimal, priceEnter, StopActivateType.HigherOrEqual);
                        _tab.BuyAtStop(GetVolume(Side.Buy), priceEnter + Slipage.ValueDecimal, priceEnter, StopActivateType.HigherOrEqual);
                    }
                }

                // Short
                if (Regime.ValueString != "OnlyLong")
                {
                    if (FastMA.Values[FastMA.Values.Count - 1] < SlowMA.Values[SlowMA.Values.Count - 1]

                        )
                    {
                        decimal priceEnter = _lastPcDown - (_lastAtr * KofAtr);
                        //   priceEnter = GetLastFractail(Fractail.ValuesDown);
                        //_tab.SellAtStop(VolumeFix1.ValueDecimal, priceEnter - Slipage.ValueDecimal, priceEnter, StopActivateType.LowerOrEqyal);
                        _tab.SellAtStop(GetVolume(Side.Sell), priceEnter - Slipage.ValueDecimal, priceEnter, StopActivateType.LowerOrEqyal);
                    }
                }
                return;
            }
        }
Пример #4
0
        private void Strateg_PositionOpen(Position position)
        {
            _tab.SellAtStopCancel();
            _tab.BuyAtStopCancel();
            decimal profit = Math.Abs((_lastPcUp - _lastPcDown)) * 1;

            List <Position> openPositions = _tab.PositionsOpenAll;

            for (int i = 0; openPositions != null && i < openPositions.Count; i++)
            {
                if (openPositions[i].Direction == Side.Buy)
                {
                    _tab.SellAtStopCancel();
                    _tab.CloseAtStop(openPositions[i], _lastPcDown, _lastPcDown - Slipage.ValueDecimal);
                    _tab.CloseAtProfit(openPositions[i], openPositions[i].EntryPrice + profit + Slipage.ValueDecimal, openPositions[i].EntryPrice + profit);
                }
                else
                {
                    _tab.BuyAtStopCancel();
                    _tab.CloseAtStop(openPositions[i], _lastPcUp, _lastPcUp + Slipage.ValueDecimal);
                    _tab.CloseAtProfit(openPositions[i], openPositions[i].EntryPrice - profit - Slipage.ValueDecimal, openPositions[i].EntryPrice - profit);
                }
            }
        }
Пример #5
0
        private void Strateg_PositionOpen(Position position)
        {
            List <Position> openPositions = _tab.PositionsOpenAll;

            for (int i = 0; openPositions != null && i < openPositions.Count; i++)
            {
                if (openPositions[i].Direction == Side.Buy)
                {
                    _tab.SellAtStopCancel();
                    //    _tab.CloseAtStop(openPositions[i], _tab.CandlesAll[_tab.CandlesAll.Count-1].Low, _tab.CandlesAll[_tab.CandlesAll.Count - 1].Low - Slipage.ValueDecimal);
                    //    _tab.CloseAtProfit(openPositions[i], openPositions[i].EntryPrice+_lastAtr*0.5m, openPositions[i].EntryPrice + _lastAtr * 0.5m - Slipage.ValueDecimal);
                }
                else
                {
                    _tab.BuyAtStopCancel();
                    //   _tab.CloseAtStop(openPositions[i], _tab.CandlesAll[_tab.CandlesAll.Count - 1].High, _tab.CandlesAll[_tab.CandlesAll.Count - 1].High + Slipage.ValueDecimal);
                    //    _tab.CloseAtProfit(openPositions[i], openPositions[i].EntryPrice - _lastAtr * 0.5m, openPositions[i].EntryPrice + _lastAtr * 0.5m + Slipage.ValueDecimal);
                }
            }
        }
Пример #6
0
    private void LogicOpenPosition(List <Candle> candles)
    {
        decimal lastMa = _sma.DataSeries[0].Values[_sma.DataSeries[0].Values.Count - 1];

        decimal lastPrice = candles[candles.Count - 1].Close;

        if (lastMa == 0)
        {
            return;
        }

        decimal maxToCandleSeries = _channel.DataSeries[0].Values[_channel.DataSeries[0].Values.Count - 1];
        decimal minToCandleSeries = _channel.DataSeries[1].Values[_channel.DataSeries[1].Values.Count - 1];

        List <Position> positions = _tab.PositionsOpenAll;

        if (lastPrice >= lastMa && Regime.ValueString != "OnlyShort")
        {
            if (positions != null && positions.Count != 0 &&
                positions[0].Direction == Side.Buy)
            {
                if (positions.Count >= MaximumPosition.ValueInt)
                {
                    return;
                }
                decimal lastIntro = positions[positions.Count - 1].EntryPrice;
                if (lastIntro + lastIntro * (PersentDopSell.ValueDecimal / 100) < lastPrice)
                {
                    if (positions.Count >= MaximumPosition.ValueInt)
                    {
                        return;
                    }
                    _tab.BuyAtLimit(Volume.ValueDecimal, lastPrice + (Slippage.ValueInt * _tab.Securiti.PriceStep));
                }
            }
            else if (positions == null || positions.Count == 0)
            {
                _tab.SellAtStopCancel();
                _tab.BuyAtStopCancel();
                _tab.BuyAtStop(Volume.ValueDecimal, maxToCandleSeries + (Slippage.ValueInt * _tab.Securiti.PriceStep), maxToCandleSeries, StopActivateType.HigherOrEqual);
            }
        }

        if (lastPrice <= lastMa && Regime.ValueString != "OnlyLong")
        {
            if (positions != null && positions.Count != 0 &&
                positions[0].Direction == Side.Sell)
            {
                if (positions.Count >= MaximumPosition.ValueInt)
                {
                    return;
                }
                decimal lastIntro = positions[positions.Count - 1].EntryPrice;

                if (lastIntro - lastIntro * (PersentDopSell.ValueDecimal / 100) > lastPrice)
                {
                    _tab.SellAtLimit(Volume.ValueDecimal, lastPrice - (Slippage.ValueInt * _tab.Securiti.PriceStep));
                }
            }
            else if (positions == null || positions.Count == 0)
            {
                if (positions != null && positions.Count >= MaximumPosition.ValueInt)
                {
                    return;
                }

                _tab.SellAtStopCancel();
                _tab.BuyAtStopCancel();
                _tab.SellAtStop(Volume.ValueDecimal, minToCandleSeries - (Slippage.ValueInt * _tab.Securiti.PriceStep), minToCandleSeries, StopActivateType.LowerOrEqyal);
            }
        }
    }