Example #1
0
 private void TryChangeCounter(double price, int positionChange)
 {
     if (Status == InventoryStatus.Long)
     {
         if (positionChange < 0)
         {
             counter.Change(price, positionChange);
         }
         else if (counter.CurrentPosition < 0)
         {
             positionChange = Math.Min(positionChange, -counter.CurrentPosition);
             counter.Change(price, positionChange);
             var closedPoints = counter.ClosedPoints;
             if (closedPoints > 0)
             {
                 var positionSize = Math.Abs(binary.CurrentPosition);
                 var points       = BeginningPrice * positionSize;
                 points -= closedPoints;
                 var newExtreme = points / positionSize;
                 beginningPrice       = newExtreme;
                 counter.ClosedPoints = 0;
             }
             if (counter.Completed)
             {
                 counter = default(TransactionPairBinary);
             }
         }
     }
     if (Status == InventoryStatus.Short)
     {
         if (positionChange > 0)
         {
             counter.Change(price, positionChange);
         }
         else if (counter.CurrentPosition > 0)
         {
             positionChange = Math.Max(positionChange, -counter.CurrentPosition);
             counter.Change(price, positionChange);
             if (counter.Completed)
             {
                 var closedPoints = counter.ClosedPoints;
                 if (closedPoints > 0)
                 {
                     var positionSize = Math.Abs(binary.CurrentPosition);
                     var points       = BeginningPrice * positionSize;
                     points        += closedPoints;
                     beginningPrice = points / positionSize;
                 }
                 counter = default(TransactionPairBinary);
             }
         }
     }
 }
Example #2
0
        public void Change(double price, int positionChange)
        {
            var newPosition = binary.CurrentPosition + positionChange;

            binary.Change(price, positionChange);
            if (trace)
            {
                log.Trace("Changed " + positionChange + " at " + price + ", position " + binary.CurrentPosition);
            }
            CalcBreakEven();
            TrackExcursions(price);
            TryChangeCounter(price, positionChange);
            if (newPosition == 0)
            {
                breakEven = double.NaN;
                var pandl = CalcProfit(binary, price);
                cumulativeProfit = CumulativeProfit + pandl;
                currentProfit    = 0D;
                binary           = default(TransactionPairBinary);
                counter          = default(TransactionPairBinary);
                breakEven        = double.NaN;
            }
            else
            {
                currentProfit = profitLoss.CalculateProfit(binary.CurrentPosition, binary.AverageEntryPrice, price);
            }
            binary.UpdatePrice(price);
            SetStatus();
            //CalcAdditionalTicks();
        }