public void ReceiveCandle(sCandle pCandle)
        {
            Candle = pCandle;

            ATR.ReceiveTick(pCandle.O, pCandle.H, pCandle.L, pCandle.C);
            BB.ReceiveTick(pCandle.C);
            CCI.ReceiveTick(pCandle.O, pCandle.H, pCandle.L, pCandle.C);
            Derivatives.ReceiveTick(pCandle.C);
            EMA.ReceiveTick(pCandle.C);
            FMA.ReceiveTick(pCandle.C);
            HMA.ReceiveTick(pCandle.C);
            MACD.ReceiveTick(pCandle.C);
            Momemtum.ReceiveTick(pCandle.C);
            RSI.ReceiveTick(pCandle.C);
            Renko.ReceiveTick(pCandle.C);
            SMA.ReceiveTick(pCandle.C);
            STARCBands.ReceiveTick(pCandle.O, pCandle.H, pCandle.L, pCandle.C);
            STDDEV.ReceiveTick(pCandle.C);
            Slope.ReceiveTick(pCandle.C);
            StochRSI.ReceiveTick(pCandle.C);
            Stochastics.ReceiveTick(pCandle.O, pCandle.H, pCandle.L, pCandle.C);
            Stub.ReceiveTick(pCandle.C);
            Trend.ReceiveTick(pCandle.O, pCandle.H, pCandle.L, pCandle.C);
            TrueRange.ReceiveTick(pCandle.O, pCandle.H, pCandle.L, pCandle.C);
            WMA.ReceiveTick(pCandle.C);
        }
 // called from CandleBuilder
 public override void ReceiveCandle(sCandle pCandle, int pPeriod, string pCBTitle)
 {
     if ((pPeriod == Minutes) && (pCBTitle == "cbx"))
     {
         StochRSI.ReceiveTick(pCandle.C);
         RSISlope.ReceiveTick(StochRSI.Value());
         DecisionFunction();
     }
 }
        private void DecisionFunction()
        {
            BBands.Value(out BPlus, out SMA, out BMinus, out PctB, out BW);
            BWidth = BPlus - BMinus;
            SMASlope.ReceiveTick(SMA);

            HMAv = HMA.Value();

            // preprocessing

            StateMachine();

            switch (Framework.Account.InTrade())
            {
            case 0:
            {
                if (Framework.Account.InTrade() == 0)
                {
                    if (EntryCriteriaLong())
                    {
                        Framework.Account.EnterTrade(1);
                        Framework.Account.SetTrailingStop(TrailingStop);
                    }
                }

                if (Framework.Account.InTrade() == 0)
                {
                    if (EntryCriteriaShort())
                    {
                        Framework.Account.EnterTrade(-1);
                        Framework.Account.SetTrailingStop(TrailingStop);
                    }
                }
                break;
            }

            case 1:
            {
                if (ExitCriteriaLong())
                {
                    Framework.Account.ExitTrade();
                }
                break;
            }

            case -1:
            {
                if (ExitCriteriaShort())
                {
                    Framework.Account.ExitTrade();
                }
                break;
            }
            }

            double logInTrade = Framework.Account.InTrade();
            double logMargin  = Framework.Account.GetAccount().C;

            //Framework.WriteGraphLine("InTrade,Margin,B+,C,HMA,SMA,B-,State,BWidth,MinBWidth,EntryRecommend");
            Framework.WriteGraphLine(logInTrade + "," + logMargin + "," + BPlus + "," + Candle.C + "," + HMAv + "," + SMA + "," + BMinus + "," + State + "," + BWidth + "," + MinBWidth + "," + EntryRecommend);
        }