Пример #1
0
        private void SetStopLossAndProfitTarget(SideTrade sideTrade, string orderSignalName, double targetPercent)
        {
            //----Bearish----|---Bullish---
            //----3----------|----------0--
            //-----\---1-----|-----2---/---
            //------\-/-\----|----/-\-/----
            //-------2---\---|---/---1-----
            //------------0--|--3----------

            MatrixPoints lastMastrix = DowTheoryIndicator1.LastMatrix;
            Point        pointZero   = lastMastrix.PointsList[0];
            Point        pointOne    = lastMastrix.PointsList[1];
            Point        pointTwo    = lastMastrix.PointsList[2];

            switch (sideTrade)
            {
            case SideTrade.Long:
                Draw.Line(this, "Stop loss line from: " + orderSignalName + " " + pointOne.Index,
                          ConvertBarIndexToBarsAgo(this, pointTwo.BarIndex), pointOne.Price,
                          ConvertBarIndexToBarsAgo(this, pointZero.BarIndex), pointOne.Price, Brushes.Green);

                // Definir um ponto para o stop
                SetStopLoss(orderSignalName, CalculationMode.Price, pointOne.Price, false);

                double longTargetPrice = MirrorFibonacciCalc(pointOne, pointTwo, targetPercent, SideTrade.Long);

                Draw.Line(this, "Profit target line from: " + orderSignalName + " " + pointOne.Index,
                          ConvertBarIndexToBarsAgo(this, pointTwo.BarIndex), longTargetPrice,
                          ConvertBarIndexToBarsAgo(this, pointZero.BarIndex), longTargetPrice, Brushes.Green);

                SetProfitTarget(orderSignalName, CalculationMode.Price, longTargetPrice, false);
                break;

            case SideTrade.Short:
                Draw.Line(this, "Stop loss line from: " + orderSignalName + " " + pointOne.Index,
                          ConvertBarIndexToBarsAgo(this, pointTwo.BarIndex), pointOne.Price,
                          ConvertBarIndexToBarsAgo(this, pointZero.BarIndex), pointOne.Price, Brushes.Red);

                // Definir um ponto para o stop
                SetStopLoss(orderSignalName, CalculationMode.Price, pointOne.Price, false);

                double shortTargetPrice = MirrorFibonacciCalc(pointOne, pointTwo, targetPercent, SideTrade.Short);

                Draw.Line(this, "Profit target line from: " + orderSignalName + " " + pointOne.Index,
                          ConvertBarIndexToBarsAgo(this, pointTwo.BarIndex), shortTargetPrice,
                          ConvertBarIndexToBarsAgo(this, pointZero.BarIndex), shortTargetPrice, Brushes.Red);

                SetProfitTarget(orderSignalName, CalculationMode.Price, shortTargetPrice);
                break;
            }
        }
Пример #2
0
        private double MirrorFibonacciCalc(Point pointOne, Point pointTwo, double percent, SideTrade sideTrade)
        {
            //----Bearish----|---Bullish---
            //----3----------|----------0--
            //-----\---1-----|-----2---/---
            //------\-/-\----|----/-\-/----
            //-------2---\---|---/---1-----
            //------------0--|--3----------

            double rangePrice = pointOne.Price - pointTwo.Price < 0 ?
                                (pointOne.Price - pointTwo.Price) * -1 : pointOne.Price - pointTwo.Price;

            rangePrice = (percent / 100) * rangePrice;

            switch (sideTrade)
            {
            case SideTrade.Long:

                return(rangePrice += pointTwo.Price);

            case SideTrade.Short:

                rangePrice -= pointTwo.Price;
                return(rangePrice *= -1);
            }
            return(0);
        }