예제 #1
0
        public void updateGrowthValues()
        {
            aPControl  = true;
            aPNControl = true;


            double pClose = (m_CurBarDat.Close(1));
            double cOpen  = (m_CurBarDat.Open(0));


            if (Math.Abs(pClose - cOpen) >= minAcepGap) //Se o gap for maior ou igual ao valor de pontos definido previamente, a operacao de GAP se torna valida.
            {
                shouldUseGapOperation = true;           //O robo utilizara o gap para a operacao.
                gapPeriodControl++;
                Print("GAP de " + (Math.Abs(pClose - cOpen) + " pontos!" + " Total de " + gapPeriodControl));
            }

            aP  = Math.Round((pClose * 1.005), 1);
            aPN = Math.Round((pClose * 0.995), 1);
        }
예제 #2
0
        /// <summary>
        /// Entry point. This function is called when new quote comes
        /// </summary>
        public override void OnQuote()
        {
            DateTime Daynow = CurrentData.Instrument.LastQuote.Time.ToLocalTime();

            if (Daynow.Hour == 09 && Daynow.Minute == 05)
            {
                initialDayValue = Performance.Gross();



                canTrade = true;
            }

            if (Daynow.Hour == 17 && Daynow.Minute > 0)
            {
                initialDayValue = Performance.Gross();
                canTrade        = false;
            }

            if (Daynow.Hour == 17 && Daynow.Minute > 35)
            {
                initialDayValue = Performance.Gross();
                canTrade        = false;
                Positions.CloseAllByAccount(Accounts.Current);                 //Caso ainda existam operacoes abertas, serao fechadas para impedir passar para o dia seguinte

                metaWin  = (xWin * (quantidade + 1));
                metaLoss = (-1 * (xLoss) * (quantidade + 1));

                Print(xWin + "   " + xLoss + "   " + quantidade);
            }


            All_ord = Orders.GetOrders(false);
            poses   = Positions.GetPositions();           //Variavel para verificar o total de ordens abertas, utilizado no loop abaixo.
            int i = 0;

            foreach (Position pos in poses)
            {
                //Verifica em "i" a quantidade de ordens abertas!
                i += 1;
            }



            //Informações barra anterior
            double pOpen  = m_CurBarDat.Open(2);
            double pClose = m_CurBarDat.Close(2);
            double pHigh  = m_CurBarDat.High(2);
            double pLow   = m_CurBarDat.Low(2);



            //Informações barra atual no momento que fechar
            double cOpen  = m_CurBarDat.Open(1);
            double cClose = m_CurBarDat.Close(1);
            double cHigh  = m_CurBarDat.High(1);
            double cLow   = m_CurBarDat.Low(1);



            double variacao = Math.Abs(cHigh - cLow);



            if (nextBarControl != m_CurBarDat.Open(1))
            {
                avisado = false;
                if (i == 0)
                {
                    removePendentes();
                }
            }

            nextBarControl = m_CurBarDat.Open(1);


            //Registra o padrão de baixa
            if (cHigh > pHigh && cClose < pClose && variacao == 2.5)
            {
                if (avisado == false)//Evita loop

                //Somente abre ordens se nao existir mais nenhuma aberta!
                {
                    if (i == 0)
                    {
                        removePendentes();  //Remove ordens pendentes para adicionar uma nova
                        gatilhoSell = true; //Gatilho acionado de venda
                        Send_order();       //Envia ordem
                    }
                    else
                    {
                        barraInv += 1;                 //Para fins de análise
                        gerenciamentoBarraInvertida(); //Aplica o gerenciamento de risco
                    }



                    gBaixa += 1;            //Para fins de análise
                    avisado = true;         //Evita loop
                    Print("Gatilhos de Alta : " + gAlta + " Gatilhos de Baixa: " + gBaixa);
                }
            }

            //Registra o padrão de alta
            if (cLow < pLow && cClose > pClose && variacao == 2.5)
            {
                if (avisado == false) //Evita loop

                //Somente abre ordens se nao existir mais nenhuma aberta!
                {
                    if (i == 0)
                    {
                        removePendentes(); //Remove ordens pendentes para adicionar uma nova
                        gatilhoBuy = true; //Aciona o gatilho de compra
                        Send_order();      //Envia a ordem
                    }
                    else
                    {
                        barraInv += 1;                 //Para fins de análise
                        gerenciamentoBarraInvertida(); //Aplica o gerenciamento de risco
                    }

                    gAlta  += 1;     //Para fins de análise
                    avisado = true;  //Evita loop
                    Print("Gatilhos de Alta : " + gAlta + " Gatilhos de Baixa: " + gBaixa + " Barras Invertidas: " + barraInv);
                }
            }
        }