Ejemplo n.º 1
0
    /// <summary>
    /// 如果当前节点Tick结束,就继续下一个节点
    /// </summary>
    public override BtResult Tick()
    {
        if (m_curActiveChild == null)
        {
            m_curActiveChild = m_children[0];
            m_curActiveIndex = 0;
        }
        BtResult result = m_curActiveChild.Tick();

        if (result == BtResult.Ended)
        {
            m_curActiveIndex++;
            if (m_curActiveIndex >= m_children.Count)
            {
                m_curActiveChild.Clear();
                m_curActiveChild = null;
                m_curActiveIndex = -1;
            }
            else
            {
                m_curActiveChild.Clear();
                m_curActiveChild = m_children[m_curActiveIndex];
                result           = BtResult.Running;
            }
        }
        return(result);
    }
Ejemplo n.º 2
0
        public BtResult CalculateBtK0(double K)
        {
            BtResult bt = new BtResult();

            bt.Result.Value = K;

            return(bt);
        }
Ejemplo n.º 3
0
        public BtResult CalculateBtK1(double r, double sigma, double t, double K, double S, int n, double T)
        {
            BtResult bt = new BtResult();

            bt.IntegralPointD1 = _integralPoints.CalculateIntegralPointD1(K, K, r, sigma, t);
            bt.IntegralPointD2 = _integralPoints.CalculateIntegralPointD2(bt.IntegralPointD1, sigma, t);
            bt.Distribution    = _distribution.CumulativeDistribution(bt.IntegralPointD1.Result.Value);
            bt.a            = CalculateAValue(sigma, t);
            bt.Result.Value = CalculateBtK1(sigma, K, r, t, bt);

            return(bt);
        }
Ejemplo n.º 4
0
        public async Task <BtResult> CalculateBtKAsync(double r, double sigma, double t, double K, double S, int n, double T, double BtK_1)
        {
            BtResult bt = new BtResult();

            bt.IntegralPointD1 = _integralPoints.CalculateIntegralPointD1(BtK_1, K, r, sigma, t);
            bt.IntegralPointD2 = _integralPoints.CalculateIntegralPointD2(bt.IntegralPointD1, sigma, t);
            bt.Distribution    = _distribution.CumulativeDistribution(bt.IntegralPointD1.Result.Value);
            bt.a = CalculateAValue(sigma, t);
            bt.IntegralFunction = await _btIntegralFunction.CalculateAsync(n, T, r, sigma, t, bt.IntegralPointD2);

            bt.Result.Value = CalculateBtValue(sigma, K, r, t, bt);

            return(bt);
        }
Ejemplo n.º 5
0
    /// <summary>
    /// 如果当前节点tick完成就清除
    /// </summary>
    public override BtResult Tick()
    {
        if (m_curActiveChild == null)
        {
            return(BtResult.Ended);
        }
        BtResult result = m_curActiveChild.Tick();

        if (result == BtResult.Ended)
        {
            m_curActiveChild.Clear();
            m_curActiveChild = null;
        }
        return(result);
    }
Ejemplo n.º 6
0
    public override BtResult Tick()
    {
        BtResult result = BtResult.Ended;

        if (m_state == BtActionState.Ready)
        {
            Enter();
            m_state = BtActionState.Running;
        }

        if (m_state == BtActionState.Running)
        {
            result = Execute();
            if (result != BtResult.Running)
            {
                Exit();
                m_state = BtActionState.Ready;
            }
        }
        return(result);
    }
Ejemplo n.º 7
0
 private static double CalculateBtValue(double sigma, double K, double r, double t, BtResult Bt)
 {
     return((1 / (Bt.Distribution + Bt.a * Math.Exp(-0.5 * Math.Pow(Bt.IntegralPointD1.Result.Value, 2)))) *
            (Bt.a * K * Math.Exp(-((r * t) + (0.5 * Math.Pow(Bt.IntegralPointD2.Result.Value, 2))))) +
            (r * K * Bt.IntegralFunction.Result.Value));
 }
Ejemplo n.º 8
0
 private static double CalculateBtK1(double sigma, double K, double r, double t, BtResult Bt)
 {
     return((K * (1 / (Bt.Distribution + Bt.a * Math.Exp(-0.5 * Math.Pow(Bt.IntegralPointD1.Result.Value, 2))))) *
            (Bt.a * Math.Exp(-((r * t) + (0.5 * Math.Pow(Bt.IntegralPointD2.Result.Value, 2))))) +
            (((2 * sigma * r) / ((2 * r) + (Math.Pow(sigma, 2))) * (2 * Bt.Distribution) - 1)));
 }
Ejemplo n.º 9
0
        public async Task <PutResult> CalculateAsync(double K, double S, double r, double t, double sigma, int n, double T, BtResult Btksi)
        {
            PutResult put = new PutResult();

            put.EuropeanPut         = _europeanPut.Calculate(K, S, r, t, sigma);
            put.PutIntegralFunction = await _putIntegralFunction.CalculateAsync(n, T, r, sigma, t, S, K, Btksi);

            put.Result.Value = put.EuropeanPut.Result.Value + put.PutIntegralFunction.Result.Value;

            return(put);
        }
        public async Task <IntegralFunction> CalculateAsync(int n, double T, double r, double sigma, double t, double S, double K, BtResult Btksi)
        {
            IntegralFunction integralFunction = new IntegralFunction();

            UnderIntegral[] underIntegral = new UnderIntegral[n];

            for (int i = 0; i < n; i++)
            {
                UnderIntegral ui = new UnderIntegral();

                ui.h               = (T / n);
                ui.ksi             = i * ui.h;
                ui.IntegralPointD1 = _integralPoints.CalculateIntegralPointD1(S, Btksi.Result.Value, r, sigma, t - ui.ksi);
                ui.IntegralPointD2 = _integralPoints.CalculateIntegralPointD2(ui.IntegralPointD1, sigma, t - ui.ksi);
                ui.Distribution    = _distribution.CumulativeDistribution(-ui.IntegralPointD2.Result.Value);
                ui.Result.Value    = CalculateUnderIntegral(r, K, t, ui.ksi, ui.Distribution) * ui.h;

                underIntegral[i] = ui;
                integralFunction.Result.Value += ui.Result.Value;
            }

            integralFunction.UnderIntegral = underIntegral;

            return(integralFunction);
        }