示例#1
0
        internal float AtingiuAlvo(Candle candle)
        {
            if (carteira.tradeSystem.targetSaida == null || carteira.tradeSystem.targetSaida == "")
            {
                return(0);
            }
            float vlrAlvo = CalcAlvo(candle);

            if (vlrAlvo <= 0)
            {
                return(0);
            }
            float vlrMaximo = candle.GetValor(FormulaManager.HIGH);
            float vlrOpen   = candle.GetValor(FormulaManager.OPEN);

            //float vlrLOW= candle.GetValor(FormulaManager.OPEN);
            //float difPercAtual = vlrEntrada / vlrMaximo;
            if (vlrMaximo > vlrAlvo)
            {
                if (vlrOpen > vlrAlvo)
                {
                    atingiuAlvo = vlrOpen;
                }
                else
                {
                    atingiuAlvo = vlrAlvo;
                }
                return(atingiuAlvo);
            }

            return(0);
        }
        public override float Calc(Candle candle)
        {
            Candle cp = candle;

            float soma = 0;
            float vPer = per.Calc(candle);

            vPer = LimitPeriodo(vPer);
            float vlrFinal = cp.GetValor(campo);

            if (vPer == 0)
            {
                return(0);
            }
            for (int i = 0; i < vPer; i++)
            {
                cp = cp.candleAnterior;
                if (cp == null)
                {
                    return(0);
                }
            }
            float vlrInicial = cp.GetValor(campo);


            return((vlrFinal / vlrInicial - 1) * 100);
        }
        public override float Calc(Candle candle)
        {
            Candle c  = candle;
            float  v1 = c.GetValor(campo1);
            float  v2 = c.GetValor(campo2);

            return(v1 > v2?1:0);
        }
示例#4
0
        public override float Calc(Candle candle)
        {
            Candle c    = candle;
            float  val1 = c.GetValor(campo1);
            float  val2 = (campo2 == null) ? v2 : c.GetValor(campo2);

            return(val1 - val2);
        }
示例#5
0
        public override float Calc(Candle candle)
        {
            Candle c = candle;

            if (campo2 == null)
            {
                return(c.GetValor(campo1) + v2);
            }
            return(c.GetValor(campo1) + c.GetValor(campo2));
        }
示例#6
0
        public override float Calc(Candle candle)
        {
            float v1 = candle.GetValor(campo1);
            float v2 = candle.GetValor(campo1);

            if (v2 == 0)
            {
                return(0);
            }
            return(v1 % v2);
        }
示例#7
0
        public virtual bool VerificaCondicao(Candle candle, TradeSystem ts)
        {
            //Se cond1 e cond2 forem null é porque é uma condição pai, logo não há o que verificar (apenas os filhos)
            if ((cond1 == null) && (cond2 == null))
            {
                return(true);
            }

            float c1 = candle.GetValor(ts.vm.ReplaceVariavel(cond1));
            float c2 = candle.GetValor(ts.vm.ReplaceVariavel(cond2));

            return(VerificaCondicao(c1, c2));
        }
示例#8
0
        public override float Calc(Candle candle)
        {
            float ag = candle.GetValor(facade.formulaManager.GetFormula(FormulaManager.AVGGAIN, campo.GetCode() + "," + per.GetCode()));
            float al = candle.GetValor(facade.formulaManager.GetFormula(FormulaManager.AVGLOSS, campo.GetCode() + "," + per.GetCode()));

            if (al == 0)
            {
                return(0);
            }
            float rs  = ag / al;
            float rsi = 100 - (100 / (1 + rs));

            return(rsi);
        }
        public override float Calc(Candle candle)
        {
            float x = candle.GetValor(campo);
            float h = candle.GetValor(FormulaManager.HIGH);
            float l = candle.GetValor(FormulaManager.LOW);

            float dif = h - l;

            x = x - l;
            if (dif == 0)
            {
                return(0);
            }
            return(x / dif);
        }
示例#10
0
        public override float Calc(Candle candle)
        {
            Candle c    = candle;
            float  vPer = per.Calc(candle);

            vPer = LimitPeriodo(vPer);
            if (vPer <= 0)
            {
                return(0);
            }
            float  K  = 2f / (vPer + 1f);
            Candle cp = c.candleAnterior;

            if (cp == null)
            {
                return(0);
            }
            float P = 0;

            float prevMM = cp == c?0:cp.GetValor(GetCode());

            P = prevMM;
            float C = c.GetValor(campo);

            float EMA = (K * (C - P)) + P;

            //System.out.println("tot:"+tot);
            return(EMA);
        }
示例#11
0
        public override float Calc(Candle candle)
        {
            float  tot  = 0;
            Candle c    = candle;
            float  vPer = per.Calc(candle);

            vPer = LimitPeriodo(vPer);
            if (vPer <= 0)
            {
                return(0);
            }
            for (int i = 0; i < vPer; i++)
            {
                //System.out.println("i:"+i+" "+tot);
                float vlr = 0;
                if (c == null)
                {
                    return(0);
                }
                if (c.candleAnterior != c)
                {
                    vlr = c.GetValor(campo);
                }
                tot = tot + vlr;
                c   = c.candleAnterior;
            }
            tot = tot / vPer;
            //System.out.println("tot:"+tot);
            return(tot);
        }
示例#12
0
        public override float Calc(Candle candle)
        {
            Candle cp  = candle;
            float  avg = candle.GetValor(facade.formulaManager.GetFormula(FormulaManager.MMS, campo.GetCode() + "," + per));

            float soma = 0;
            float vPer = per.Calc(candle);

            vPer = LimitPeriodo(vPer);
            if (vPer == 0)
            {
                return(0);
            }
            for (int i = 0; i < vPer; i++)
            {
                //System.out.println(candle.getPeriodo()+" "+cp.getValor(FormulaManager.close));
                float dif = cp.GetValor(campo) - avg;
                dif   = dif * dif;
                soma += dif;
                cp    = cp.candleAnterior;
                if (cp == null)
                {
                    return(0);
                }
            }
            soma = soma / vPer;


            return((float)Math.Sqrt(soma));
        }
示例#13
0
        public override float Calc(Candle candle)
        {
            Candle c = candle;

            float  v    = candle.GetValor(campo);
            Candle cp   = c;
            float  vPer = per.Calc(candle);

            vPer = LimitPeriodo(vPer);
            for (int i = 0; i < vPer; i++)
            {
                float x = cp.GetValor(campo);
                if (x < v)
                {
                    v = x;
                }
                cp = cp.candleAnterior;
                if (cp == null)
                {
                    return(v);
                }
            }

            return(v);
        }
示例#14
0
        public override float Calc(Candle candle)
        {
            Candle c = candle;
            Candle candleAnterior = candle.candleAnterior;

            if (candleAnterior == null)
            {
                return(0);
            }
            float vPer = per.Calc(candle);

            vPer = LimitPeriodo(vPer);
            string m1 = FormulaManager.MME + "(" + campo.GetCode() + "," + vPer + ")";
            string m2 = FormulaManager.MME + "(" + m1 + "," + vPer + ")";
            string m3 = FormulaManager.MME + "(" + m2 + "," + vPer + ")";

            float vAtual    = candle.GetValor(m3);
            float vAnterior = candleAnterior.GetValor(m3);

            if (vAnterior == 0)
            {
                return(0);
            }

            return(vAtual / vAnterior);
        }
示例#15
0
        public override float Calc(Candle candle)
        {
            Candle c = candle;

            try
            {
                if (campo2 == null)
                {
                    return(c.GetValor(campo1) / v2);
                }
                return(c.GetValor(campo1) / c.GetValor(campo2));
            }
            catch (System.Exception)
            {
                return(0);
            }
        }
示例#16
0
        public void TestInicial()
        {
            string ativoName = "ABCD";
            Ativo  ativo     = new Ativo(facade, ativoName, 100);

            facade.AddAtivo(ativo);
            Ativo ativoGet = facade.GetAtivo(ativoName);

            Assert.IsNotNull(ativoGet);
            Assert.IsTrue(ativoGet == ativo);
            Assert.IsTrue(ativo.loteMin == 100);
            Assert.IsTrue(ativo.name == ativoName);

            Periodo periodo1 = new Periodo("2015-06-05 00:00");
            Periodo periodo2 = new Periodo("2015-06-06 00:00");

            float open  = 2;
            float close = 3;
            float high  = 3.5f;
            float low   = 1.5f;
            float vol   = 100;

            Candle candle = new Candle(periodo1, ativo);

            ativo.AddCandle(candle);
            candle.SetValor(FormulaManager.CLOSE, close);
            candle.SetValor(FormulaManager.OPEN, open);
            candle.SetValor(FormulaManager.HIGH, high);
            candle.SetValor(FormulaManager.LOW, low);
            candle.SetValor(FormulaManager.VOL, vol);


            Candle candleDefinido = new Candle(periodo2, ativo, open, close, high, low, vol);

            ativo.AddCandle(candleDefinido);

            Assert.IsTrue(candleDefinido.GetValor(FormulaManager.CLOSE) == candle.GetValor(FormulaManager.CLOSE) && candle.GetValor(FormulaManager.CLOSE) == close);
            Assert.IsTrue(candleDefinido.GetValor(FormulaManager.OPEN) == candle.GetValor(FormulaManager.OPEN) && candle.GetValor(FormulaManager.OPEN) == open);
            Assert.IsTrue(candleDefinido.GetValor(FormulaManager.HIGH) == candle.GetValor(FormulaManager.HIGH) && candle.GetValor(FormulaManager.HIGH) == high);
            Assert.IsTrue(candleDefinido.GetValor(FormulaManager.LOW) == candle.GetValor(FormulaManager.LOW) && candle.GetValor(FormulaManager.LOW) == low);
            Assert.IsTrue(candleDefinido.GetValor(FormulaManager.VOL) == candle.GetValor(FormulaManager.VOL) && candle.GetValor(FormulaManager.VOL) == vol);

            Assert.IsTrue(ativo.GetCandle(periodo2) == candleDefinido);
            Assert.IsTrue(ativo.GetCandle(periodo1) == candle);
        }
示例#17
0
        //tem alguns dados que parecem com problema...
        private void LimitaCandle(Candle candle, int percent)
        {
            Candle candleAnterior = candle.candleAnterior;

            if (candleAnterior != null)
            {
                if (PercentDif(candle.GetValor(FormulaManager.LOW), candleAnterior.GetValor(FormulaManager.LOW)) > percent ||
                    PercentDif(candle.GetValor(FormulaManager.HIGH), candleAnterior.GetValor(FormulaManager.HIGH)) > percent ||
                    PercentDif(candle.GetValor(FormulaManager.CLOSE), candleAnterior.GetValor(FormulaManager.CLOSE)) > percent ||
                    PercentDif(candle.GetValor(FormulaManager.OPEN), candleAnterior.GetValor(FormulaManager.OPEN)) > percent)
                {
                    candle.SetValor(FormulaManager.LOW, candleAnterior.GetValor(FormulaManager.LOW));
                    candle.SetValor(FormulaManager.HIGH, candleAnterior.GetValor(FormulaManager.HIGH));
                    candle.SetValor(FormulaManager.CLOSE, candleAnterior.GetValor(FormulaManager.CLOSE));
                    candle.SetValor(FormulaManager.OPEN, candleAnterior.GetValor(FormulaManager.OPEN));
                }
            }
        }
示例#18
0
        public override float Calc(Candle candle)
        {
            string fHiloH = FormulaManager.MMS + "(" + campoH.GetCode() + "," + periodo.GetCode() + ")";
            string fHiloL = FormulaManager.MMS + "(" + campoL.GetCode() + "," + periodo.GetCode() + ")";
            float  hiloH  = candle.GetValor(FormulaManager.REF + "(" + fHiloH + ",1)");
            float  hiloL  = candle.GetValor(FormulaManager.REF + "(" + fHiloL + ",1)");

            float C = candle.GetValor(campo);

            if (C > hiloH)
            {
                return(hiloH);
            }
            if (C < hiloL)
            {
                return(hiloL);
            }
            return(0);
        }
示例#19
0
        public float CalcAlvo(Candle candle)
        {
            float percTarget = candle.GetValor(carteira.tradeSystem.targetSaida);
            float vlrAlvo    = vlrEntrada + vlrEntrada * percTarget / 100;

            if (vlrAlvo <= 0)
            {
                return(0);
            }
            return(vlrAlvo);
        }
示例#20
0
 public float checaCondicaoSaida(Candle candle, int direcao)
 {
     //SE for compra e ativou a condicao de saida
     if (direcao > 0)
     {
         float valor = candle.GetValor(vm.ReplaceVariavel(condicaoSaidaC));
         if (valor >= 1)
         {
             return(1);
         }
     }
     if (direcao < 0)
     {
         float valor = candle.GetValor(vm.ReplaceVariavel(condicaoSaidaV));
         if (valor >= 1)
         {
             return(1);
         }
     }
     return(0);
 }
示例#21
0
        public float GetCapital(Periodo periodo)
        {
            Candle c = ativo.GetCandle(periodo);

            //Caso não tenha candle, tenta pegar o anterior...
            if (c == null)
            {
                c = ativo.GetCandle(periodo.periodoAnterior);
            }

            return(saldo * c.GetValor(FormulaManager.CLOSE));
        }
示例#22
0
        /*  [DataMember]
         * public CondicaoComplexa condicaoEntradaC { get; private set; }
         *
         * [DataMember]
         * public CondicaoComplexa condicaoSaidaC { get; private set; }
         * [DataMember]
         * public CondicaoComplexa condicaoEntradaV { get; private set; }
         *
         * [DataMember]
         * public CondicaoComplexa condicaoSaidaV { get; private set; }
         */
        #endregion

        /*
         * Esse método verifica se a entrada foi ativada para o candle atual
         * O metodo retorna onde deve ficar o stop, e se for positivo é compra e negativo é venda
         */
        public float checaCondicaoEntrada(Candle candle, Config config)
        {
            if ((config.flagCompra && condicaoEntradaC != null))
            {
                float valor = candle.GetValor(vm.ReplaceVariavel(condicaoEntradaC));
                if (valor > 0)
                {
                    return(Math.Abs(Stop.CalcValorStop(candle.GetValor(stopInicialC), 1, stopGapPerc)));
                }
                //return candle.GetValor(stopInicialC) * (1f - stopGapPerc / 100f);
            }
            if ((config.flagVenda && condicaoEntradaV != null))
            {
                float valor = candle.GetValor(vm.ReplaceVariavel(condicaoEntradaV));
                if (valor > 0)
                {
                    return(-Math.Abs(Stop.CalcValorStop(candle.GetValor(stopInicialC), -1, stopGapPerc)));
                }
                //return -candle.GetValor(stopInicialV) * (1f + stopGapPerc / 100f);
            }
            return(0);
        }
示例#23
0
        public override float Calc(Candle candle)
        {
            float k   = 0;
            float max = smooth.Calc(candle);

            max = LimitPeriodo(max);
            for (int i = 0; i < max; i++)
            {
                float ll    = candle.GetValor(facade.formulaManager.GetFormula(FormulaManager.LV, "L," + per));
                float hh    = candle.GetValor(facade.formulaManager.GetFormula(FormulaManager.HV, "H," + per));
                float close = candle.GetValor("C");
                k += (close - ll) / (hh - ll) * 100;
                if (candle.candleAnterior == null)
                {
                    break;
                }
                candle = candle.candleAnterior;
            }
            k /= smooth.Calc(candle);

            return(k);
        }
示例#24
0
        public float GetFirstRSI(Candle candle)
        {
            Candle cp   = candle;
            float  ag   = 0;
            float  vPer = per.Calc(candle);

            vPer = LimitPeriodo(vPer);
            if (cp == cp.candleAnterior)
            {
                return(0);
            }
            for (int i = 0; i < vPer; i++)
            {
                if (cp.candleAnterior == null)
                {
                    return(0);
                }
                float dif = cp.GetValor(campo) - cp.candleAnterior.GetValor(campo);
                if (dif > 0)
                {
                    ag += dif;
                }
                if (cp.candleAnterior == null || cp == cp.candleAnterior)
                {
                    return(0);
                }
                cp = cp.candleAnterior;
            }
            float rs = 0;

            //1o candle após "per" periodos
            if (cp.candleAnterior == null)
            {
                ag = ag / vPer;
                rs = ag;
            }
            else
            {
                ag = candle.GetValor(campo) - candle.candleAnterior.GetValor(campo);
                if (ag < 0)
                {
                    ag = 0;
                }
                ag = Math.Abs(ag);
                rs = candle.candleAnterior.GetValor(facade.formulaManager.GetFormula(GetCode())) * (vPer - 1) + ag;
                rs = rs / vPer;
            }


            return(rs);
        }
示例#25
0
        public override float Calc(Candle candle)
        {
            float vPer = per.Calc(candle);

            vPer = LimitPeriodo(vPer);
            float v      = 0;
            float avg    = candle.GetValor(facade.formulaManager.GetFormula(FormulaManager.MMS, campo.GetCode() + "," + vPer));
            float stdDev = candle.GetValor(facade.formulaManager.GetFormula(FormulaManager.STDDEV, campo.GetCode() + "," + vPer));

            if (banda == "U")
            {
                v = avg + desvio.Calc(candle) * stdDev;
            }
            if (banda == "M")
            {
                v = avg;
            }
            if (banda == "L")
            {
                v = avg - desvio.Calc(candle) * stdDev;
            }

            return(v);
        }
示例#26
0
        private static void validaFormulaMMS(Ativo ativo, FormulaManager fm, string fonte, int periodos)
        {
            string  codigoFormula = "MMS(" + fonte + "," + periodos + ")";
            Formula formulaMMS    = fm.GetFormula(codigoFormula);

            Assert.IsNotNull(formulaMMS);
            Assert.IsTrue(formulaMMS.GetCode() == codigoFormula, formulaMMS.GetCode() + "<>" + codigoFormula);

            float  soma   = 0;
            Candle candle = ativo.firstCandle;

            for (int i = 0; i < 10; i++)
            {
                candle = candle.proximoCandle;
            }
            for (int i = 0; i < periodos; i++)
            {
                soma  += candle.GetValor(fonte);
                candle = candle.proximoCandle;
            }
            soma   = soma / periodos;
            candle = candle.candleAnterior;
            Assert.IsTrue(Math.Abs(candle.GetValor(codigoFormula) - soma) < 0.1f, candle.GetValor(codigoFormula) + "<>" + soma);
        }
示例#27
0
        public override float Calc(Candle candle)
        {
            Candle c = candle;

            float vPer = per.Calc(candle);

            vPer = LimitPeriodo(vPer);
            for (int i = 0; i < vPer; i++)
            {
                if (c.candleAnterior != null)
                {
                    c = c.candleAnterior;
                }
            }
            return(c.GetValor(campo));
        }
示例#28
0
        /*
         * Efetuo a saida no ativo no periodo determinado usando o vlrSaida caso determinado, se não, pego o vlrSaida padrao
         * vlrSaida será informado quando for stopado
         */
        public void EfetuaSaida(Ativo ativo, Periodo periodo, float vlrSaida)
        {
            Posicao posicao = posicoesAbertas[ativo];
            Candle  candle  = posicao.ativo.GetCandle(periodo);

            if (vlrSaida == 0)
            {
                if (config.flagVendaMesmoDia)
                {
                    vlrSaida = candle.GetValor(FormulaManager.CLOSE);
                }
                else
                {
                    vlrSaida = candle.proximoCandle.GetValor(FormulaManager.OPEN);
                }
            }
            FechaPosicao(posicao, candle, vlrSaida);
        }
示例#29
0
        public void FechaPosicoes(Periodo periodo)
        {
            posicoesARemover_.Clear();
            foreach (Ativo key in posicoesAbertas.Keys)
            {
                Posicao p      = posicoesAbertas[key];
                Candle  candle = p.ativo.GetCandle(periodo);
                while (candle == null)
                {
                    periodo = periodo.periodoAnterior;
                    candle  = p.ativo.GetCandle(periodo);
                }
                float vlrSaida = candle.GetValor(FormulaManager.CLOSE);
                posicoesARemover_.Add(FechaPosicao(p, candle, vlrSaida, false));
            }

            foreach (Posicao p in posicoesARemover_)
            {
                posicoesAbertas.Remove(p.ativo);
            }
        }
示例#30
0
        /*
         * Essa função verifica se atingiu o stop definido, tanto na compra quanto na venda
         * Se sim, então retorna o valor do stop, lembrando que não
         * necessariamente pode ser o stop definido pois a ação pode ter aberto em gap.
         *
         */
        public float atingiuStop(Candle candle)
        {
            float vlrStop = stop.CalcStop(candle);

            //Compra
            if (direcao == 1)
            {
                if (candle.GetValor(FormulaManager.LOW) <= vlrStop)
                {
                    //Se foi gap, então o stop será igual ao preço de abertura
                    if (candle.GetValor(FormulaManager.OPEN) <= vlrStop)
                    {
                        return(candle.GetValor(FormulaManager.OPEN));
                    }
                    else
                    {
                        return(vlrStop);
                    }
                }
            }
            else
            {
                //Venda
                if (candle.GetValor(FormulaManager.HIGH) >= vlrStop)
                {
                    //Se foi gap, então o stop será igual ao preço de abertura
                    if (candle.GetValor(FormulaManager.OPEN) >= vlrStop)
                    {
                        return(candle.GetValor(FormulaManager.OPEN));
                    }
                    else
                    {
                        return(vlrStop);
                    }
                }
            }

            return(-1);
        }