コード例 #1
0
        /// <summary>
        ///     Updates the journal data from the backtester
        /// </summary>
        private void UpdateJournalData()
        {
            if (!Data.IsResult)
            {
                return;
            }

            journalData   = new string[positions, columns];
            positionIcons = new Image[shownPos];

            for (int pos = firstPos; pos < firstPos + shownPos; pos++)
            {
                int row = pos - firstPos;

                journalData[row, 0] = (StatsBuffer.PosNumb(SelectedBar, pos) + 1).ToString(CultureInfo.InvariantCulture);
                journalData[row, 1] = Language.T(StatsBuffer.PosTransaction(SelectedBar, pos).ToString());
                journalData[row, 2] = Language.T(StatsBuffer.PosDir(SelectedBar, pos).ToString());
                journalData[row, 3] = Configs.AccountInMoney
                                          ? (StatsBuffer.PosDir(SelectedBar, pos) == PosDirection.Short ? "-" : "") +
                                      (StatsBuffer.PosLots(SelectedBar, pos) * Data.InstrProperties.LotSize)
                                          : StatsBuffer.PosLots(SelectedBar, pos).ToString(CultureInfo.InvariantCulture);
                journalData[row, 4] =
                    (StatsBuffer.PosOrdNumb(SelectedBar, pos) + 1).ToString(CultureInfo.InvariantCulture);
                journalData[row, 5] = StatsBuffer.PosOrdPrice(SelectedBar, pos).ToString(Data.Ff);
                journalData[row, 6] = StatsBuffer.PosPrice(SelectedBar, pos).ToString(Data.Ff);

                // Profit Loss
                if (StatsBuffer.PosTransaction(SelectedBar, pos) == Transaction.Close ||
                    StatsBuffer.PosTransaction(SelectedBar, pos) == Transaction.Reduce ||
                    StatsBuffer.PosTransaction(SelectedBar, pos) == Transaction.Reverse)
                {
                    journalData[row, 7] = Configs.AccountInMoney
                                              ? StatsBuffer.PosMoneyProfitLoss(SelectedBar, pos).ToString("F2")
                                              : Math.Round(StatsBuffer.PosProfitLoss(SelectedBar, pos))
                                          .ToString(CultureInfo.InvariantCulture);
                }
                else
                {
                    journalData[row, 7] = "-";
                }

                // Floating Profit Loss
                if (pos == positions - 1 && StatsBuffer.PosTransaction(SelectedBar, pos) != Transaction.Close)
                {
                    // Last bar position only
                    journalData[row, 8] = Configs.AccountInMoney
                                              ? StatsBuffer.PosMoneyFloatingPL(SelectedBar, pos).ToString("F2")
                                              : Math.Round(StatsBuffer.PosFloatingPL(SelectedBar, pos))
                                          .ToString(CultureInfo.InvariantCulture);
                }
                else
                {
                    journalData[row, 8] = "-";
                }

                // Icons
                positionIcons[row] = Position.PositionIconImage(StatsBuffer.PosIcon(SelectedBar, pos));
            }
        }
コード例 #2
0
        /// <summary>
        /// Calculates Data to draw in histogram
        /// </summary>
        private static void CalculateHistogramData()
        {
            // crummy way to get number of trades for init array
            // TBD -- find better property
            int ctr = 0;

            for (int bar = 0; bar < Data.Bars; bar++)
            {
                for (int pos = 0; pos < StatsBuffer.Positions(bar); pos++)
                {
                    Transaction transaction = StatsBuffer.PosTransaction(bar, pos);
                    if (transaction == Transaction.Close ||
                        transaction == Transaction.Reduce ||
                        transaction == Transaction.Reverse)
                    {
                        ctr++;
                    }
                }
            }

            _tradeResults = new int[ctr];
            ctr           = 0;
            for (int bar = 0; bar < Data.Bars; bar++)
            {
                for (int pos = 0; pos < StatsBuffer.Positions(bar); pos++)
                {
                    Transaction transaction = StatsBuffer.PosTransaction(bar, pos);
                    if (transaction == Transaction.Close ||
                        transaction == Transaction.Reduce ||
                        transaction == Transaction.Reverse)
                    {
                        _tradeResults[ctr] = (int)StatsBuffer.PosProfitLoss(bar, pos);
                        ctr++;
                    }
                }
            }

            int min = 0;
            int max = 0;

            foreach (int result in _tradeResults)
            {
                if (min > result)
                {
                    min = result;
                }
                if (max < result)
                {
                    max = result;
                }
            }
            _tradeIndexes     = new int[(max - min) + 1];
            _tradeCounts      = new int[(max - min) + 1];
            _tradeCumulatives = new int[(max - min) + 1];

            // fill _tradeIndexes with index values, then count how many in _tradeResults
            for (int ctr1 = 0; ctr1 < _tradeIndexes.Length; ctr1++)
            {
                _tradeIndexes[ctr1] = min + ctr1;
                int count = 0;
                for (int ctr2 = 0; ctr2 < _tradeResults.Length; ctr2++)
                {
                    if (_tradeResults[ctr2] == _tradeIndexes[ctr1])
                    {
                        count++;
                    }
                }
                _tradeCounts[ctr1]      = count;
                _tradeCumulatives[ctr1] = _tradeIndexes[ctr1] * count;
            }
        }
コード例 #3
0
 private static double GetProfit(int bar, int pos)
 {
     return(Configs.AccountInMoney
                ? StatsBuffer.PosMoneyProfitLoss(bar, pos)
                : StatsBuffer.PosProfitLoss(bar, pos));
 }