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); }
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); }
public override float Calc(Candle candle) { Candle c = candle; if (campo2 == null) { return(c.GetValor(campo1) + v2); } return(c.GetValor(campo1) + c.GetValor(campo2)); }
public override float Calc(Candle candle) { float v1 = candle.GetValor(campo1); float v2 = candle.GetValor(campo1); if (v2 == 0) { return(0); } return(v1 % v2); }
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)); }
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); }
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); }
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); }
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)); }
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); }
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); }
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); } }
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); }
//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)); } } }
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); }
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); }
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); }
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)); }
/* [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); }
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); }
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); }
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); }
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); }
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)); }
/* * 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); }
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); } }
/* * 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); }