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